单片机定时器在平时的工作中,其主要的功能之一就是为整个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个机器周期。
声明:本内容为作者独立观点,不代表电源网。本网站原创内容,如需转载,请注明出处;本网站转载的内容(文章、图片、视频)等资料版权归原作者所有。如我们采用了您不宜公开的文章或图片,未能及时和您确认,避免给双方造成不必要的经济损失,请电邮联系我们,以便迅速采取适当处理措施;欢迎投稿,邮箱∶editor@netbroad.com。
新人必看 单片机定时器应用实例解析 | 16-01-11 09:20 |
---|---|
解疑答惑 单片机定时器常见两大应用问题解析 | 15-12-10 09:25 |
新人小白必看 单片机定时器基础概念科普 | 15-12-03 09:37 |
基于51单片机定时器的电子时钟设计方案分享 | 15-11-26 09:41 |
两大单片机定时器中断时间误差原因总结分析 | 15-11-19 09:25 |
微信关注 | ||
技术专题 | 更多>> | |
2024慕尼黑上海电子展精彩回顾 |
2024.06技术专题 |