首页 >> 高温球阀

单片机定时器延时程序其实可以这么设定彩瓦机

发布时间:2022-10-10 02:58:53 来源:嘉威机械网
单片机定时器延时程序其实可以这么设定

单片机定时器在平时的工作中,其主要的功能之一就是为整个51单片机系统提供延时程序的精确控制。此前我们曾经从硬件设置和程序编写两个方面,为大家介绍过如何利用单片机定时器进行精确延时,今天小编找到了两种能够精确完成延时程序设定方法,在这里与各位工程师一同分享。

首先要为大家介绍的是利用示波器确定单片机定时器延时时间的方法。这种方法虽然并不是很常见,但是也同样可以帮助工程师完成延时程序的设定。这种设定方法的操作流程如下:编写一个实现延时的函数,在该函数的开始置某个I/O口线如P1.0为高电平,在函数的最后清P1.0为低电平。在主程序中循环调用该延时函数,通过示波器测量P1.0引脚上的高电平时间即可确定延时函数的执行时间,其具体程序的设定情况为:

可以看到,这种延时程序的设定并不是非常复杂,操作起来也比较简单。在完成了对单片机定时器的延时程序设定之后,接下来我们仅需要把P1.0接入示波器,运行上面的程序即可。在这种程序的运行过程中,我们可以看到P1.0输出的波形为周期是3ms的方波。其中,高电平为2ms,低电平为1ms,即for循环结构的执行时间为1ms。通过改变循环次数,可得到不同时间的延时。当然,也可以不用for循环而用别的语句实现延时。这里讨论的只是确定延时的方法。

第二种要为大家介绍的单片机定时器延时程序设定方式,是使用反汇编工具计算延时时间的方法。在平时的应用过程中,我们可以选择用KeilC51中的反汇编工具计算延时时间,在反汇编窗口中可用源程序和汇编程序的混合代码或汇编代码显示目标应用程序。为了说明这种设定方法,这里我们还是使用上面的for循环结构为案例进行解说。如果要在该程序中加入这一循环结构,首先我们需要选择buildtaget,然后再单击start/stopdebugsession按钮进入程序调试窗口,最后打开Disassemblywindow,找出与这部分循环结构相对应的汇编代码,具体设定情况如下:

从该程序的设置过程中我们可以比较明显的看出,在0x000F~0x0017中,一共有8条语句,分析语句可以发现并不是每条语句都执行DlyT次。然而,其核心循环只有0x0011~0x0017共6条语句,总共由8个机器周期,第1次循环先执行“CLRA”和“MOVR6,A”两条语句,需要2个机器周期,每循环1次需要8个机器周期,但最后1次循环需要5个机器周期。DlyT次核心循环语句消耗(2+DlyT×8+5)个机器周期,当系统采用12MHz时,其精度为7μs。而当采用while(DlyT--)循环体时,DlyT的值存放在R7中。相对应的汇编代码如下:

在这段单片机定时器延时程序的运行过程中,本阶段循环语句执行的时间可计算为为(DlyT+1)×5个机器周期,即这种循环结构的延时精度为5μs。通过实验不难发现,如果我们将while(DlyT--)改为while(--DlyT),经过反汇编后就能够得到一个新的代码,我们可以将这一代码写为C:0x0014DFFEDJNZR7,C:0014//2T。相信很多工程师应该已经看出,这时的代码只有1句,占用2个机器周期,精度达到2μs,循环体耗时DlyT×2个机器周期。

标签:单片机定时器
即热式电热水器怎么安装
彩电的高压包怎么拆开
冰箱压缩机转但不制冷
空调制冷室外机不启动
友情链接