求单片机高手解答延时问题,急!!!

DEL:MOV R7,#04H
DEL1:MOV R6,#0FFH
DEL2:MOV R5,#0FFH
DEL3:DJNZ R5,DEL3
DJNZ R6,DEL2
DJNZ R7,DEL1
RET

晶振=12MHz,求延时时间,最好有计算过程!

MOV R7,#04H语句执行1次 占1个机器周期
MOV R6,#0FFH 执行4次 占4个机器周期
MOV R5,#0FFH执行4+4*255次 占4+4*255个机器周期
DJNZ R5,DEL3执行4*255*255次 占4*255*255*2个机器周期
DJNZ R6,DEL2执行4*255次 占4*255*2个机器周期
DJNZ R7,DEL1执行4次 占4*2个机器周期
RET 占2个机器周期
调用 ACALL 占2个机器周期
一个机器周期为1微秒
延时为T=1+4(1+1+1*255(1+255*2+1*2)+2)+2+2(US)=523281 US
以上是精确的延时,比较复杂
我们也可以粗略估计只考虑以下语句延时
DEL2:MOV R5,#0FFH
DEL3:DJNZ R5,DEL3
DJNZ R6,DEL2
T1=4*(255*(1+255*2+1*2))=523260 US
T1和T很接近,因此工程上常用后者计算延时时间
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-02
上机说的不是很准确吧?
对于普通的12clock 51单片机来说
晶振=12MHz
则机器周期=1us
MOV为1个周期,DJNZ为两个周期。所以

1.4*(255*(255*2+3)+3)=130827us (三层循环)
2.子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
3.延时总时间 = 三层循环 + 循环外= 130827us+5us
结果为130832us
第2个回答  2009-06-02
MOV 是一个机器周期 DJNZ 是一个
晶振12M,51核的话一个机器周期就是1微秒
那么
255*255*4+3 微秒
+3可以省略了
第3个回答  2009-06-02
255*255*4*2
相似回答