📄 delay.s
字号:
.module delay.c
.area text(rom, con, rel)
.dbfile D:\avrvi\democode\key_4\source\lib\delay.c
.dbfunc e Delay100us _Delay100us fV
; i -> R20
; n -> R16
.even
_Delay100us::
xcall push_gset1
.dbline -1
.dbline 36
; /************************************************************
; 文 件:delay.c
; 用 途:delay100us和delay10ms软件延时函数
; Target : 任意AVR
; Crystal: #define F_CPU 进行设置
; 说 明:请与delay.h配合使用
; 请根据实际定义 #define F_CPU 为晶振大小
; 有中断时,延时将不再准确
; 创 建:2008.1.29
; 修 改:2008.1.29
; Copy Right (c) www.avrvi.com AVR与虚拟仪器
; ************************************************************/
;
; #include "..\config.h"
;
;
;
; //需要根据频率调整循环变量
; #ifndef F_CPU
; #define F_CPU 1000000 //晶振频率
; #endif
;
;
; /*******************************************
; ** 函数名称: void Delay100us(uint8 n)
; ** 功能描述: 100us延时函数
; ** 输 入: 延时的时间
; ** 输出 : 无
; ** 全局变量: 无
; ** 调用模块:
; ** 说明:最大参数为255
; ** 注意:如果中途有中断发生,延时将不只100us
; ********************************************/
; #define CONT_DELAY100US_COUNT F_CPU/100000
; void Delay100us(uint8 n) //最大255
; {
xjmp L3
L2:
.dbline 39
; uint8 i;
; while(n--) //5 clk
; {
.dbline 40
; i=CONT_DELAY100US_COUNT; //1 clk
ldi R20,10
xjmp L6
L5:
.dbline 42
.dbline 43
nop
.dbline 44
nop
.dbline 45
nop
.dbline 46
L6:
.dbline 41
mov R24,R20
subi R24,1
mov R20,R24
tst R24
brne L5
.dbline 47
L3:
.dbline 38
mov R2,R16
clr R3
subi R16,1
tst R2
brne L2
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r n 16 c
.dbend
.dbfunc e Delay10ms _Delay10ms fV
; i -> R20,R21
; n -> R16
.even
_Delay10ms::
xcall push_gset1
.dbline -1
.dbline 62
; while(--i)
; {
; NOP();
; NOP();
; NOP();
; } //10 clk
; }
; }
;
; /*******************************************
; ** 函数名称: void Delay10ms(uint8 n)
; ** 功能描述: 10ms延时函数
; ** 输 入: 延时的时间
; ** 输出 : 无
; ** 全局变量: 无
; ** 调用模块:
; ** 说明:最大参数为255
; ** 注意:如果中途有中断发生,延时将不只10ms
; ********************************************/
; #define CONT_DELAY10MS_COUNT F_CPU/1000
; void Delay10ms(uint8 n) //最大255
; {
xjmp L10
L9:
.dbline 65
; uint16 i;
; while(n--) //5 clk
; {
.dbline 66
; i=CONT_DELAY10MS_COUNT; //1 clk
ldi R20,1000
ldi R21,3
xjmp L13
L12:
.dbline 68
.dbline 69
nop
.dbline 70
nop
.dbline 71
nop
.dbline 72
L13:
.dbline 67
movw R24,R20
sbiw R24,1
movw R20,R24
cpi R20,0
cpc R20,R21
brne L12
X0:
.dbline 73
L10:
.dbline 64
mov R2,R16
clr R3
subi R16,1
tst R2
brne L9
.dbline -2
L8:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 16 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -