单片机定时器精准定时_通过51单片机定时器/计数器实现精确延时

2023-05-16

MCS-51单片机内部共有两个16位可编程定时器,计数器,即TO、Tl。既有定时功能,又有计数的功能。每个定时器都是由两个8位的特殊功能寄存器THi和TLi组成(i=0、1)。TMOD是TO和Tl的工作方式控制寄存器,TCON是TO和Tl的运行状态控制寄存器。在实际应用时,应首先根据需要对这些寄存器进行初始化,即设置TO和Tl的工作方式并对TO和Tl定时器装入初始值以得到精确的定时时间。TO和Tl的工作方式及运行状态是由TMOD和TCON两个特殊功能寄存器控制的,而TMOD和TCON是由用户所编的程序控制的。

定时器的核心是一个加l计数器,加l计数器的脉冲有两个来源:一个是系统时钟振荡器,另一个是外部脉冲,计数器对脉冲进行计数。当定时器/计数器用作定时器时是对机器周期进行计数,每经过一个机器周期计数器就加1,不断自加直到数满溢出,定时器的定时时间不仅与计数器初值有关,而且与系统的时钟频率有关。当定时器/计数器用作计数器时,计数器对来自输入引脚TO和Tl的外部脉冲计数。

MCS-51每个定时器有4种工作方式:方式0是13位计数结构,计数器由TLi的8位与THi的低5位构成,定时范围为(1—213)个机器周期;方式1是16位计数结构,定时范围为(1~216)个机器周期;方式2是8位计数结构,计数器由TLi的8位组成,当定时器溢时.THi的值能自动装入TLi中,并在此值基础上自动计数;在方式3下,也是8位的计数器,并且TO的各控制位和引脚归TLO使用,THO借用Tl的各控制位和引脚信号,Tl只能按不需要中断的方式0、1、2工作。通常用做串行通信的波特率发生器。

在实际应用中,定时器可以采用查询和中断方式,用查询的方式,程序执行的效率比较低,比较常用的是中断方式,使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。

下面我们看一个例子,需要延时为50ms,我们可以取定时器TO在工作方式1,计数初值为65536-50000=15536=3CBOH,用汇编编写中断服务程序如下:

从定时器溢出,发出中断要求,系统接受该中断要求,执行类似“LCALLXX”的动作,将正在执行的程序PC低位、高位压人堆栈,然后加载中断失量地址(0013H)到PC中,这一段过程要耗3个机器周期。在中断服务程序中把初值重新装入定时器并开启计数器①~⑥共占了10个机器周期,TLO初值应该赋值#OBDH。因为而此段位于0013H的程序超过8个字节会影响定时器1的中断入口(OOIBH),所以,要么0013H放一个中断跳转子程序,要么压缩语句。我们选用后者。因为在中断子程序中没有用累加器A,也没有运算操作,所以程序①、②、⑦、⑧可以省去。将程序③、⑥省去使计数器0-直打开,从⑤赋值后开始计算。程序修改为:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机定时器精准定时_通过51单片机定时器/计数器实现精确延时 的相关文章

随机推荐