📄 delay.lis
字号:
.module delay.c
.area text(rom, con, rel)
0000 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\delay.c
0000 .dbfunc e delay_1us _delay_1us fV
.even
0000 _delay_1us::
0000 .dbline -1
0000 .dbline 14
0000 ; /**********************************
0000 ; ** file_name delay.c **
0000 ; ** describe 软件延时函数 **
0000 ; ** auther 古欣 www.avrvi.com **
0000 ; ** Time 2007-1-31 **
0000 ; ***********************************/
0000 ; #include "config.h"
0000 ; /***********************
0000 ; ** 8M晶振下 1us
0000 ; ** 也可以宏定义 8个asm("nop");
0000 ; ** #define delay_1us asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
0000 ; ***********************/
0000 ; void delay_1us(void)
0000 ; {
0000 .dbline 15
0000 ; asm("nop");
0000 0000 nop
0002 .dbline -2
0002 L1:
0002 .dbline 0 ; func end
0002 0895 ret
0004 .dbend
0004 .dbfunc e delay_1ms _delay_1ms fV
0004 ; i -> R16,R17
.even
0004 _delay_1ms::
0004 .dbline -1
0004 .dbline 24
0004 ; }
0004 ;
0004 ; /***********************
0004 ; **8M时为 1000.25us
0004 ; **4M时为 999.5us
0004 ; **xtal 为晶振频率,单位为Mhz
0004 ; ************************/
0004 ; void delay_1ms(void)
0004 ; {
0004 .dbline 26
0004 ; unsigned int i;
0004 ; for(i=(xtal*143-2);i>0;i--)
0004 06E7 ldi R16,1142
0006 14E0 ldi R17,4
0008 02C0 xjmp L6
000A L3:
000A .dbline 27
000A ; ;
000A L4:
000A .dbline 26
000A 0150 subi R16,1
000C 1040 sbci R17,0
000E L6:
000E .dbline 26
000E 0030 cpi R16,0
0010 0107 cpc R16,R17
0012 D9F7 brne L3
0014 X0:
0014 .dbline -2
0014 L2:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbsym r i 16 i
0016 .dbend
0016 .dbfunc e delay_1s _delay_1s fV
0016 ; i -> R20,R21
.even
0016 _delay_1s::
0016 4A93 st -y,R20
0018 5A93 st -y,R21
001A .dbline -1
001A .dbline 35
001A ; }
001A ;
001A ; /***********************
001A ; ** 1S延时,误差可能稍大
001A ; ** 250ms*4=1000ms
001A ; ************************/
001A ; void delay_1s(void)
001A ; {
001A .dbline 37
001A ; unsigned int i;
001A ; for(i=250;i>0;i--) //250ms*4=1000ms
001A 4AEF ldi R20,250
001C 50E0 ldi R21,0
001E 03C0 xjmp L11
0020 L8:
0020 .dbline 38
0020 ; delay_1ms();
0020 F1DF xcall _delay_1ms
0022 L9:
0022 .dbline 37
0022 4150 subi R20,1
0024 5040 sbci R21,0
0026 L11:
0026 .dbline 37
0026 4030 cpi R20,0
0028 4507 cpc R20,R21
002A D1F7 brne L8
002C X1:
002C .dbline 39
002C ; for(i=250;i>0;i--)
002C 4AEF ldi R20,250
002E 50E0 ldi R21,0
0030 03C0 xjmp L15
0032 L12:
0032 .dbline 40
0032 ; delay_1ms();
0032 E8DF xcall _delay_1ms
0034 L13:
0034 .dbline 39
0034 4150 subi R20,1
0036 5040 sbci R21,0
0038 L15:
0038 .dbline 39
0038 4030 cpi R20,0
003A 4507 cpc R20,R21
003C D1F7 brne L12
003E X2:
003E .dbline 41
003E ; for(i=250;i>0;i--)
003E 4AEF ldi R20,250
0040 50E0 ldi R21,0
0042 03C0 xjmp L19
0044 L16:
0044 .dbline 42
0044 ; delay_1ms();
0044 DFDF xcall _delay_1ms
0046 L17:
0046 .dbline 41
0046 4150 subi R20,1
0048 5040 sbci R21,0
004A L19:
004A .dbline 41
004A 4030 cpi R20,0
004C 4507 cpc R20,R21
004E D1F7 brne L16
0050 X3:
0050 .dbline 43
0050 ; for(i=250;i>0;i--)
0050 4AEF ldi R20,250
0052 50E0 ldi R21,0
0054 03C0 xjmp L23
0056 L20:
0056 .dbline 44
0056 ; delay_1ms();
0056 D6DF xcall _delay_1ms
0058 L21:
0058 .dbline 43
0058 4150 subi R20,1
005A 5040 sbci R21,0
005C L23:
005C .dbline 43
005C 4030 cpi R20,0
005E 4507 cpc R20,R21
0060 D1F7 brne L20
0062 X4:
0062 .dbline -2
0062 L7:
0062 .dbline 0 ; func end
0062 5991 ld R21,y+
0064 4991 ld R20,y+
0066 0895 ret
0068 .dbsym r i 20 i
0068 .dbend
0068 .dbfunc e delay_us _delay_us fV
0068 ; i -> R20,R21
0068 ; n -> R10,R11
.even
0068 _delay_us::
0068 0E940000 xcall push_xgset300C
006C 5801 movw R10,R16
006E .dbline -1
006E .dbline 51
006E ; }
006E ;
006E ; /***********************
006E ; **微秒级延时
006E ; ************************/
006E ; void delay_us(unsigned int n)
006E ; {
006E .dbline 53
006E ; unsigned int i;
006E ; for(i=n;i>0;i--)
006E A501 movw R20,R10
0070 03C0 xjmp L28
0072 L25:
0072 .dbline 54
0072 ; delay_1us();
0072 C6DF xcall _delay_1us
0074 L26:
0074 .dbline 53
0074 4150 subi R20,1
0076 5040 sbci R21,0
0078 L28:
0078 .dbline 53
0078 4030 cpi R20,0
007A 4507 cpc R20,R21
007C D1F7 brne L25
007E X5:
007E .dbline -2
007E L24:
007E .dbline 0 ; func end
007E 0C940000 xjmp pop_xgset300C
0082 .dbsym r i 20 i
0082 .dbsym r n 10 i
0082 .dbend
0082 .dbfunc e delay_ms _delay_ms fV
0082 ; i -> R20,R21
0082 ; n -> R10,R11
.even
0082 _delay_ms::
0082 0E940000 xcall push_xgset300C
0086 5801 movw R10,R16
0088 .dbline -1
0088 .dbline 61
0088 ; }
0088 ;
0088 ; /***********************
0088 ; **毫秒级延时
0088 ; ************************/
0088 ; void delay_ms(unsigned int n)
0088 ; {
0088 .dbline 63
0088 ; unsigned int i;
0088 ; for(i=n;i>0;i--)
0088 A501 movw R20,R10
008A 03C0 xjmp L33
008C L30:
008C .dbline 64
008C ; delay_1ms();
008C BBDF xcall _delay_1ms
008E L31:
008E .dbline 63
008E 4150 subi R20,1
0090 5040 sbci R21,0
0092 L33:
0092 .dbline 63
0092 4030 cpi R20,0
0094 4507 cpc R20,R21
0096 D1F7 brne L30
0098 X6:
0098 .dbline -2
0098 L29:
0098 .dbline 0 ; func end
0098 0C940000 xjmp pop_xgset300C
009C .dbsym r i 20 i
009C .dbsym r n 10 i
009C .dbend
009C .dbfunc e delay_s _delay_s fV
009C ; j -> R20,R21
009C ; i -> R22,R23
009C ; n -> R10,R11
.even
009C _delay_s::
009C 0E940000 xcall push_xgsetF00C
00A0 5801 movw R10,R16
00A2 .dbline -1
00A2 .dbline 71
00A2 ; }
00A2 ;
00A2 ; /***********************
00A2 ; **秒级延时,太浪费资源,不建议使用
00A2 ; ************************/
00A2 ; void delay_s(unsigned int n)
00A2 ; {
00A2 .dbline 73
00A2 ; unsigned int i,j;
00A2 ; for(j=n;j>0;j--)
00A2 A501 movw R20,R10
00A4 26C0 xjmp L38
00A6 L35:
00A6 .dbline 74
00A6 ; {
00A6 .dbline 75
00A6 ; for(i=250;i>0;i--) //250ms*4=1000ms
00A6 6AEF ldi R22,250
00A8 70E0 ldi R23,0
00AA 03C0 xjmp L42
00AC L39:
00AC .dbline 76
00AC ; delay_1ms();
00AC ABDF xcall _delay_1ms
00AE L40:
00AE .dbline 75
00AE 6150 subi R22,1
00B0 7040 sbci R23,0
00B2 L42:
00B2 .dbline 75
00B2 6030 cpi R22,0
00B4 6707 cpc R22,R23
00B6 D1F7 brne L39
00B8 X7:
00B8 .dbline 77
00B8 ; for(i=250;i>0;i--)
00B8 6AEF ldi R22,250
00BA 70E0 ldi R23,0
00BC 03C0 xjmp L46
00BE L43:
00BE .dbline 78
00BE ; delay_1ms();
00BE A2DF xcall _delay_1ms
00C0 L44:
00C0 .dbline 77
00C0 6150 subi R22,1
00C2 7040 sbci R23,0
00C4 L46:
00C4 .dbline 77
00C4 6030 cpi R22,0
00C6 6707 cpc R22,R23
00C8 D1F7 brne L43
00CA X8:
00CA .dbline 79
00CA ; for(i=250;i>0;i--)
00CA 6AEF ldi R22,250
00CC 70E0 ldi R23,0
00CE 03C0 xjmp L50
00D0 L47:
00D0 .dbline 80
00D0 ; delay_1ms();
00D0 99DF xcall _delay_1ms
00D2 L48:
00D2 .dbline 79
00D2 6150 subi R22,1
00D4 7040 sbci R23,0
00D6 L50:
00D6 .dbline 79
00D6 6030 cpi R22,0
00D8 6707 cpc R22,R23
00DA D1F7 brne L47
00DC X9:
00DC .dbline 81
00DC ; for(i=250;i>0;i--)
00DC 6AEF ldi R22,250
00DE 70E0 ldi R23,0
00E0 03C0 xjmp L54
00E2 L51:
00E2 .dbline 82
00E2 ; delay_1ms();
00E2 90DF xcall _delay_1ms
00E4 L52:
00E4 .dbline 81
00E4 6150 subi R22,1
00E6 7040 sbci R23,0
00E8 L54:
00E8 .dbline 81
00E8 6030 cpi R22,0
00EA 6707 cpc R22,R23
00EC D1F7 brne L51
00EE X10:
00EE .dbline 83
00EE ; }
00EE L36:
00EE .dbline 73
00EE 4150 subi R20,1
00F0 5040 sbci R21,0
00F2 L38:
00F2 .dbline 73
00F2 4030 cpi R20,0
00F4 4507 cpc R20,R21
00F6 B9F6 brne L35
00F8 X11:
00F8 .dbline -2
00F8 L34:
00F8 .dbline 0 ; func end
00F8 0C940000 xjmp pop_xgsetF00C
00FC .dbsym r j 20 i
00FC .dbsym r i 22 i
00FC .dbsym r n 10 i
00FC .dbend
00FC ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -