📄 delay.lis
字号:
.module delay.c
.area text(rom, con, rel)
0000 .dbfile D:\avrvi\democode\key_4\source\lib\delay.c
0000 .dbfunc e Delay100us _Delay100us fV
0000 ; i -> R20
0000 ; n -> R16
.even
0000 _Delay100us::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 36
0004 ; /************************************************************
0004 ; 文 件:delay.c
0004 ; 用 途:delay100us和delay10ms软件延时函数
0004 ; Target : 任意AVR
0004 ; Crystal: #define F_CPU 进行设置
0004 ; 说 明:请与delay.h配合使用
0004 ; 请根据实际定义 #define F_CPU 为晶振大小
0004 ; 有中断时,延时将不再准确
0004 ; 创 建:2008.1.29
0004 ; 修 改:2008.1.29
0004 ; Copy Right (c) www.avrvi.com AVR与虚拟仪器
0004 ; ************************************************************/
0004 ;
0004 ; #include "..\config.h"
0004 ;
0004 ;
0004 ;
0004 ; //需要根据频率调整循环变量
0004 ; #ifndef F_CPU
0004 ; #define F_CPU 1000000 //晶振频率
0004 ; #endif
0004 ;
0004 ;
0004 ; /*******************************************
0004 ; ** 函数名称: void Delay100us(uint8 n)
0004 ; ** 功能描述: 100us延时函数
0004 ; ** 输 入: 延时的时间
0004 ; ** 输出 : 无
0004 ; ** 全局变量: 无
0004 ; ** 调用模块:
0004 ; ** 说明:最大参数为255
0004 ; ** 注意:如果中途有中断发生,延时将不只100us
0004 ; ********************************************/
0004 ; #define CONT_DELAY100US_COUNT F_CPU/100000
0004 ; void Delay100us(uint8 n) //最大255
0004 ; {
0004 0AC0 xjmp L3
0006 L2:
0006 .dbline 39
0006 ; uint8 i;
0006 ; while(n--) //5 clk
0006 ; {
0006 .dbline 40
0006 ; i=CONT_DELAY100US_COUNT; //1 clk
0006 4AE0 ldi R20,10
0008 03C0 xjmp L6
000A L5:
000A .dbline 42
000A .dbline 43
000A 0000 nop
000C .dbline 44
000C 0000 nop
000E .dbline 45
000E 0000 nop
0010 .dbline 46
0010 L6:
0010 .dbline 41
0010 842F mov R24,R20
0012 8150 subi R24,1
0014 482F mov R20,R24
0016 8823 tst R24
0018 C1F7 brne L5
001A .dbline 47
001A L3:
001A .dbline 38
001A 202E mov R2,R16
001C 3324 clr R3
001E 0150 subi R16,1
0020 2220 tst R2
0022 89F7 brne L2
0024 .dbline -2
0024 L1:
0024 0E940000 xcall pop_gset1
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbsym r i 20 c
002A .dbsym r n 16 c
002A .dbend
002A .dbfunc e Delay10ms _Delay10ms fV
002A ; i -> R20,R21
002A ; n -> R16
.even
002A _Delay10ms::
002A 0E940000 xcall push_gset1
002E .dbline -1
002E .dbline 62
002E ; while(--i)
002E ; {
002E ; NOP();
002E ; NOP();
002E ; NOP();
002E ; } //10 clk
002E ; }
002E ; }
002E ;
002E ; /*******************************************
002E ; ** 函数名称: void Delay10ms(uint8 n)
002E ; ** 功能描述: 10ms延时函数
002E ; ** 输 入: 延时的时间
002E ; ** 输出 : 无
002E ; ** 全局变量: 无
002E ; ** 调用模块:
002E ; ** 说明:最大参数为255
002E ; ** 注意:如果中途有中断发生,延时将不只10ms
002E ; ********************************************/
002E ; #define CONT_DELAY10MS_COUNT F_CPU/1000
002E ; void Delay10ms(uint8 n) //最大255
002E ; {
002E 0CC0 xjmp L10
0030 L9:
0030 .dbline 65
0030 ; uint16 i;
0030 ; while(n--) //5 clk
0030 ; {
0030 .dbline 66
0030 ; i=CONT_DELAY10MS_COUNT; //1 clk
0030 48EE ldi R20,1000
0032 53E0 ldi R21,3
0034 03C0 xjmp L13
0036 L12:
0036 .dbline 68
0036 .dbline 69
0036 0000 nop
0038 .dbline 70
0038 0000 nop
003A .dbline 71
003A 0000 nop
003C .dbline 72
003C L13:
003C .dbline 67
003C CA01 movw R24,R20
003E 0197 sbiw R24,1
0040 AC01 movw R20,R24
0042 4030 cpi R20,0
0044 4507 cpc R20,R21
0046 B9F7 brne L12
0048 X0:
0048 .dbline 73
0048 L10:
0048 .dbline 64
0048 202E mov R2,R16
004A 3324 clr R3
004C 0150 subi R16,1
004E 2220 tst R2
0050 79F7 brne L9
0052 .dbline -2
0052 L8:
0052 0E940000 xcall pop_gset1
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbsym r i 20 i
0058 .dbsym r n 16 c
0058 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -