求解51单片机延时程序计算

ORG 0050H
DELAY:MOV R0,#0AH
DL2:MOV R1,#7DH
DL1:NOP
NOP
DJNE R1,DL1
DJNZ R0,DL2
RET
求每句指令的机器周期,并算出总延时时间。
希望详细点,谢谢啊!

呵呵:一楼错在时钟周期和频率的关系没弄对;
二楼错在内循环没算DJNZ的两个周期
=======================================
正解:
1)首先要知道单片机时钟晶振频率为多少?设fosc=6MHz。
2)时钟周期T是计算机基本时间单位,同单片机使用的晶振频率有关。
那么T =1/fosc=1/6M=166.7ns。
3)机器周期T1是指CPU完成一个基本操作所需要的时间,如取指操作、读数据操作等,机器周期=12 T =166.7ns X 12=2µs。
4)指令周期是指执行一条指令所需要的时间,因此指令周期没有确定值,一般为1~4个T机器周期。
5)本题各指令的机器周期为:
程序 机器周期数 一次用的时间µs
ORG 0050H 0
DELAY:MOV R0,#0AH 1 2
DL2:MOV R1,#7DH 1 2
DL1:NOP 1 2
NOP 1 2
DJNE R1,DL1 2 4
DJNZ R0,DL2 2 4
RET 2 4
6)延时时间:
(1)内循环: 时间
DL1:NOP 2
NOP 2
DJNE R1,DL1 4
内循环的循环次数为125(07DH),延时时间为:125 X (2+2+4)=1000µs=1ms
(2)外循环:外循环的循环次数为10(0AH),
总循环:10 x 1000µs=10000µs=10ms
(3)精确计算:
MOV R0,#0AH 运行了1次用 2µs
DL2:MOV R1,#7DH 运行了10次用2x10µs
DL2:MOV R1,#7DH 运行了10次用4x10µs
RET 运行了1次用4µs
所以精确计算为:10000+2+20+40+4=10066 µs
一般情况下回答延时10000µs即10ms即可
(4)说明若选用的晶振fosc=12MHz 那么以上的计算周期数不变,时间减半,即为10066/2=5033µs,或粗略答为:5000µs(5ms)。

以上答案希望有所帮助,并祝学习进步!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-13
一楼算错了吧。
DELAY:MOV R0,#0AH 2
DL2:MOV R1,#7DH 2
DL1:NOP 1
NOP 1
DJNE R1,DL1 2
DJNZ R0,DL2 2
RET 1

算法:最先算最里层:
DL1:NOP
NOP
DJNE R1,DL1
125*2+1+1=252

再算第二层;
(252+1+2)*10=2550
再加上头尾:
2550+2+1 = 2553
假如你是12M的晶振,这个总时间是2553us
如果为6M,总时间是5106us
第2个回答  2009-06-13
DELAY:MOV R0,#0AH ;一个周期
DL2:MOV R1,#7DH ;一个
DL1:NOP ;一个
NOP ;一个
DJNE R1,DL1 ;两个
DJNZ R0,DL2 ;两个
RET
一次循环:125*4=1000个周期
二次循环:(1000+1+2)*10=10030个周期
如果你的晶振是12M的话,总延时时间:10030*1uS
第3个回答  2019-01-29
我以2ms为例说明一下:

单片机的晶振周期为12hz,则执行一条代码为一个机器周期,为1微妙(ua),所以2ms=10*200(ua),

对r2赋值200(4位二进制数最大值为256,所以只能取到200)即#c8h。再对r2循环20次就实现了2ms延时。至于100ms、
200ms、
1s等等方法类似,只是调整相应的初值。多设置几次循环就行。

程序代码如下:

delay:

mov
r1,#0ah
;赋值r1为10次

delay1:

mov
r2,#c8h
;赋值r2为200次

delay2:

djnz
r2,$
;r2自减到0,不到0继续等待

djnz
r1,delay1
;r2减到0后r1自减1,重新给r2赋初值后继续循环,直到r1到0为止,延时结束

ret
第4个回答  2019-06-08
一楼算错了吧。
DELAY:MOV
R0,#0AH
2
DL2:MOV
R1,#7DH
2
DL1:NOP
1
NOP
1
DJNE
R1,DL1
2
DJNZ
R0,DL2
2
RET
1
算法:最先算最里层:
DL1:NOP
NOP
DJNE
R1,DL1
125*2+1+1=252
再算第二层;
(252+1+2)*10=2550
再加上头尾:
2550+2+1
=
2553
假如你是12M的晶振,这个总时间是2553us
如果为6M,总时间是5106us
第5个回答  2009-06-13
晕!又是老问题!坚决不赚你的分.....