本节介绍计数器的使用方法。与定时器类似,如果熟练掌握了定时器,那么本节对你就较为容易。
一、工作原理
在介绍定时器时,就曾说过,定时器与计数器都是由TR0和TR1操控的,只是同一时间只能使用其中一个。
计数器:
对外部事件以脉冲的形式进行计数。什么意思呢,举一个例子,如果我们想通过按3次按键(外部事件)实现LED灯的亮与灭。其中每按下一次按键就会有一个下降沿(脉冲的形式),触发3次下降沿就会实现模式的切换。简而言之:每次我们按下按键则计数器自动加1,直到计满溢出。
定时器:
启动计时器后,每当一个机器周期到来,则初值寄存器加1,直到计满溢出。
外部中断:
出发形式设置为下降沿触发,则对应引脚来一个下降沿则触发中断。
对比上述三者。
计数器与定时器的不同点在于:对象不同,计数器与机器周期无关,针对的是外部引脚,而定时器与外部引脚无关,只与机器周期有关。
计数器与外部中断的不同点在于:初值不同,外部中断每接受到一个下降沿就会启动中断,而计数器可以自己控制初值。比如接受好几个下降沿信号才触发中断。
二、代码实现
先是主函数对TMOD进行初始化,可以结合定时器的工作方式类比。不记得的小伙伴也可以参照下图
注意:D1和D0的选择,取决于,所要计数的个数,如果个数少就采用D1(即D1=1),如果个数多就采用D2。
接下来是TH0与TL0的置处置。如果把0xfd进行转换不难发现,初值为253,也就是我们要计3个数。
三、总结
本节与定时器紧密联系。
重点:弄清楚计数器与定时器,及外部中断间的区别。
无难点。
那么本节就到此结束。