用delay来产生延时在要求较高的场合不大合适。
可调用系统时间来产生准确的延时,并且可控制延迟时间
TEMP: MOV AH,2CH
INT 21H
ADD DH,5 ;获得时间DH为 当前的秒数,5秒可以自己选择
PUSH DX
WAIT:
POP DX
MOV AL,DH
PUSH DX
MOV AH,2CH ;新的时间
INT 21H
CMP DH,AL
JB WAIT ;小于5秒的话继续查询
欢迎讨论
使用INT 15H。MOV AH,86H是延迟。
某资料上写参数CX:DX=千分秒,这十分令人费解,研究了一番,发现是是延时(CX2^16+DX)个百万分之一秒,CXDX相当于作一个64位寄存器,CX高位,DX低位
用的stc89c52RC整段程序如下:
MOV R0,#0
START:MOV A,R0
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV P3,A
INC R0
ACALL DELAY
CJNE R0,#00BH,START
MOV R0,#0
SJMP START
DELAY:
MOV R2,#10
L1: MOV R3,#200
L2: MOV R4,#450
L3: DJNZ R4,L3
DJNZ R3,L2
DJNZ R2,L1
ret
DEL1S:MOV R7,#10\x0d\D1: MOV R6,#200\x0d\D2: MOV R5,#250\x0d\ DJNZ R5,$\x0d\ DJNZ R6,D2\x0d\ DJNZ R7,D1\x0d\ RET\x0d\\x0d\说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等\x0d\ 2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5
延时1s计算方法是将所有指令执行时间相加得出的。比如:
dly1s:
mov
r2,#10
;1
dly1:
mov
r3,#200
;110
dly2:
mov
r4,#248
;120010
djnz
r4,$
;224820010
djnz
r3,dly2
;220010
djnz
r2,dly1
;210
ret
;2
total=1+10+2000+992000+4000+20+2=998033
如果使用12m晶振,那么延时时间为0998秒。
以上就是关于汇编 延时子程序全部的内容,包括:汇编 延时子程序、汇编语言如何延时2秒、延时程序 汇编等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)