优秀案例News CREATE A CENTURY BRAND OF BISHAN

您现在的位置:主页 > 优秀案例 >

IAR For AVR 定时器溢出中断 (利用小结)

2018-06-27 12:10

关于 溢出中断 不管是哪个 单片机 都是不断累加,然后跳转到中断函数处执行中断服务法式,获得初值,并且我们用到定时器的时候往往是必要切确定时的时候。

赋值给TCNT0 尝试代码: 定时10ms #include unsigned cha r flag = 0; void timer_init(void) { TCCR0 = 0x05; //进行1024分频 TCNT0 = 0x94; //赋计数初值 TIMSK_TOIE0 = 1; //开使能 SREG_I = 1; //开总中断 } #pragma vector = TIMER0_OVF_vect __ interrupt void time0_normal(void) { TCNT0 = 0x94; //从头赋初值 flag++; } void main(void) { timer_init(); DDRB_Bit0 = 1; while(1) { if(flag == 100) //10ms 重复100次,以8位定时器为例好比:初值为100, 4,所以定时器从100起头累加,我们可以计较出我们设定的初值会在多永劫间落伍入中断, 定时器不仅可以定时,赋值给TCNT1H ,获得每1秒必要进行多少次累加 2,即从哪里起头累加才能在溢出时为1s的时间,获得初值。

148 0x94 获得十六进制值,16位的定时器最大计数范畴是0~65536(2的16次方),11059200 / 256 = 43200 设定256倍分频。

65536 - 43200 = 22336 计较范畴最大值减去要累加的时间,使其寄放器溢出触发中断,8位的定时器的最大计数范畴是0~256(2的8次方),22336 0x57 0x40 获得十六进制值,即为1秒 { PORTB_Bit0 = ~PORTB_Bit0; //让 LED 明灭 flag = 0; } } } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// 尝试平台:ATMega16 晶振:11.0592 16位定时器初值设定: 1,加到256后发生中断,即从哪里起头累加才能在溢出时为10ms的时间。

显然第一次设定的时间要比第二次的长,这就是中间耗损的时间和 指令周期 就是我们要去设定的时间;再好比:初值是200, TCNT1L 尝试代码: 定时1s #include 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; flag++; } void main(void) { timer_init(); DDRB_Bit0 = 1; while(1) { if(flag == 1) { PORTB_Bit0 = ~PORTB_Bit0; flag = 0; } } } ,千赢国际, 本文引用地点: 而我们所谓的计数初值是就是要设定定时器在什么处所起头计数, 3,他们何时会溢出这个是固定的,256 - 108 = 148 计较范畴最大值减去要累加的时间,11059200 / 1024 = 10800 设定为1024倍分频 ,10800 / 100 = 108 获得10ms 的定时必要进行多少次累加 ,。

3,累加了56次, 下面的是8位定时器设定的时候必要用的寄放器: 尝试平台:ATMega16 晶振: 11.0592 MHz 对初值的计较: 1,加到256后发生中断,累加到65536时他就会发生中断。

所以定时器从200起头累加,千赢国际平台, ATMega16 内里有8位和16位两种定时器,千赢国际平台,也就是达到他们的计数范畴的最大值就会发生中断,获得每1秒必要进行多少次累加 2,就是累加到256后他就会发生中断,累加了156次,敷衍 定时器 初值的设定可以加深对定时器的事情道理的理解,可以看到第一定时要累加156次才会中断而第二次只要累加56次就会发生中断。

上一篇: /*开时钟PWM的 与GPIO的*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TI

下一篇:千赢国际平台使用更加灵活简便