📄 delay_7.37m.lis
字号:
.module Delay_7.37M.c
.area text(rom, con, rel)
0000 .dbfile E:\__test\_RTL8019_M128_struct_Test\Delay_7.37M.c
0000 .dbfunc e Delay_1us _Delay_1us fV
.even
0000 _Delay_1us::
0000 .dbline -1
0000 .dbline 9
0000 ; #include <macros.h>
0000 ; #include "Delay_7.37M.h"
0000 ;
0000 ; /*-----------------------------------------------------------------------
0000 ; 延时函数
0000 ; 系统时钟:7.3728M
0000 ; -----------------------------------------------------------------------*/
0000 ; void Delay_1us(void) //1us+
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_nus _Delay_nus fV
0004 ; i -> R10,R11
0004 ; n -> R20,R21
.even
0004 _Delay_nus::
0004 0E940000 xcall push_xgset300C
0008 A801 movw R20,R16
000A .dbline -1
000A .dbline 14
000A ; }
000A ;
000A ; void Delay_nus(unsigned int n) //N us延时函数
000A ; {
000A .dbline 15
000A ; unsigned int i=0;
000A AA24 clr R10
000C BB24 clr R11
000E 01C0 xjmp L4
0010 L3:
0010 .dbline 17
0010 ; while (n--)
0010 ; Delay_1us();
0010 F7DF xcall _Delay_1us
0012 L4:
0012 .dbline 16
0012 1A01 movw R2,R20
0014 4150 subi R20,1
0016 5040 sbci R21,0
0018 2220 tst R2
001A D1F7 brne L3
001C 3320 tst R3
001E C1F7 brne L3
0020 X0:
0020 .dbline -2
0020 L2:
0020 .dbline 0 ; func end
0020 0C940000 xjmp pop_xgset300C
0024 .dbsym r i 10 i
0024 .dbsym r n 20 i
0024 .dbend
0024 .dbfunc e Delay_nus_Count _Delay_nus_Count fV
0024 ; n -> R16,R17
.even
0024 _Delay_nus_Count::
0024 .dbline -1
0024 .dbline 25
0024 ;
0024 ; }
0024 ;
0024 ; //通过int型计数的N us延时函数
0024 ; //延时计算:t_delay = 6 * nt + 14t
0024 ; //延时范围:n>=0, n<=65535 (即14t - 393224t ) //8M时,是1.5us - 49153us
0024 ; void Delay_nus_Count(unsigned int n) //8M时, 0.75us+
0024 ; {
0024 02C0 xjmp L8
0026 L7:
0026 .dbline 27
0026 ; while(n)
0026 ; n--;
0026 0150 subi R16,1
0028 1040 sbci R17,0
002A L8:
002A .dbline 26
002A 0030 cpi R16,0
002C 0107 cpc R16,R17
002E D9F7 brne L7
0030 X1:
0030 .dbline -2
0030 L6:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r n 16 i
0032 .dbend
0032 .dbfunc e Delay_1ms _Delay_1ms fV
0032 ; i -> R16,R17
.even
0032 _Delay_1ms::
0032 .dbline -1
0032 .dbline 32
0032 ; }
0032 ;
0032 ;
0032 ; void Delay_1ms(void) //1ms延时函数
0032 ; {
0032 .dbline 34
0032 ; unsigned int i;
0032 ; for (i=0;i<1052;i++);
0032 0027 clr R16
0034 1127 clr R17
0036 02C0 xjmp L14
0038 L11:
0038 .dbline 34
0038 L12:
0038 .dbline 34
0038 0F5F subi R16,255 ; offset = 1
003A 1F4F sbci R17,255
003C L14:
003C .dbline 34
003C 0C31 cpi R16,28
003E E4E0 ldi R30,4
0040 1E07 cpc R17,R30
0042 D0F3 brlo L11
0044 X2:
0044 .dbline -2
0044 L10:
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbsym r i 16 i
0046 .dbend
0046 .dbfunc e Delay_nms _Delay_nms fV
0046 ; i -> R20,R21
0046 ; n -> R10,R11
.even
0046 _Delay_nms::
0046 0E940000 xcall push_xgset300C
004A 5801 movw R10,R16
004C .dbline -1
004C .dbline 38
004C ; }
004C ;
004C ; void Delay_nms(unsigned int n) //N ms延时函数
004C ; {
004C .dbline 39
004C ; unsigned int i=0;
004C 4427 clr R20
004E 5527 clr R21
0050 .dbline 40
0050 ; for (i=0;i<n;i++)
0050 03C0 xjmp L19
0052 L16:
0052 .dbline 41
0052 ; Delay_1ms();
0052 EFDF xcall _Delay_1ms
0054 L17:
0054 .dbline 40
0054 4F5F subi R20,255 ; offset = 1
0056 5F4F sbci R21,255
0058 L19:
0058 .dbline 40
0058 4A15 cp R20,R10
005A 5B05 cpc R21,R11
005C D0F3 brlo L16
005E X3:
005E .dbline -2
005E L15:
005E .dbline 0 ; func end
005E 0C940000 xjmp pop_xgset300C
0062 .dbsym r i 20 i
0062 .dbsym r n 10 i
0062 .dbend
0062 .dbfunc e Delay_1ms_Preci _Delay_1ms_Preci fV
0062 ; i -> R16,R17
.even
0062 _Delay_1ms_Preci::
0062 .dbline -1
0062 .dbline 50
0062 ; }
0062 ;
0062 ; //精确1ms延时函数
0062 ; //延时时间计算: t_delay= 3t + 1t + 1t + n*6t + ( (int(n/256) + 1) * 2t -1t) + 4t
0062 ; //即: t_delay= n*6t + int(n/128)t + 10t
0062 ; //计数计算(1ms):n= (1000 * f - 10) * 128 / 769
0062 ; // n= (1000 * 8 -10 ) * 128 /769 = 1329.93 (取整为n=1330, 再把1330去验证延时时间t_delay的计算)
0062 ; void Delay_1ms_Preci(void)
0062 ; {
0062 .dbline 52
0062 ; unsigned int i;
0062 ; i=1226; //7.3728M
0062 0AEC ldi R16,1226
0064 14E0 ldi R17,4
0066 L21:
0066 .dbline 54
0066 ; while (i--)
0066 ; ;
0066 L22:
0066 .dbline 53
0066 1801 movw R2,R16
0068 0150 subi R16,1
006A 1040 sbci R17,0
006C 2220 tst R2
006E D9F7 brne L21
0070 3320 tst R3
0072 C9F7 brne L21
0074 X4:
0074 .dbline -2
0074 L20:
0074 .dbline 0 ; func end
0074 0895 ret
0076 .dbsym r i 16 i
0076 .dbend
0076 .dbfunc e Delay_nms_Preci _Delay_nms_Preci fV
0076 ; i -> R20,R21
0076 ; n -> R10,R11
.even
0076 _Delay_nms_Preci::
0076 0E940000 xcall push_xgset300C
007A 5801 movw R10,R16
007C .dbline -1
007C .dbline 59
007C ; }
007C ;
007C ; //N ms精确延时函数
007C ; void Delay_nms_Preci(unsigned int n)
007C ; {
007C .dbline 60
007C ; unsigned int i=0;
007C 4427 clr R20
007E 5527 clr R21
0080 .dbline 61
0080 ; for (i=0;i<n;i++)
0080 03C0 xjmp L28
0082 L25:
0082 .dbline 62
0082 ; Delay_1ms_Preci();
0082 EFDF xcall _Delay_1ms_Preci
0084 L26:
0084 .dbline 61
0084 4F5F subi R20,255 ; offset = 1
0086 5F4F sbci R21,255
0088 L28:
0088 .dbline 61
0088 4A15 cp R20,R10
008A 5B05 cpc R21,R11
008C D0F3 brlo L25
008E X5:
008E .dbline -2
008E L24:
008E .dbline 0 ; func end
008E 0C940000 xjmp pop_xgset300C
0092 .dbsym r i 20 i
0092 .dbsym r n 10 i
0092 .dbend
0092 ; }
0092 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -