关于溢出中断不管是哪个单片机都是不断累加,使其寄存器溢出触发中断,然后跳转到中断函数处执行中断服务程序。对于定时器初值的设定可以加深对定时器的工作原理的理解。
下面的是8位定时器设定的时候需要用的寄存器:
实验平台:ATMega16
晶振:
对初值的计算:
实验代码: 定时10ms
#include <iom16.h>
unsigned char flag = 0;
void timer_init(void)
{
TCCR0 = 0x05;
TCNT0 = 0x94;
TIMSK_TOIE0 = 1;
SREG_I = 1;
}
#pragma vector = TIMER0_OVF_vect
__interrupt void time0_normal(void)
{
}
void main(void)
{
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
实验平台:ATMega16
晶振:11.0592
16位定时器初值设定:
实验代码:
#include <iom16.h>
unsigned char flag = 0;
void timer_init(void)
{
TCCR1B = 0x04;
TCNT1H = 0x57;
TCNT1L = 0x40;
TIMSK_TOIE1 = 1;
SREG_I = 1;
}
#pragma vector = TIMER1_OVF_vect
__interrupt void time1_normal(void)
{
TCNT1H = 0x57;
TCNT1L = 0x40;
}
void main(void)
{
}