在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++;
}
来源:https://blog.csdn.net/qq_28317769/article/details/99424584