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

📄 ppp.lis

📁 在串口上PPP拨号上网的源程序(实现PPP协议栈)
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0000           ; #include "PPP.h"
 0000           ; #include "UART.h"
 0000           ; 
 0000           ; BYTE PPPStatus = 0;
 0000           ; BYTE InBuffer [PPP_BUFFER_SIZE + 1];  //PPP数据输入缓冲
 0000           ; BYTE OutBuffer[PPP_BUFFER_SIZE + 1];  //PPP数据输出缓冲
 0000           ; static  BYTE  FrameSize = 0;          
 0000           ; static  BYTE    *PPP_Packet = InBuffer;
 0000           ; extern  WORD MRU=PPP_BUFFER_SIZE;
 0000           ; BYTE local_IPAddress[4];   //本地IP
 0000           ; BYTE remote_IPAddress[4];  //远端IP
 0000           ; extern BYTE UART_BUFFER[PPP_BUFFER_SIZE+3];
 0000           ; WORD UART_ptr=0;
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; void PPPInit (void) {
 0000                   .dbline 18
 0000           ;       PPPStatus |= ReSync;
 0000 80910800          lds R24,_PPPStatus
 0004 8460              ori R24,4
 0006 80930800          sts _PPPStatus,R24
 000A                   .dbline -2
 000A                   .dbline 19
 000A           ; }
 000A           L1:
 000A                   .dbline 0 ; func end
 000A 0895              ret
 000C                   .dbend
 000C                   .dbfunc e PPPEntry _PPPEntry fV
                        .even
 000C           _PPPEntry::
 000C 0E940000          xcall push_gset1
 0010                   .dbline -1
 0010                   .dbline 21
 0010           ; 
 0010           ; void PPPEntry (void) {    
 0010                   .dbline 22
 0010           ;               if (PPPStatus & IsFrame) {                             //判断是否收到一个完整的PPP包
 0010 20900800          lds R2,_PPPStatus
 0014 23FE              sbrs R2,3
 0016 29C0              rjmp L3
 0018                   .dbline 22
 0018                   .dbline 23
 0018           ;               switch (((((WORD)InBuffer [2])<<8)+InBuffer [3])) {                    //判断协议域
 0018 2090BC04          lds R2,_InBuffer+3
 001C 3090BB04          lds R3,_InBuffer+2
 0020 532D              mov R21,R3
 0022 422D              mov R20,R2
 0024 4132              cpi R20,33
 0026 E0EC              ldi R30,192
 0028 5E07              cpc R21,R30
 002A 79F0              breq L10
 002C 81E2              ldi R24,-16351
 002E 90EC              ldi R25,-64
 0030 8417              cp R24,R20
 0032 9507              cpc R25,R21
 0034 2CF0              brlt L14
 0036           L13:
 0036 4132              cpi R20,33
 0038 E0E8              ldi R30,128
 003A 5E07              cpc R21,R30
 003C 41F0              breq L11
 003E 09C0              xjmp L5
 0040           L14:
 0040 4132              cpi R20,33
 0042 E0E0              ldi R30,0
 0044 5E07              cpc R21,R30
 0046 49F0              breq L6
 0048 04C0              xjmp L5
 004A           X0:
 004A                   .dbline 23
 004A           L10:
 004A                   .dbline 26
 004A           ; 
 004A           ;                               case PPPID_LCP:                        //是LCP的包
 004A           ;                                       HandleLCPOptions ();
 004A 8BD1              xcall _HandleLCPOptions
 004C                   .dbline 27
 004C           ;                               break;
 004C 06C0              xjmp L6
 004E           L11:
 004E                   .dbline 30
 004E           ; 
 004E           ;                               case PPPID_IPCP:                        //是IPCP的包
 004E           ;                                       HandleIPCPOptions ();
 004E 14D5              xcall _HandleIPCPOptions
 0050                   .dbline 31
 0050           ;                               break;
 0050 04C0              xjmp L6
 0052           X1:
 0052                   .dbline 35
 0052           ;                               
 0052           ;                               case PPPID_IP:                          //是IP的包
 0052           ;                                                                       //NNOS接口
 0052           ;                               break;
 0052           L5:
 0052                   .dbline 38
 0052           ;                               
 0052           ;                               default:
 0052           ;                                         RejectProtocol (InBuffer);    //拒绝协议 
 0052 00E0              ldi R16,<_InBuffer
 0054 10E0              ldi R17,>_InBuffer
 0056 0E940000          xcall _RejectProtocol
 005A                   .dbline 39
 005A           ;                               break;
 005A           L6:
 005A                   .dbline 40
 005A                   .dbline 42
 005A 80910800          lds R24,_PPPStatus
 005E 877F              andi R24,247
 0060 80930800          sts _PPPStatus,R24
 0064                   .dbline 43
 0064 8460              ori R24,4
 0066 80930800          sts _PPPStatus,R24
 006A                   .dbline 44
 006A           L3:
 006A                   .dbline -2
 006A                   .dbline 46
 006A           ;                       };
 006A           ;                       
 006A           ;                       PPPStatus &= ~IsFrame;
 006A           ;                       PPPStatus |= ReSync;
 006A           ;               }
 006A           ; 
 006A           ; }
 006A           L2:
 006A 0E940000          xcall pop_gset1
 006E                   .dbline 0 ; func end
 006E 0895              ret
 0070                   .dbend
 0070                   .dbfunc e Move _Move fV
 0070           ;       numBYTEs -> R20,R21
 0070           ;           dest -> R18,R19
 0070           ;            src -> R16,R17
                        .even
 0070           _Move::
 0070 0E940000          xcall push_gset1
 0074 4A81              ldd R20,y+2
 0076 5B81              ldd R21,y+3
 0078                   .dbline -1
 0078                   .dbline 47
 0078           ; void Move (BYTE *src, BYTE *dest, register numBYTEs) {
 0078                   .dbline 48
 0078           ;       if ( numBYTEs <= 0 ) return;
 0078 2224              clr R2
 007A 3324              clr R3
 007C 2416              cp R2,R20
 007E 3506              cpc R3,R21
 0080 0CF0              brlt L16
 0082                   .dbline 48
 0082 29C0              xjmp L15
 0084           L16:
 0084                   .dbline 49
 0084           ;       if ( src < dest ) {
 0084 0217              cp R16,R18
 0086 1307              cpc R17,R19
 0088 C0F4              brsh L18
 008A                   .dbline 49
 008A                   .dbline 50
 008A           ;               src += numBYTEs;
 008A 040F              add R16,R20
 008C 151F              adc R17,R21
 008E                   .dbline 51
 008E           ;               dest += numBYTEs;
 008E 240F              add R18,R20
 0090 351F              adc R19,R21
 0092           L20:
 0092                   .dbline 52
 0092           ;               do {
 0092                   .dbline 53
 0092           ;               *--dest = *--src;
 0092 C901              movw R24,R18
 0094 0197              sbiw R24,1
 0096 1C01              movw R2,R24
 0098 9C01              movw R18,R24
 009A C801              movw R24,R16
 009C 0197              sbiw R24,1
 009E 8C01              movw R16,R24
 00A0 FC01              movw R30,R24
 00A2 4080              ldd R4,z+0
 00A4 F101              movw R30,R2
 00A6 4082              std z+0,R4
 00A8                   .dbline 54
 00A8           L21:
 00A8                   .dbline 54
 00A8           ;               } while ( --numBYTEs > 0 );
 00A8 CA01              movw R24,R20
 00AA 0197              sbiw R24,1
 00AC AC01              movw R20,R24
 00AE 4424              clr R4
 00B0 5524              clr R5
 00B2 4816              cp R4,R24
 00B4 5906              cpc R5,R25
 00B6 6CF3              brlt L20
 00B8                   .dbline 55
 00B8           ;       } else
 00B8 0EC0              xjmp L19
 00BA           L18:
 00BA           L23:
 00BA                   .dbline 56
 00BA           ;               do {
 00BA                   .dbline 57
 00BA           ;                    *dest++ = *src++;
 00BA F801              movw R30,R16
 00BC D901              movw R26,R18
 00BE 0190              ld R0,Z+
 00C0 8F01              movw R16,R30
 00C2 0D92              st X+,R0
 00C4 9D01              movw R18,R26
 00C6                   .dbline 58
 00C6           L24:
 00C6                   .dbline 58
 00C6 CA01              movw R24,R20
 00C8 0197              sbiw R24,1
 00CA AC01              movw R20,R24
 00CC 4424              clr R4
 00CE 5524              clr R5
 00D0 4816              cp R4,R24
 00D2 5906              cpc R5,R25
 00D4 94F3              brlt L23
 00D6           L19:
 00D6                   .dbline -2
 00D6                   .dbline 59
 00D6           ;               } while ( --numBYTEs > 0 );
 00D6           ; }
 00D6           L15:
 00D6 0E940000          xcall pop_gset1
 00DA                   .dbline 0 ; func end
 00DA 0895              ret
 00DC                   .dbsym r numBYTEs 20 I
 00DC                   .dbsym r dest 18 pc
 00DC                   .dbsym r src 16 pc
 00DC                   .dbend
 00DC                   .dbfunc e PPPGetChecksum _PPPGetChecksum fi
 00DC           ;            len -> R22,R23
 00DC           ;             cp -> R20,R21
                        .even
 00DC           _PPPGetChecksum::
 00DC 0E940000          xcall push_gset2
 00E0 B901              movw R22,R18
 00E2 A801              movw R20,R16
 00E4 2297              sbiw R28,2
 00E6                   .dbline -1
 00E6                   .dbline 61
 00E6           ; 
 00E6           ; WORD PPPGetChecksum (register unsigned char *cp, register int len) {
 00E6                   .dbline 62
 00E6           ;          return ~PPPfcs16(0xffff, cp, len );
 00E6 7983              std y+1,R23
 00E8 6883              std y+0,R22
 00EA 9A01              movw R18,R20
 00EC 0FEF              ldi R16,65535
 00EE 1FEF              ldi R17,255
 00F0 06D0              xcall _PPPfcs16
 00F2 0095              com R16
 00F4 1095              com R17
 00F6                   .dbline -2
 00F6           L26:
 00F6 2296              adiw R28,2
 00F8 0E940000          xcall pop_gset2
 00FC                   .dbline 0 ; func end
 00FC 0895              ret
 00FE                   .dbsym r len 22 I
 00FE                   .dbsym r cp 20 pc
 00FE                   .dbend
 00FE                   .dbfunc s PPPfcs16 _PPPfcs16 fi
 00FE           ;            len -> R20,R21
 00FE           ;             cp -> R22,R23
 00FE           ;            fcs -> R10,R11
                        .even
 00FE           _PPPfcs16:
 00FE 0E940000          xcall push_gset3
 0102 B901              movw R22,R18
 0104 5801              movw R10,R16
 0106 4E81              ldd R20,y+6
 0108 5F81              ldd R21,y+7
 010A                   .dbline -1
 010A                   .dbline 65
 010A           ; }
 010A           ; 
 010A           ; static WORD PPPfcs16 (WORD fcs, BYTE *cp, int len) {
 010A 1AC0              xjmp L29
 010C           L28:
 010C                   .dbline 67
 010C FB01              movw R30,R22
 010E 2190              ld R2,Z+
 0110 BF01              movw R22,R30
 0112 3324              clr R3
 0114 9501              movw R18,R10
 0116 2225              eor R18,R2
 0118 3325              eor R19,R3
 011A 3070              andi R19,0
 011C 02E0              ldi R16,2
 011E 10E0              ldi R17,0
 0120 0E940000          xcall empy16s
 0124 F801              movw R30,R16
 0126 80E0              ldi R24,<_fcstab
 0128 90E0              ldi R25,>_fcstab
 012A E80F              add R30,R24
 012C F91F              adc R31,R25
 012E 0590              lpm R0,Z+
 0130 1490              lpm R1,Z
 0132 F001              movw R30,R0
 0134 1501              movw R2,R10
 0136 232C              mov R2,R3
 0138 3324              clr R3
 013A 2E26              eor R2,R30
 013C 3F26              eor R3,R31
 013E 5101              movw R10,R2
 0140           L29:
 0140                   .dbline 66
 0140           ;          while (len--) 
 0140 1A01              movw R2,R20
 0142 4150              subi R20,1
 0144 5040              sbci R21,0
 0146 2220              tst R2
 0148 09F7              brne L28
 014A 3320              tst R3
 014C F9F6              brne L28
 014E           X2:
 014E                   .dbline 68
 014E           ;                  fcs = (fcs >> 8) ^ fcstab[(fcs ^ *cp++) & 0xff];
 014E           ;        return (fcs);
 014E 8501              movw R16,R10
 0150                   .dbline -2
 0150           L27:
 0150 0E940000          xcall pop_gset3
 0154                   .dbline 0 ; func end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -