求解51单片机延时程序计算ORG 0050HDELAY:MOV R0,#0AHDL2:MOV R1,#7DHDL1:NOPNOPDJNE R1,DL1DJNZ R0,DL2RET求每句指令的机器周期,并算出总延时时间.
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/22 14:58:28
求解51单片机延时程序计算ORG 0050HDELAY:MOV R0,#0AHDL2:MOV R1,#7DHDL1:NOPNOPDJNE R1,DL1DJNZ R0,DL2RET求每句指令的机器周期,并算出总延时时间.
求解51单片机延时程序计算
ORG 0050H
DELAY:MOV R0,#0AH
DL2:MOV R1,#7DH
DL1:NOP
NOP
DJNE R1,DL1
DJNZ R0,DL2
RET
求每句指令的机器周期,并算出总延时时间.
求解51单片机延时程序计算ORG 0050HDELAY:MOV R0,#0AHDL2:MOV R1,#7DHDL1:NOPNOPDJNE R1,DL1DJNZ R0,DL2RET求每句指令的机器周期,并算出总延时时间.
一楼错在时钟周期和频率的关系没弄对;
二楼错在内循环没算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).
以上答案希望有所帮助,
一楼算错了吧。
DELAY:MOV R0,#0AH 2
DL2:MOV R1,#7DH 2
DL1:NOP 1
NOP 1
DJNE R1,DL1 2
DJNZ R0,DL2 2
RET ...
全部展开
一楼算错了吧。
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
收起
晕!又是老问题!坚决不赚你的分.....
DELAY:MOV R0,#0AH ;一个周期
DL2:MOV R1,#7DH ;一个
DL1:NOP ;一个
NOP ;一个
DJNE R1,DL1 ;两个
DJNZ R0,DL2 ;两个
RET
一次循环:125*4=1000个周...
全部展开
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
收起