📄 delay.asm
字号:
;延时子程序 delay.asm
;===============================================
.global _ms_delay ,us_delay,t_delay1,t_delay2
_ms_delay:
pshm ar3
pshm ar4
stlm a,ar3
loop:
; stm #1h,ar3
; pshm ar3
; pshm ar4
stm #11c6h,ar4 ;1ms=4(cycles)x5000x0.05us 1388h=5000d(f=20MHz=10MHzx2)
; stm #30d4h,ar4 ;1ms=4(cycles)x12500x0.02us 30d4h=12500d(f=50MHz=10MHzx5)
; stm #61a8h,ar4 ;1ms=4(cycles)x25000x0.01us 61a8h=25000d(f=100MHz=10MHzx10)
ms_loop:
banz ms_loop,*ar4-
; ssbx xf ;xf
;nop
banz loop,*ar3-
nop
popm ar4
popm ar3
ret
;===============================================
us_delay:
; stm #1h,ar3
; pshm ar4
stm #4h,ar4 ;1us=4(cycles)x5x0.05us (5h=5d) (f=20MHz=10MHzx2)
; stm #0ch,ar4 ;1us=4(cycles)x12.5x0.02us (0ch=12.5d)(f=50MHz=10MHzx5)
; stm #19h,ar4 ;1us=4(cycles)x25x0.01us (19h=25d)(f=100MHz=10MHzx10)
us_loop:
NOP
banz us_loop,*ar4- ;1 个指令周期 = 0.05uS=1*1/20us(when f=20MHz=10MHzx2)
;CLKMD1 D2 D3 = 100 (X2) CLKMD=0x1007h
nop ;1 个指令周期 = 0.02uS=1*1/50us(when f=50MHz=10MHzx5)
;CLKMD1 D2 D3 = 010 (X5) CLKMD=0x4007h
;1 个指令周期 = 0.01uS=1*1/100us(when f=100MHz=10MHzx10)
;CLKMD1 D2 D3 = 001 (X10) CLKMD=0x9007h
banz us_delay,*ar3- ;banz when TRUE 4 cycles
; popm ar4
nop
ret ; FALSE 2 cycles
;stm 2 cycles
;0f9h=>249d
;270fh=>9999d
;===============================================
t_delay1:
nop
nop
nop
nop
nop
nop
nop
ret
t_delay2:
nop
nop
ret
;===============================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -