原创 单片机延时汇编语言计算方法

2008-3-20 18:48 3614 1 2 分类: MCU/ 嵌入式

我们用汇编语言写单片机延时10ms的程序(用的是12MHz晶振的  MCS-51),可以编写下面的程序来实现:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


MOV R5,#5      


 D1:   MOV R6,#4      


 D2:     MOV R7,#248    


          DJNZ R7,$       


          DJNZ R6,D2      


      DJNZ R5,D1      


      RET            


这个延时程序共有七条指令,现在就每一条指令执行的次数和所耗时间进行分析:


第一条,                   MOV R5,#5 在整个程序中只执行一次,且为单周期指令,所以耗时1μs


第二条,                   MOV R6,#4 ⑥的指令可知,只要R5-1不为0,就会返回执行这条指令,共执行了R5次,共耗时5μs


第三条,                   MOV R7,#248 同第二条类似,只要R6-1不为0,就会返回执行这条指令,同时受到外部循环R5的控制,共耗时R5*R6*1=20μs


第四条,                   DJNZ  R7,$ 只要R7-1不为0,就执行这条指令,同时受到外部循环的控制,由于该指令是双周期指令,共耗时为R7*R6*R5*2=9920μs


第五条,                   DJNZ  R6,D2 只要R6-1不为0,就反复执行此条指令(内循环R6次),又受外循环R7的控制,共耗时R6*R5*2=40μs


第六条,                   DJNZ  R5,D1 只要R5-1不为0,就反复执行此条指令,耗时为R5*2=10μs


第七条,                   RET 此指令为双周期指令,耗时为2μs


我们也要考虑在调用子程序时用到LCALL指令,耗时2μs,最后可以得到总的延时为:1+5+20+9920+40+10+2+2=10000μs=10ms


我们可以总结延时总时间的公式:


延时总时间=[(2*一层循环次数+3)*二层循环次数+3]*三层循环次数+5


注意此公式只适用于三层以内的循环。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2012-5-11 17:02

好,顶!!
相关推荐阅读
我要评论
1
1
关闭 站长推荐上一条 /1 下一条