单片机使用的晶体振荡器的频率是12MHz,运行下列延时程序的延时时间是多少

DELAY:MOV R7,#250LOOP2:MOV R6,#200LOOP1:NOPNOPNOPDJNZ R6,,IOOP1 DJNZ R7,LOOP2 RET
2024-11-18 23:47:35
推荐回答(2个)
回答(1):

首先要明白,晶振12MHz时,机器周期1μs。
MOV R7,#,指令周期1μs
NOP,指令周期1μs
DJNZ R,指令周期2μs
RET,指令周期2μs
为计算程序执行时间,以注释形式给每条指令加上标号
DELAY: MOV R7,#250 ;1
LOOP2: MOV R6,#200 ;2
LOOP1:NOP ;3
NOP ;4
NOP ;5
DJNZ R6,LOOP1;6
DJNZ R7,LOOP2;7
RET 8
第3、4、5、6条指令每执行一次,耗费时间3x1μs+2μs=5μs
循环200次,耗时200x5μs=1000μs
加上第2条指令耗时1μs,第7条指令耗时2μs,内层循环总耗时1000μs+1μs+2μs=1003μs
外层循环250次,总共耗时250x1003μs=250750μs
加上第1条指令耗时1μs,第8条指令耗时2μs,整个程序耗时
250750μs+1μs+2μs=250753μs≈0.25s

回答(2):

第一应先看12MHz机器周期时间是多少,51单片机的话12M,1机器周期是1us,再来是指令要走既机器周期数,LCALL是2周期,MOV是1周期,nop是1周期,DJNZ是2周期,RET是2周期,
LOOP1时间就是:
LOOP2时间就是:(1+LOOP1)x250
总时间:2+ 1+(1+((1+1+1+2)x200))x250 +2=250255us
就是你调用这个函数所用的时间