速回 8051单片机的晶振为12MHz,下面是一段延时子程序,计算出该延时子程序的延时时间,并列出计算过程

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-30
若80C51 的晶振频率为12MHz,试计算延时子程序的延时时间。(要求计算过程)

当晶振为12MHz时机器周期为1uS(微秒) 标准51的DJNZ指命用时为二个机器周期,由于大循环R2中的数是50,小循环每次被重置为#100 ,
故就应该是 1(MOV R1,#50用)+2*50*100(循环所用)+50(MOV R2,#100用的)+2 (RET用的) 这个50 是第一条 MOV R2,#100 每跳出循环重置R2时就要多用的一个机器周期) 再在运行中没有其它中断来干扰时就该是 每从调用进这个子程序开始到完成RET出来就要用 10,053 uS

写过类似的亲

ORG 1000H
DEL: MOV R7,#20; 单周期1s ①这里没有循环,1T
DEL1:MOV R6,#125; 单周期1s ②这里循环20次,20T
DEL2:DJNZ R6,DEL2; 双周期2s ③这里循环20*125次,1000T
DJNZ R7,DEL1; 双周期2s ④这里循环20次,40T
RET; 单周期1s ⑤这里没有循环,1T
总共延时周期数=①+②+③+④+⑤=1062T
12M晶振时1T=1us,所以总延时时间=1062微妙=1.062毫秒

给楼上的推荐答案修正一下:
ORG 1000H
DEL: MOV R7,#20; 单周期1uS ( 晶振为12MHz)
DEL1:MOV R6,#125; 单周期1uS
DEL2:DJNZ R6,DEL2; 双周期2uS*125=250uS
DJNZ R7,DEL1; 双周期(2us+250+1)*20=5060uS
RET; 不是单周期指令 应该是 双周期2uS
延时时间t=1uS +(1us+250uS)×20+20×2uS+2uS=5063uS=5.063ms

ORG 1000H
DEL: MOV R7,#20; 单周期1uS ( 晶振为12MHz)
DEL1:MOV R6,#125; 单周期1uS
DEL2:DJNZ R6,DEL2; 双周期2uS*125=250uS
DJNZ R7,DEL1; 双周期(2us+250+1)*20=5060uS
RET; 单周期1s = 5.06 mS

DEL: MOV R7, #20 ;1T
DEL1: MOV R6, #125 ;1T
DEL2: DJNZ R6, DEL2 ;2T 125 * 2 = 250
DJNZ R7, DEL1 ;2T 20 * (1 + 250 + 2) = 5060
RET ;2T 1 + 5060 + 2 = 5063

加上调用指令,共用 5065 T。

20*125*2=5000 us=5 ms
如果精确的话应该是 5.022 ms ,其中2us是执行org 和del的时间,20us是执行20次del1的时间。