设51系列单片机晶振频率Fosc为12MHz
则每个机器周期 =12/Fosc =1μs
每条MOV Rn,#data指令耗用1个机器周期
每条DJNZ Rn,rel指令耗用2个机器周期,
每条NOP指令执行耗用1个机器周期
=======================================
;;延时1ms, 多用于数码管扫描显示方式的视觉暂留延时:
DLY1ms: MOV R6,#5
MOV R7,#100
DLY1msB: DJNZ R7,$
DJNZ R6,DLY1msB
RET
;;解释:5x100x2μs =1000μs =1ms
=======================================
;;延时4ms:
DLY4ms: MOV R6,#20
DLY4msB: MOV R7,#100
DJNZ R7,$
DJNZ R6,DLY4msB
RET
;;解释:20[100(2μs)] =4000μs =4ms
=======================================
;延时125ms
DLY125ms: MOV R6,#250
DLY125msB: MOV R5,#250
DJNZ R5,$
DJNZ R6,DLY125msB
RET
;;解释:250*250*2μs=125000μs =125ms
=======================================
;;延时500ms
DLY500ms: MOV R7,#250
D1: MOV R6,#250
D2: NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R6,D2
DJNZ R7,D1
RET
;;解释:
6条NOP指令执行耗用6个机器周期
250{250(6μs+2μs)]} =500 000μs =500ms
========================================
;;延时2000ms =2S
DLY2s: MOV R7,#16
DLY2sA: MOV R6,#250
DLY2sB: MOV R5,#250
DJNZ R5,$
DJNZ R6,DLY2sB
DJNZ R7,DLY2sA
RET
;;解释:16x250{250(2μs)]} =2 000 000μs =2s
======================================
|