51单片机用汇编语言设计1S延时子程序,晶振为12MHz。 (麻烦附上详细计算过程以及详细说明,因为我需要真正搞懂它,谢谢!)
DELAY:MOV R7,#10 DL3:MOV R6,#200 DL2:MOV R5,#250 DL1:DJNZ R5,DL1 DJNZ R6,DL2 DJNZ R7,DL3 RET 那用这个程序帮我说明可以吗?尽量能让我明白,多谢啦!(你那个程序我暂时还看不懂)
追答DELAY:
MOV R7,#10;执行一次0.1S,共执行10次,需1S
DL3:MOV R6,#200;执行一次需500uS,共执行200次,需10万uS,0.1S
DL2:MOV R5,#250;执行一次需2uS,从R5=250到R5=0,共执行250次,500uS
DL1:DJNZ R5 DL1;执行一次需2uS
DJNZ R6, DL2
DJNZ R7,DL3
RET
就是三层循环的嵌套,就像一个组有10个人,一个班有5个组,一个年级有8个班。问,这个年级共有多少人?
现在是总共有100万uS, DJNZ R5 DL1;执行一次需2uS。需要执行总共50万次。一个字节最大能表示的数字是255(FF),所以分成2000个250次。2000也大于255,就将2000分成了10个200。
延时程序,真不是设计出来的。
只能先写一个,测试一下,修改一下。
反复多次,使得误差最小。
特别是 C 语言程序,更具有不确定性。
DELAY:MOV R7,#10 DL3:MOV R6,#200 DL2:MOV R5,#250 DL1:DJNZ R5,DL1 DJNZ R6,DL2 DJNZ R7,DL3 RET 那用这个程序帮我说明可以吗?尽量能让我明白,多谢啦!