📄 delay.s
字号:
.module delay.c
.area text(rom, con, rel)
.dbfile D:\桌面\avr程序设计\模拟比较器\delay.c
.dbfunc e delay_1us _delay_1us fV
.even
_delay_1us::
.dbline -1
.dbline 14
; /****************************
; ** file_name delay.c **
; ** describe 软件延时函数 **
; ** auther 古欣 **
; ** Time 2007-1-31 **
; *****************************/
; #include "delay.h"
; /***********************
; ** 8M晶振下 1us
; ** 也可以宏定义 8个asm("nop");
; ** #define delay_1us asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
; ***********************/
; void delay_1us(void)
; {
.dbline 15
; asm("nop");
nop
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 24
; }
;
; /***********************
; **8M时为 1000.25us
; **4M时为 999.5us
; **xtal 为晶振频率,单位为Mhz
; ************************/
; void delay_1ms(void)
; {
.dbline 26
; unsigned int i;
; for(i=(xtal*143-2);i>0;i--)
ldi R16,1142
ldi R17,4
xjmp L6
L3:
.dbline 27
L4:
.dbline 26
subi R16,1
sbci R17,0
L6:
.dbline 26
cpi R16,0
cpc R16,R17
brne L3
X0:
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_1s _delay_1s fV
; i -> R20,R21
.even
_delay_1s::
xcall push_gset1
.dbline -1
.dbline 35
; ;
; }
;
; /***********************
; ** 1S延时,误差可能稍大
; ** 250ms*4=1000ms
; ************************/
; void delay_1s(void)
; {
.dbline 37
; unsigned int i;
; for(i=250;i>0;i--) //250ms*4=1000ms
ldi R20,250
ldi R21,0
xjmp L11
L8:
.dbline 38
xcall _delay_1ms
L9:
.dbline 37
subi R20,1
sbci R21,0
L11:
.dbline 37
cpi R20,0
cpc R20,R21
brne L8
X1:
.dbline 39
; delay_1ms();
; for(i=250;i>0;i--)
ldi R20,250
ldi R21,0
xjmp L15
L12:
.dbline 40
xcall _delay_1ms
L13:
.dbline 39
subi R20,1
sbci R21,0
L15:
.dbline 39
cpi R20,0
cpc R20,R21
brne L12
X2:
.dbline 41
; delay_1ms();
; for(i=250;i>0;i--)
ldi R20,250
ldi R21,0
xjmp L19
L16:
.dbline 42
xcall _delay_1ms
L17:
.dbline 41
subi R20,1
sbci R21,0
L19:
.dbline 41
cpi R20,0
cpc R20,R21
brne L16
X3:
.dbline 43
; delay_1ms();
; for(i=250;i>0;i--)
ldi R20,250
ldi R21,0
xjmp L23
L20:
.dbline 44
xcall _delay_1ms
L21:
.dbline 43
subi R20,1
sbci R21,0
L23:
.dbline 43
cpi R20,0
cpc R20,R21
brne L20
X4:
.dbline -2
L7:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbend
.dbfunc e delay_us _delay_us fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_us::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 51
; delay_1ms();
; }
;
; /***********************
; **微秒级延时
; ************************/
; void delay_us(unsigned int n)
; {
.dbline 53
; unsigned int i;
; for(i=n;i>0;i--)
movw R20,R22
xjmp L28
L25:
.dbline 54
xcall _delay_1us
L26:
.dbline 53
subi R20,1
sbci R21,0
L28:
.dbline 53
cpi R20,0
cpc R20,R21
brne L25
X5:
.dbline -2
L24:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e delay_ms _delay_ms fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_ms::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 61
; delay_1us();
; }
;
; /***********************
; **毫秒级延时
; ************************/
; void delay_ms(unsigned int n)
; {
.dbline 63
; unsigned int i;
; for(i=n;i>0;i--)
movw R20,R22
xjmp L33
L30:
.dbline 64
xcall _delay_1ms
L31:
.dbline 63
subi R20,1
sbci R21,0
L33:
.dbline 63
cpi R20,0
cpc R20,R21
brne L30
X6:
.dbline -2
L29:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e delay_s _delay_s fV
; j -> R20,R21
; i -> R22,R23
; n -> R22,R23
.even
_delay_s::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 71
; delay_1ms();
; }
;
; /***********************
; **秒级延时,太浪费资源,不建议使用
; ************************/
; void delay_s(unsigned int n)
; {
.dbline 73
; unsigned int i,j;
; for(j=n;j>0;j--)
movw R20,R22
xjmp L38
L35:
.dbline 74
; {
.dbline 75
; for(i=250;i>0;i--) //250ms*4=1000ms
ldi R22,250
ldi R23,0
xjmp L42
L39:
.dbline 76
xcall _delay_1ms
L40:
.dbline 75
subi R22,1
sbci R23,0
L42:
.dbline 75
cpi R22,0
cpc R22,R23
brne L39
X7:
.dbline 77
; delay_1ms();
; for(i=250;i>0;i--)
ldi R22,250
ldi R23,0
xjmp L46
L43:
.dbline 78
xcall _delay_1ms
L44:
.dbline 77
subi R22,1
sbci R23,0
L46:
.dbline 77
cpi R22,0
cpc R22,R23
brne L43
X8:
.dbline 79
; delay_1ms();
; for(i=250;i>0;i--)
ldi R22,250
ldi R23,0
xjmp L50
L47:
.dbline 80
xcall _delay_1ms
L48:
.dbline 79
subi R22,1
sbci R23,0
L50:
.dbline 79
cpi R22,0
cpc R22,R23
brne L47
X9:
.dbline 81
; delay_1ms();
; for(i=250;i>0;i--)
ldi R22,250
ldi R23,0
xjmp L54
L51:
.dbline 82
xcall _delay_1ms
L52:
.dbline 81
subi R22,1
sbci R23,0
L54:
.dbline 81
cpi R22,0
cpc R22,R23
brne L51
X10:
.dbline 83
L36:
.dbline 73
subi R20,1
sbci R21,0
L38:
.dbline 73
cpi R20,0
cpc R20,R21
brne L35
X11:
.dbline -2
L34:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r j 20 i
.dbsym r i 22 i
.dbsym r n 22 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -