📄 delay.lis
字号:
.module delay.c
.area text(rom, con, rel)
0000 .dbfile F:\2007电子设计\古欣\twitest\lib\delay.c
0000 .dbfunc e delay_1us _delay_1us fV
.even
0000 _delay_1us::
0000 .dbline -1
0000 .dbline 9
0000 ; #include "config.h"
0000 ;
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 10
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 19
0004 ; }
0004 ;
0004 ; /***********************
0004 ; **8M时为 1000.25us
0004 ; **4M时为 999.5us
0004 ; **xtal 为晶振频率,单位为Mhz
0004 ; ************************/
0004 ; void delay_1ms(void)
0004 ; {
0004 .dbline 21
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 22
000A L4:
000A .dbline 21
000A 0150 subi R16,1
000C 1040 sbci R17,0
000E L6:
000E .dbline 21
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 0E940000 xcall push_gset1
001A .dbline -1
001A .dbline 30
001A ; ;
001A ; }
001A ;
001A ; /***********************
001A ; ** 1S延时,误差可能稍大
001A ; ** 250ms*4=1000ms
001A ; ************************/
001A ; void delay_1s(void)
001A ; {
001A .dbline 32
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 33
0020 F1DF xcall _delay_1ms
0022 L9:
0022 .dbline 32
0022 4150 subi R20,1
0024 5040 sbci R21,0
0026 L11:
0026 .dbline 32
0026 4030 cpi R20,0
0028 4507 cpc R20,R21
002A D1F7 brne L8
002C X1:
002C .dbline 34
002C ; delay_1ms();
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 35
0032 E8DF xcall _delay_1ms
0034 L13:
0034 .dbline 34
0034 4150 subi R20,1
0036 5040 sbci R21,0
0038 L15:
0038 .dbline 34
0038 4030 cpi R20,0
003A 4507 cpc R20,R21
003C D1F7 brne L12
003E X2:
003E .dbline 36
003E ; delay_1ms();
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 37
0044 DFDF xcall _delay_1ms
0046 L17:
0046 .dbline 36
0046 4150 subi R20,1
0048 5040 sbci R21,0
004A L19:
004A .dbline 36
004A 4030 cpi R20,0
004C 4507 cpc R20,R21
004E D1F7 brne L16
0050 X3:
0050 .dbline 38
0050 ; delay_1ms();
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 39
0056 D6DF xcall _delay_1ms
0058 L21:
0058 .dbline 38
0058 4150 subi R20,1
005A 5040 sbci R21,0
005C L23:
005C .dbline 38
005C 4030 cpi R20,0
005E 4507 cpc R20,R21
0060 D1F7 brne L20
0062 X4:
0062 .dbline -2
0062 L7:
0062 0E940000 xcall pop_gset1
0066 .dbline 0 ; func end
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 -> R22,R23
.even
0068 _delay_us::
0068 0E940000 xcall push_gset2
006C B801 movw R22,R16
006E .dbline -1
006E .dbline 46
006E ; delay_1ms();
006E ; }
006E ;
006E ; /***********************
006E ; **微秒级延时
006E ; ************************/
006E ; void delay_us(unsigned int n)
006E ; {
006E .dbline 48
006E ; unsigned int i;
006E ; for(i=n;i>0;i--)
006E AB01 movw R20,R22
0070 03C0 xjmp L28
0072 L25:
0072 .dbline 49
0072 C6DF xcall _delay_1us
0074 L26:
0074 .dbline 48
0074 4150 subi R20,1
0076 5040 sbci R21,0
0078 L28:
0078 .dbline 48
0078 4030 cpi R20,0
007A 4507 cpc R20,R21
007C D1F7 brne L25
007E X5:
007E .dbline -2
007E L24:
007E 0E940000 xcall pop_gset2
0082 .dbline 0 ; func end
0082 0895 ret
0084 .dbsym r i 20 i
0084 .dbsym r n 22 i
0084 .dbend
0084 .dbfunc e delay_ms _delay_ms fV
0084 ; i -> R20,R21
0084 ; n -> R22,R23
.even
0084 _delay_ms::
0084 0E940000 xcall push_gset2
0088 B801 movw R22,R16
008A .dbline -1
008A .dbline 56
008A ; delay_1us();
008A ; }
008A ;
008A ; /***********************
008A ; **毫秒级延时
008A ; ************************/
008A ; void delay_ms(unsigned int n)
008A ; {
008A .dbline 58
008A ; unsigned int i;
008A ; for(i=n;i>0;i--)
008A AB01 movw R20,R22
008C 03C0 xjmp L33
008E L30:
008E .dbline 59
008E BADF xcall _delay_1ms
0090 L31:
0090 .dbline 58
0090 4150 subi R20,1
0092 5040 sbci R21,0
0094 L33:
0094 .dbline 58
0094 4030 cpi R20,0
0096 4507 cpc R20,R21
0098 D1F7 brne L30
009A X6:
009A .dbline -2
009A L29:
009A 0E940000 xcall pop_gset2
009E .dbline 0 ; func end
009E 0895 ret
00A0 .dbsym r i 20 i
00A0 .dbsym r n 22 i
00A0 .dbend
00A0 .dbfunc e delay_s _delay_s fV
00A0 ; j -> R20,R21
00A0 ; i -> R22,R23
00A0 ; n -> R22,R23
.even
00A0 _delay_s::
00A0 0E940000 xcall push_gset2
00A4 B801 movw R22,R16
00A6 .dbline -1
00A6 .dbline 66
00A6 ; delay_1ms();
00A6 ; }
00A6 ;
00A6 ; /***********************
00A6 ; **秒级延时,太浪费资源,不建议使用
00A6 ; ************************/
00A6 ; void delay_s(unsigned int n)
00A6 ; {
00A6 .dbline 68
00A6 ; unsigned int i,j;
00A6 ; for(j=n;j>0;j--)
00A6 AB01 movw R20,R22
00A8 26C0 xjmp L38
00AA L35:
00AA .dbline 69
00AA ; {
00AA .dbline 70
00AA ; for(i=250;i>0;i--) //250ms*4=1000ms
00AA 6AEF ldi R22,250
00AC 70E0 ldi R23,0
00AE 03C0 xjmp L42
00B0 L39:
00B0 .dbline 71
00B0 A9DF xcall _delay_1ms
00B2 L40:
00B2 .dbline 70
00B2 6150 subi R22,1
00B4 7040 sbci R23,0
00B6 L42:
00B6 .dbline 70
00B6 6030 cpi R22,0
00B8 6707 cpc R22,R23
00BA D1F7 brne L39
00BC X7:
00BC .dbline 72
00BC ; delay_1ms();
00BC ; for(i=250;i>0;i--)
00BC 6AEF ldi R22,250
00BE 70E0 ldi R23,0
00C0 03C0 xjmp L46
00C2 L43:
00C2 .dbline 73
00C2 A0DF xcall _delay_1ms
00C4 L44:
00C4 .dbline 72
00C4 6150 subi R22,1
00C6 7040 sbci R23,0
00C8 L46:
00C8 .dbline 72
00C8 6030 cpi R22,0
00CA 6707 cpc R22,R23
00CC D1F7 brne L43
00CE X8:
00CE .dbline 74
00CE ; delay_1ms();
00CE ; for(i=250;i>0;i--)
00CE 6AEF ldi R22,250
00D0 70E0 ldi R23,0
00D2 03C0 xjmp L50
00D4 L47:
00D4 .dbline 75
00D4 97DF xcall _delay_1ms
00D6 L48:
00D6 .dbline 74
00D6 6150 subi R22,1
00D8 7040 sbci R23,0
00DA L50:
00DA .dbline 74
00DA 6030 cpi R22,0
00DC 6707 cpc R22,R23
00DE D1F7 brne L47
00E0 X9:
00E0 .dbline 76
00E0 ; delay_1ms();
00E0 ; for(i=250;i>0;i--)
00E0 6AEF ldi R22,250
00E2 70E0 ldi R23,0
00E4 03C0 xjmp L54
00E6 L51:
00E6 .dbline 77
00E6 8EDF xcall _delay_1ms
00E8 L52:
00E8 .dbline 76
00E8 6150 subi R22,1
00EA 7040 sbci R23,0
00EC L54:
00EC .dbline 76
00EC 6030 cpi R22,0
00EE 6707 cpc R22,R23
00F0 D1F7 brne L51
00F2 X10:
00F2 .dbline 78
00F2 L36:
00F2 .dbline 68
00F2 4150 subi R20,1
00F4 5040 sbci R21,0
00F6 L38:
00F6 .dbline 68
00F6 4030 cpi R20,0
00F8 4507 cpc R20,R21
00FA B9F6 brne L35
00FC X11:
00FC .dbline -2
00FC L34:
00FC 0E940000 xcall pop_gset2
0100 .dbline 0 ; func end
0100 0895 ret
0102 .dbsym r j 20 i
0102 .dbsym r i 22 i
0102 .dbsym r n 22 i
0102 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -