题目中的答案是错的。应该是:19960606 us
本题目的程序,共有三重循环,耗时的精确计算方法,可见下图。
图中,还给出了用 keil 调试结果的画面。
包括调用指令的时间,共用了19960610 us。
DEL: MOV R5,#100
DEL0: MOV R6,#200
DEL1: MOV R7,#248
DEL2: DJNZ R7,DEL2
DJNZ R6,DEL1
DJNZ R5,DEL0
RET
MOV R7,#248;2us
DJNZ R7,DEL2 ;4us
T1=R7*4+2=248*4+2=994us
MOV R6,#200 ;2us
... ;T1
DJNZ R6,DEL1 ;4us
T2=(T1+4)*R6+2=(994+4)*200+2=199602us
MOV R5,#100 ;2us
... ;T2
DJNZ R4,DEL0 ;4us
RET ;2us
T=(T2+4)*R5+2+2=(199602+4)*100+4=19960604us
DEL: MOV R5,#100 单周期,执行1次
DEL0: MOV R6,#200 单周期,执行1+99=100次
DEL1: MOV R7,#248 单周期,执行1+199*100=19901次
DEL2: DJNZ R7,DEL2 双周期,执行248*200*100=4960000次
DJNZ R6,DEL1 双周期,执行200*100=20000次
DJNZ R5,DEL0 双周期,执行100次
RET 双周期,执行1次
T=(1+100+19901+(4960000+20000+100+1)*2)*2=19960408us
R7循环即DEL2循环时间:248*2=496US;
R6循环即DEL1循环时间:(4+(R7循环))*200=100000us;这里的4US为赋值和DJNZ二条指令时间;
R5循环即DEL0循环时间:(4+(R6循环))*100=10000400US=10.000400s;这里的4US同上道理;
最后6US为调用退出时间;
好长时间没上了,出来冒个头,来帮你回答下吧。
DEL: MOV R5,#100 1T
DEL0: MOV R6,#200 1T
DEL1: MOV R7,#248 1T
DEL2: DJNZ R7,DEL2 2T
DJNZ R6,DEL1 2T
DJNZ R5,DEL0 2T
RET
因为是6M晶振,所以 T=2US
初略估算时间:
248*2T*200*100=19840000
精确计算时间:
1T+1T+1T+((248*2T+2T)*200+2T)*100+2T=结果自己算吧。
你的答案对吗?好像不对也。你的答案是在12M晶振下的答案,肯定不对,实际结果比你答案应该多一倍,不信可以用KEIL仿真下。