汇编延时程序
发布网友
发布时间:2023-01-12 21:09
我来回答
共3个回答
热心网友
时间:2023-11-02 07:23
你先看下这段延时程序:
采用12M晶振,用51芯片处理。
DELAY: MOV R7,#250;
D1:MOV R6,#250;
D2:DJNZ R6 ,D2;
DJNZ R7,D1;
RET
以上是一段延时0.125秒的程序。
它计算的原理是:
这段程序最终执行了250*250次,而DJNZ指令执行需要2个机器周期,一个机器周期需要1微秒的时间,所以以上延时程序就是250*250*2=0.125秒。
你的程序原理跟这个应该是一样的~
热心网友
时间:2023-11-02 07:24
YS2:MOV R4 ,#10 给R4置入初值10
D2:MOV R5,$ 给R5置入当前地址
DJNZ R4,D2 R4减1不为0跳到D2处
RET R4为0时子程式结束返回
延时4.74毫秒是与晶振有关的。
热心网友
时间:2023-11-02 07:24
R7,#0FFH
DJNZ R7,$
RET
;1ms延时程序
DL1MS: MOV R5,#02H
LOOP: LCALL DL513 ;515us
DJNZ R5,LOOP
RET ;总时1034us有1.034ms
;3ms延时程序
DL3MS: MOV R4,#03H
LOOP2: LCALL DL1MS ;1036us
DJNZ R4,LOOP2
RET ;总时3117us有3.117ms
;10ms延时程序
DL10MS: MOV R6,#14H
LOOP1: LCALL DL513 ;515us
DJNZ R6,LOOP1
RET ;总时7241us只有7.241ms
;1s延时程序
DL1S:
MOV R2,#100
DJNZ R2,DL10MS ;7243us
RET ;总时724303us只有0.724303s
;5S延时程序
DL5S: MOV R3,#05H
DJNZ R3,DL1S ;724305us
RET;总时3621528us只有3.621528s
1、如此做累积误差会比较大
2、用定时器做较长时的延时精度会高一些
3、用多重循环也要比循环嵌套好些
比如:
KKKK0:MOV R2,#XX
KKKK1:MOV R3,#LL
KKKK2:MOV R4,#NN
KKKK3:MOV R5,#MM
DJNZ R5,$
DJNZ R4,KKKK3
DJNZ R3,KKKK2
DJNZ R2,KKKK1
RET
适当选择各循环常数