单片机多重循环延时程序(在线等)

2025-03-19 11:44:43
推荐回答(5个)
回答(1):

题目中的答案是错的。应该是:19960606 us

本题目的程序,共有三重循环,耗时的精确计算方法,可见下图。

图中,还给出了用 keil 调试结果的画面。

包括调用指令的时间,共用了19960610 us。

回答(2):

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

回答(3):

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

回答(4):

R7循环即DEL2循环时间:248*2=496US;
R6循环即DEL1循环时间:(4+(R7循环))*200=100000us;这里的4US为赋值和DJNZ二条指令时间;
R5循环即DEL0循环时间:(4+(R6循环))*100=10000400US=10.000400s;这里的4US同上道理;
最后6US为调用退出时间;

回答(5):

好长时间没上了,出来冒个头,来帮你回答下吧。
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仿真下。