首先先说一下AVR8位的通用定时器寄存器T/C0:
有一句不太理解的话:所有中断都可以通过 (定时器中断屏蔽寄存器)TIMSK单独进行屏蔽。
解释:TIMSK寄存器是一个定时器/计数器中断屏蔽寄存器,就是说TIMSK可以去单独屏蔽一些中断。
适用于内部的定义: BOTTOM 计数器达到0x00时即达到BOTTOM MAX:计数器计数达到最大值时达到MAX
时钟源的配置:可以选择内部时钟配置或者外部时钟配置。
计数器的操作:对于计数器来说,计数器计数始终增加,当计数器值超过0xff时,从ox00开始重新计数。当TCNT0计数器置为0时,溢出标志位TOV0置位。
TOV0可以通国定时器溢出中断清零。
/*下面正式进入定时器的探究学习*/
定时器的操作:首先肯定是需要设定初值,然后给定时器设置的一般步骤是(1)配置TIMSK寄存器-溢出中断使能哪一个定时器;(2)配置TCCRX寄存器,设定时钟源信号分频率;(3)配置TCNTX寄存器,设定初值。
那么在中断函数中的使用最主要的一点是将中断向量地址映射到正确的地方上,一般来说定时器的中断向量地址必须在TIFR寄存器中配置0位-TVOX溢出标志位来判断是否进入定时器中断,但是在AVR中,直接在中断函数名中映射中断溢出向量也可以达到这个目的:
interrupt [TIM2_OVF] void timer2_ovf_isr(void) //其中的TIM2_OVF便是定时器2的溢出标志位
定时器中断进入后,一般需要重置定时的初值 TCNTX,然后编写代码函数。
所以总结一下。定时器的操作:
定时器的初始化:
(1)配置TIMSK 中断溢出使能
(2)配置TCCRX 定时器使能
(3)配置TCNTX 定时器初始化的配置
定时器中断的设置:
(1)函数名的配置--必须和定时器的中断变量映射一致
(2)进入函数后最好先初始化定时器TCNTX的初值
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』