第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
晕!又是老问题!坚决不赚你的分.....