在经历过上一章的粗暴for()循环进行延时和简单的delay_ms(),delay_us()精准延时之后,本章介绍另一种精准延时定时器
定时器基本可以分为四种定时器
本章为大家着重介绍定时器timerA进行定时
Timer_A是一个16位计时器/计数器,有三个捕获/比较寄存器。分别为CCR0,CCR1,CCR2。
Timer_A可以支持多个捕获/比较、PWM输出和间隔计时。Timer_A还具有广泛的中断功能。在溢出条件下,可以从计数器和每个捕获/比较寄存器中生成中断
1 定时器A的时钟源和分频比
定时器A的时钟源可以是TACLK,ACLK,SMCLK,INCLK,四种时钟。使用ID_X进行1/2/4/8分频
2 定时器模式
<1>停止模式
停止使用
<2>增模式
向CCRx写入数值计数器会从0增加到TACCRx发生中断,进入中断服务程序
写入CCRx的值必须与0XFFFFH不相同
注意
当程序运行时如果我们改变CCRX的值,新值>=CCRX计数器会计数到新值发生中断,新值<=CCRX,计数器计数到新值,额外计数到CCRX在计数到0发生中断下一次以后将会从0计数到新的CCRX然后产生中断。
<3>连续模式
计数器从0计数到最大值0XFFFFH,发生中断
连续模式可以用来产生独立的时间间隔和输出频率。每次间隔结束时,就会产生一个中断。下一个时间间隔被添加到中断服务程序中的TACCRx寄存器中。图11 - 6显示了两个单独的时间间隔t0和t1被添加到