徐晓峰
2021.4.27
51单片机给我们提供了2个计时器中断,分别是计时器0和计时器1,他们对应的优先级分别是1和3,开启计时器并允许其中断后,计时器会从给定的初始值开始,每个指令周期加1,直到加到65535,再加一时计时器溢出,计时器此时会进入中断,并执行中断服务函数。
- 虽然书上讲的很清楚了,但实际使用还是有些许差别,我自己是这样理解的
65536-50000的由来
- 假设我使用的单片机的晶振为12MHZ,其机器周期是1us,即每1us产生一次计数
- 如果设计一个1s的定时器,理论上是需要1*10^6个机器周期,但定时器T0只能对机器周期能进行最大65536次计数,很明显已经超过了,并不能直接采用T0的默认值
- 转下思维模式,取个65535之内的整数值,经过简单倍数关系即可转换为1s。很明显,50ms符合要求。即一次中断5 * 104次,中断20次即为1s
- 但根据中断原理,T0中断器溢出时计数1次,但5 * 104<65536,根本不会发生溢出。此时有需要转下思维模式,如果我给T0定时器附上初始值,使其从初试值开始计数,最终读数为65536发生溢出,中断一次。这个初始值就是65536和5 * 104的差值
/256 和 %256 的由来
- T0中断器由两个8位构成,低8位,即28,满打满算也只能计数256个机械周期,当大于256个机械周期就必须采用高8位了。换而言之,高8位每增加1,低八位就装满一次。
- 故用初始值除以256取整,存入高8位。取余,即小于256次数,放入低8位。
TH0=(65536-50000)/256;

本文详细解释了如何利用51单片机的定时器0(T0)实现1秒定时,并通过实例演示了移位和累计流水灯的编程方法。作者深入解析了计数溢出、初始值设定及TH0/TL0计算的原理。
最低0.47元/天 解锁文章
3430

被折叠的 条评论
为什么被折叠?



