⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 delay_7.37m.lis

📁 网卡驱动程序
💻 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 + -