单片机精确软件延时的设计的方法的研究.docVIP

  • 13
  • 0
  • 约3.75千字
  • 约 10页
  • 2018-10-14 发布于福建
  • 举报

单片机精确软件延时的设计的方法的研究.doc

单片机精确软件延时的设计的方法的研究

单片机精确软件延时的设计的方法的研究   摘要: 在单片机控制应用中,经常会遇到需要短时间延时的情况,有时还需要很高的精度。然而每次延时都使用定时器/计数器是没有必要的也是不现实的,利用软件延时程序来完成一些需要延时的部分势在必行。从研究软件延时程序模式出发,指出计算整个延时时间的具体方法,并在此基础上归纳一种设计精确软件延时的数学算法。   关键词: 单片机;软件延时;数学算法   中图分类号:NT 文献标识码:A 文章编号:1671-7597(2011)0310081-02      1 软件延时的基本原理   单片机在进行控制时,CPU过一段时间再去作某件事情,称之为延时。延时分为硬件延时和软件延时。硬件延时是指使用定时/计数器来实现延时,这种方法不占用CPU的工作时间。软件延时是利用程序中的指令在被执行时要花费一定的机器周期来实现的,占用CPU的工作时间。软件延时主要与两个因素有关,一是所用的晶振,二是延时程序的循环次数。单片机所用的晶振一经确定之后,延时时间就被指令的循环次数所唯一确定了,如单片机的晶振频率为6MHz,则一个机器周期为2μs。下面根据指令循环的次数的不同,先来介绍软件延时时长的计算方法(设晶振频率为12MHz)。   2 软件延时时长的计算方法   软件延时常用如表1的汇编指令。   1)单循环延时程序   DEL:MOV R0,#X;1T   DEL1:DJNZ R0,DEL1;2XT   RET;2T   延时时间:t=1+2X+2=2X+3=2R0+3   因为X的取值范围是[0,255],X=0时延时时间最长。所以延时时间t的取值范围是[5,515]μs。   2)二重循环程序   DEL:MOV R1,#Y ;1T   DEL1:MOV R0,#X ;1YT   DEL2:DJNZ R0,DEL2;2XYT   DJNZ R1,DEL1;2YT   RET;2T   延时时间:t=1+1Y+2XY+2Y+2   =2XY+3Y+3=2R0R1+3R1+3   因为X、Y的取值范围均为[0,255],X=Y=0时延时时间最长。所以延时时间t的取值范围是[8,131843]μs。   3)三重循环程序   DEL:MOV R2,#Z ;1T   DEL1:MOV R1,#Y ;1ZT   DEL2:MOV R0,#X ;1YZT   DEL3:DJNZ R0,DEL3;2XYZT   DJNZ R1,DEL2;2YZT   DJNZ R2,DEL1;2ZT   RET;2T   延时时间:   t=1+1Z+1YZ+2XYZ+2YZ+2Z+2   =2XYZ+3YZ+3Z+3   =2R0R1R2+3R1R2+3R2+3   同理,延时时间t的取值范围是[11μs。   综上分析,由数学归纳法可得出N(N一般不大于8)重循环的延时时间计算公式:   3 C语言中延时程序的设计方法   在用C语言进行编程时涉及到的软件延时程序,其设计方法与汇编语言的设计方法本质相同。例如,在C语言的一个实例程序中用for语句编写了一个延时子程序(该程序要求延时100ms)。   delay(void)   { unsigned char i,j;    for(i=250;i=1;i--)    for(j=200;j=1;j--)    {}   }   利用keil c的反汇编功能,通过调用disassembly window命令查看到的汇编程序如下。   C:0X0060 7F7D MOV R7,#0XFA   C:0X0062 7F32 MOV R6,#0XC8   C:0X0064 DEFE DJNZ R6,C:0064   C:0X0066 DFFA DJNZ R7,C:0062   C:0X0068 RET   带入所得公式计算结果是100753μs,利用keil c的测试工具得出的延时时间为100755μs,误差是由调用指令引起,后有详细分析。可以得出结论,此处C语言中的for语句不仅与汇编语言中的DJNZ命令起到的作用类似且计算延时的方法也完全相同。即上面得出的公式同样适用于计算用C语言编写的延时程序。下面考虑一个相反的问题,也是本文着重要讨论的。   4 软件延时程序的设计算法   在实际的编程过程中,人们往往想得到一个规定了延时长度的延时子程序,即在已知延时时间的前提下设计循环次数。设计延时程序时应注意使循环的重数尽量少,以减少寄存器的使用量,同时也使程序更加简单,出错的可能性随之降低。其次尽量不使用寄存器R0、R1,因为它们经常用在间接寻址及需要传送外部数据的地

文档评论(0)

1亿VIP精品文档

相关文档