单片机的朋友请进!请问,最简单的延时程序是怎么计算的?

DELAY: MOV R5,#20 ;延时子程序,延时0.2秒
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END

这段程序是怎么计算出0.2ms的?

精确计算如下:

DELAY:
MOV R5,#20 ---1T
D1: MOV R6,#20--1T
D2: MOV R7,#248 -1T
DJNZ R7,$ ----2T,(2) * 248 = 496
DJNZ R6,D2----2T,(1 + 496 + 2) * 20 = 9980
DJNZ R5,D1----2T,(1 + 9980 + 2) * 20 = 199660
RET-------2T, 1 + 199660 + 2 = 1996603

总共,耗用199660 T。

时间,关键是要取决于晶振频率。
当晶振频率=12MHz,则有 T = 1us。追问

为什么?DJNZ还有RET这四条指令都是需要执行两个机器周期而不是一个呢?
DJNZ R7,$ ----2T,(2) * 248 = 496
DJNZ R6,D2----2T,(1 + 496 + 2) * 20 = 9980
DJNZ R5,D1----2T,(1 + 9980 + 2) * 20 = 199660
RET-------2T

追答

1T、2T,并没有为什么,也不是我说多少就是多少。

你查一下表,就知道了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-21
计算单片机执行了多少条指令
相似回答