ATmega16定时器1的时间设定

断了今生、忘了曾经 提交于 2019-11-27 05:03:55

在Atmel Studio 7环境下编写程序感觉比较舒服。

目的:根据设定的时间触发中断,触发一次,变量累加一次;

 

用到中断,所以一开始需要#include

变量:unsigned char  time = 0;

 

定时器1配置:

void ConfigTimer1(unsigned int set)

{

TCCR1B |= (1<<2);//256分频      比如12M ,就是12000000/256  

tmp = 65536-set;//set=( 晶振频率/分频) * 定时时间)

TCNT1H = (unsigned char)(tmp>>8);//赋初值 高8位  

TCNT1L = (unsigned char)tmp;//低8位

TIMSK |= (1<<2);//定时器溢出中断使能

}

此处的初值设置个人这么理解:

比如是 0XD8F0,强制转换为char类型,该类型是8位,所以TCNT1L就取到了第八位0XF0;

把0XD8F0右移8位(当然也可以  /256),不就是0X00D8了,然后强制,TCNT1H就取到高八位0XD8;

 

void main()

{

  此处一般都是初始化程序;

  ConfigTimer1(50);

  SREG |= (1<<7);//开全局中断

  

  while(1)

  {

    此处写实现某功能的程序;

  }

}

 

触发中断,就会进入中断函数

中断函数:

ISR (TIMER1_OVF_vect)

{

  TCNT1H = (unsigned char)(tmp>>8);

  TCNT1L = (unsigned char)tmp;

 

  time++;

}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!