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

📄 ppp.lis

📁 在串口上PPP拨号上网的源程序(实现PPP协议栈)
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0154 0895              ret
 0156                   .dbsym r len 20 I
 0156                   .dbsym r cp 22 pc
 0156                   .dbsym r fcs 10 i
 0156                   .dbend
 0156                   .dbfunc e ProcPPPSend _ProcPPPSend fV
 0156           ;       Checksum -> R20,R21
 0156           ;            len -> R22
 0156           ;         Buffer -> R10,R11
                        .even
 0156           _ProcPPPSend::
 0156 0E940000          xcall push_gset3
 015A 622F              mov R22,R18
 015C 5801              movw R10,R16
 015E                   .dbline -1
 015E                   .dbline 81
 015E           ; }
 015E           ; 
 015E           ; 
 015E           ; /////////////////////////////////////////////////////////////
 015E           ; /*
 015E           ; 
 015E           ; PPP包发送
 015E           ; 说明:0x00~0x20是ASCⅡ的控制字符,要进行转意处理。 
 015E           ; 
 015E           ; */
 015E           ; ////////////////////////////////////////////////////////////
 015E           ; void ProcPPPSend (BYTE *Buffer, BYTE len) 
 015E           ; {
 015E                   .dbline 82
 015E           ;       WORD Checksum = 0;
 015E 4427              clr R20
 0160 5527              clr R21
 0162                   .dbline 83
 0162           ;       Checksum = PPPGetChecksum (Buffer, Buffer[7] + 4);
 0162 F501              movw R30,R10
 0164 2781              ldd R18,z+7
 0166 3327              clr R19
 0168 2C5F              subi R18,252  ; offset = 4
 016A 3F4F              sbci R19,255
 016C 8F01              movw R16,R30
 016E B6DF              xcall _PPPGetChecksum
 0170 A801              movw R20,R16
 0172                   .dbline 84
 0172           ;       Buffer [Buffer[7]+4] = Checksum & 0xFF;
 0172 F501              movw R30,R10
 0174 E781              ldd R30,z+7
 0176 FF27              clr R31
 0178 EA0D              add R30,R10
 017A FB1D              adc R31,R11
 017C CA01              movw R24,R20
 017E 9070              andi R25,0
 0180 8483              std z+4,R24
 0182                   .dbline 85
 0182           ;       Buffer [Buffer[7]+5] = (Checksum >> 8) & 0xFF;
 0182 F501              movw R30,R10
 0184 E781              ldd R30,z+7
 0186 FF27              clr R31
 0188 EA0D              add R30,R10
 018A FB1D              adc R31,R11
 018C CA01              movw R24,R20
 018E 892F              mov R24,R25
 0190 9927              clr R25
 0192 9070              andi R25,0
 0194 8583              std z+5,R24
 0196                   .dbline 86
 0196           ;       putchar (0x7E);
 0196 0EE7              ldi R16,126
 0198 0E940000          xcall _putchar
 019C 2FC0              xjmp L33
 019E           L32:
 019E                   .dbline 87
 019E           ;       while (len--) {
 019E                   .dbline 88
 019E           ;               if(*Buffer < 0x20)
 019E F501              movw R30,R10
 01A0 8081              ldd R24,z+0
 01A2 8032              cpi R24,32
 01A4 50F4              brsh L35
 01A6                   .dbline 89
 01A6           ;               {    
 01A6                   .dbline 90
 01A6           ;                       putchar(0x7D);
 01A6 0DE7              ldi R16,125
 01A8 0E940000          xcall _putchar
 01AC                   .dbline 91
 01AC           ;                       putchar(*Buffer ^ 0x20);
 01AC 80E2              ldi R24,32
 01AE F501              movw R30,R10
 01B0 0081              ldd R16,z+0
 01B2 0827              eor R16,R24
 01B4 0E940000          xcall _putchar
 01B8                   .dbline 92
 01B8           ;               }       
 01B8 1EC0              xjmp L36
 01BA           L35:
 01BA                   .dbline 93
 01BA           ;               else {
 01BA                   .dbline 94
 01BA F501              movw R30,R10
 01BC 4081              ldd R20,z+0
 01BE 5527              clr R21
 01C0 4D37              cpi R20,125
 01C2 E0E0              ldi R30,0
 01C4 5E07              cpc R21,R30
 01C6 61F0              breq L41
 01C8 4E37              cpi R20,126
 01CA E0E0              ldi R30,0
 01CC 5E07              cpc R21,R30
 01CE 09F0              breq L40
 01D0 0EC0              xjmp L37
 01D2           X3:
 01D2                   .dbline 94
 01D2           ;                       switch (*Buffer) {
 01D2           L40:
 01D2                   .dbline 96
 01D2           ;                               case 0x7E:
 01D2           ;                                       putchar (0x7D);
 01D2 0DE7              ldi R16,125
 01D4 0E940000          xcall _putchar
 01D8                   .dbline 97
 01D8           ;                                       putchar (0x5E);
 01D8 0EE5              ldi R16,94
 01DA 0E940000          xcall _putchar
 01DE                   .dbline 98
 01DE           ;                                   break;
 01DE 0BC0              xjmp L38
 01E0           L41:
 01E0                   .dbline 100
 01E0           ;                               case 0x7D:
 01E0           ;                                       putchar (0x7D);
 01E0 0DE7              ldi R16,125
 01E2 0E940000          xcall _putchar
 01E6                   .dbline 101
 01E6           ;                                       putchar (0x5D);
 01E6 0DE5              ldi R16,93
 01E8 0E940000          xcall _putchar
 01EC                   .dbline 102
 01EC           ;                                   break;
 01EC 04C0              xjmp L38
 01EE           L37:
 01EE                   .dbline 104
 01EE           ;                               default:
 01EE           ;                                       putchar (*Buffer);
 01EE F501              movw R30,R10
 01F0 0081              ldd R16,z+0
 01F2 0E940000          xcall _putchar
 01F6                   .dbline 105
 01F6           ;                                   break;
 01F6           L38:
 01F6                   .dbline 107
 01F6           ;                        }
 01F6           ;               }
 01F6           L36:
 01F6                   .dbline 108
 01F6 C501              movw R24,R10
 01F8 0196              adiw R24,1
 01FA 5C01              movw R10,R24
 01FC                   .dbline 109
 01FC           L33:
 01FC                   .dbline 87
 01FC 262E              mov R2,R22
 01FE 3324              clr R3
 0200 6150              subi R22,1
 0202 2220              tst R2
 0204 09F0              breq X4
 0206 CBCF              xjmp L32
 0208           X4:
 0208                   .dbline 110
 0208           ;               Buffer++;
 0208           ;       }
 0208           ;       putchar (0x7E);
 0208 0EE7              ldi R16,126
 020A 0E940000          xcall _putchar
 020E                   .dbline -2
 020E                   .dbline 111
 020E           ; }
 020E           L31:
 020E 0E940000          xcall pop_gset3
 0212                   .dbline 0 ; func end
 0212 0895              ret
 0214                   .dbsym r Checksum 20 i
 0214                   .dbsym r len 22 c
 0214                   .dbsym r Buffer 10 pc
 0214                   .dbend
 0214                   .dbfunc e ProcPPPReceive _ProcPPPReceive fV
 0214           ;              c -> R16
                        .even
 0214           _ProcPPPReceive::
 0214                   .dbline -1
 0214                   .dbline 117
 0214           ; 
 0214           ; 
 0214           ; 
 0214           ; 
 0214           ; void ProcPPPReceive (void)
 0214           ;  {  
 0214                   .dbline 120
 0214           ; 
 0214           ;       BYTE c;
 0214           ;       c=UART_BUFFER[UART_ptr];
 0214 80E0              ldi R24,<_UART_BUFFER
 0216 90E0              ldi R25,>_UART_BUFFER
 0218 E0910E00          lds R30,_UART_ptr
 021C F0910F00          lds R31,_UART_ptr+1
 0220 E80F              add R30,R24
 0222 F91F              adc R31,R25
 0224 0081              ldd R16,z+0
 0226                   .dbline 121
 0226           ;       PPPStatus |= ByteRx;                //收到一个字节
 0226 80910800          lds R24,_PPPStatus
 022A 8061              ori R24,16
 022C 80930800          sts _PPPStatus,R24
 0230                   .dbline 122
 0230           ;       if (PPPStatus & IsFrame) return;    //判断是否收到一个完整的PPP包
 0230 83FF              sbrs R24,3
 0232 01C0              rjmp L43
 0234                   .dbline 122
 0234 95C0              xjmp L42
 0236           L43:
 0236                   .dbline 124
 0236           ;       else
 0236           ;       {
 0236                   .dbline 125
 0236           ;        if(UART_ptr>(PPP_BUFFER_SIZE+3))
 0236 83EB              ldi R24,1203
 0238 94E0              ldi R25,4
 023A 20900E00          lds R2,_UART_ptr
 023E 30900F00          lds R3,_UART_ptr+1
 0242 8215              cp R24,R2
 0244 9305              cpc R25,R3
 0246 30F4              brsh L45
 0248                   .dbline 126
 0248           ;       {
 0248                   .dbline 127
 0248           ;       UART_ptr=0;
 0248 2224              clr R2
 024A 3324              clr R3
 024C 30920F00          sts _UART_ptr+1,R3
 0250 20920E00          sts _UART_ptr,R2
 0254                   .dbline 128
 0254           ;       }
 0254           L45:
 0254                   .dbline 129
 0254           ;       UART_BUFFER[UART_ptr]='\0';
 0254 80E0              ldi R24,<_UART_BUFFER
 0256 90E0              ldi R25,>_UART_BUFFER
 0258 E0910E00          lds R30,_UART_ptr
 025C F0910F00          lds R31,_UART_ptr+1
 0260 E80F              add R30,R24
 0262 F91F              adc R31,R25
 0264 2224              clr R2
 0266 2082              std z+0,R2
 0268                   .dbline 130
 0268           ;       UART_ptr++;
 0268 80910E00          lds R24,_UART_ptr
 026C 90910F00          lds R25,_UART_ptr+1
 0270 0196              adiw R24,1
 0272 90930F00          sts _UART_ptr+1,R25
 0276 80930E00          sts _UART_ptr,R24
 027A                   .dbline 131
 027A           ;       }
 027A                   .dbline 134
 027A           ; 
 027A           ;       ///////////////////////////////////////////////////////
 027A           ;       if (PPPStatus & ReSync) {           //判断是否在初始状态
 027A 20900800          lds R2,_PPPStatus
 027E 22FE              sbrs R2,2
 0280 0BC0              rjmp L47
 0282                   .dbline 134
 0282                   .dbline 135
 0282           ;               if (c!= 0x7E) return;      //判断是否包头
 0282 0E37              cpi R16,126
 0284 09F0              breq L49
 0286                   .dbline 135
 0286 6CC0              xjmp L42
 0288           L49:
 0288                   .dbline 136
 0288           ;               PPPStatus &= ~ReSync;       //去掉初始状态
 0288 80910800          lds R24,_PPPStatus
 028C 8B7F              andi R24,251
 028E 80930800          sts _PPPStatus,R24
 0292                   .dbline 137
 0292           ;               FrameSize = 0;              //清空缓冲区
 0292 2224              clr R2
 0294 20920900          sts _FrameSize,R2
 0298                   .dbline 138
 0298           ;       }
 0298           L47:
 0298                   .dbline 140
 0298           ;    //////////////////////////////////////////////////////
 0298           ;       if (PPPStatus & IsESC) {                            //判断是否需要还原
 0298 20900800          lds R2,_PPPStatus
 029C 20FE              sbrs R2,0
 029E 19C0              rjmp L51
 02A0                   .dbline 140
 02A0                   .dbline 141
 02A0           ;               PPP_Packet [FrameSize++] = 0x20 ^ c;        //还原
 02A0 20900900          lds R2,_FrameSize
 02A4 3324              clr R3
 02A6 822D              mov R24,R2
 02A8 8F5F              subi R24,255    ; addi 1
 02AA 80930900          sts _FrameSize,R24
 02AE 80E2              ldi R24,32
 02B0 402E              mov R4,R16
 02B2 4826              eor R4,R24
 02B4 60900A00          lds R6,_PPP_Packet
 02B8 70900B00          lds R7,_PPP_Packet+1
 02BC E22D              mov R30,R2
 02BE FF27              clr R31
 02C0 E60D              add R30,R6
 02C2 F71D              adc R31,R7
 02C4 4082              std z+0,R4
 02C6                   .dbline 142
 02C6           ;               PPPStatus &= ~IsESC;                        //去掉还原状态
 02C6 80910800          lds R24,_PPPStatus
 02CA 8E7F              andi R24,254
 02CC 80930800          sts _PPPStatus,R24
 02D0                   .dbline 143
 02D0           ;       }
 02D0 47C0              xjmp L52
 02D2           L51:
 02D2                   .dbline 144
 02D2           ;       else {
 02D2                   .dbline 145
 02D2 202F              mov R18,R16
 02D4 3327              clr R19
 02D6 2D37              cpi R18,125
 02D8 E0E0              ldi R30,0

⌨️ 快捷键说明

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