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

📄 ppp.lis

📁 在串口上PPP拨号上网的源程序(实现PPP协议栈)
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02DA 3E07              cpc R19,R30
 02DC 29F0              breq L56
 02DE 2E37              cpi R18,126
 02E0 E0E0              ldi R30,0
 02E2 3E07              cpc R19,R30
 02E4 39F0              breq L57
 02E6 1CC0              xjmp L53
 02E8           X5:
 02E8                   .dbline 145
 02E8           ;               switch (c) {
 02E8           L56:
 02E8                   .dbline 147
 02E8           ;                       case ESC:                           // 如果是0x7D,置为还原状态
 02E8           ;                               PPPStatus |= IsESC;    
 02E8 80910800          lds R24,_PPPStatus
 02EC 8160              ori R24,1
 02EE 80930800          sts _PPPStatus,R24
 02F2                   .dbline 148
 02F2           ;                       break;
 02F2 36C0              xjmp L54
 02F4           L57:
 02F4                   .dbline 151
 02F4           ; 
 02F4           ;                       case END:                           // 如果是0x7E,置为收到完整的PPP状态
 02F4           ;                               if (FrameSize > 0) {    
 02F4 2224              clr R2
 02F6 30900900          lds R3,_FrameSize
 02FA 2314              cp R2,R3
 02FC 88F5              brsh L54
 02FE                   .dbline 151
 02FE                   .dbline 152
 02FE           ;                                       PPP_Packet [FrameSize] = 0;
 02FE 20900A00          lds R2,_PPP_Packet
 0302 30900B00          lds R3,_PPP_Packet+1
 0306 E0910900          lds R30,_FrameSize
 030A FF27              clr R31
 030C E20D              add R30,R2
 030E F31D              adc R31,R3
 0310 2224              clr R2
 0312 2082              std z+0,R2
 0314                   .dbline 153
 0314           ;                                       PPPStatus |= IsFrame;   
 0314 80910800          lds R24,_PPPStatus
 0318 8860              ori R24,8
 031A 80930800          sts _PPPStatus,R24
 031E                   .dbline 154
 031E           ;                               }
 031E                   .dbline 155
 031E           ;                       break;
 031E 20C0              xjmp L54
 0320           L53:
 0320                   .dbline 158
 0320           ; 
 0320           ;                       default:                            //接收PPP数据
 0320           ;                               PPP_Packet [FrameSize++] = c;
 0320 20900900          lds R2,_FrameSize
 0324 3324              clr R3
 0326 822D              mov R24,R2
 0328 8F5F              subi R24,255    ; addi 1
 032A 80930900          sts _FrameSize,R24
 032E 40900A00          lds R4,_PPP_Packet
 0332 50900B00          lds R5,_PPP_Packet+1
 0336 E22D              mov R30,R2
 0338 FF27              clr R31
 033A E40D              add R30,R4
 033C F51D              adc R31,R5
 033E 0083              std z+0,R16
 0340                   .dbline 159
 0340           ;                               if (FrameSize > (PPP_BUFFER_SIZE - 6)) {     //?
 0340 8AEA              ldi R24,1194
 0342 94E0              ldi R25,4
 0344 20900900          lds R2,_FrameSize
 0348 3324              clr R3
 034A 8215              cp R24,R2
 034C 9305              cpc R25,R3
 034E 44F4              brge L54
 0350                   .dbline 159
 0350                   .dbline 160
 0350           ;                                       FrameSize = 0;                   //清空缓冲区
 0350 2224              clr R2
 0352 20920900          sts _FrameSize,R2
 0356                   .dbline 161
 0356           ;                                       PPPStatus |= ReSync;             //置为初始状态
 0356 80910800          lds R24,_PPPStatus
 035A 8460              ori R24,4
 035C 80930800          sts _PPPStatus,R24
 0360                   .dbline 162
 0360           ;                               }
 0360                   .dbline 163
 0360           ;                       break;
 0360           L54:
 0360                   .dbline 165
 0360           L52:
 0360                   .dbline -2
 0360                   .dbline 168
 0360           ;               }
 0360           ;         }
 0360           ; 
 0360           ; 
 0360           ; }
 0360           L42:
 0360                   .dbline 0 ; func end
 0360 0895              ret
 0362                   .dbsym r c 16 c
 0362                   .dbend
 0362                   .dbfunc s HandleLCPOptions _HandleLCPOptions fV
 0362           ;            nak -> R14
 0362           ;            rej -> R20
 0362           ;        length0 -> y+64
 0362           ;   temp_buffer1 -> y+42
 0362           ;              j -> R10
 0362           ;   temp_buffer2 -> y+2
 0362           ;        length1 -> y+62
 0362           ;              i -> R22
                        .even
 0362           _HandleLCPOptions:
 0362 0E940000          xcall push_gset5
 0366 EF97              sbiw R28,63
 0368 2397              sbiw R28,3  ; offset = 66
 036A                   .dbline -1
 036A                   .dbline 172
 036A           ; 
 036A           ; 
 036A           ; 
 036A           ; static void HandleLCPOptions (void) {
 036A                   .dbline 173
 036A           ; WORD length0=0;                     //保存LCP的数据长度
 036A 0024              clr R0
 036C 1124              clr R1
 036E FE01              movw R30,R28
 0370 E05C              subi R30,192  ; addi 64
 0372 FF4F              sbci R31,255
 0374 1182              std z+1,R1
 0376 0082              std z+0,R0
 0378                   .dbline 174
 0378           ; WORD length1=8;                     //保存单个LCP包开始位置
 0378 88E0              ldi R24,8
 037A 90E0              ldi R25,0
 037C 9FAF              std y+63,R25
 037E 8EAF              std y+62,R24
 0380                   .dbline 175
 0380           ; BYTE rej=0;                         //是否要发拒绝包
 0380 4427              clr R20
 0382                   .dbline 176
 0382           ; BYTE nak=0;                         //是否要发否定包
 0382 EE24              clr R14
 0384                   .dbline 177
 0384           ; BYTE i=0;                           
 0384 6627              clr R22
 0386                   .dbline 178
 0386           ; BYTE j=0;                              
 0386 AA24              clr R10
 0388                   .dbline 183
 0388 C090BD04          lds R12,_InBuffer+4
 038C DD24              clr R13
 038E C601              movw R24,R12
 0390 8130              cpi R24,1
 0392 E0E0              ldi R30,0
 0394 9E07              cpc R25,R30
 0396 09F4              brne X10
 0398 33C0              xjmp L71
 039A           X10:
 039A 8230              cpi R24,2
 039C E0E0              ldi R30,0
 039E 9E07              cpc R25,R30
 03A0 09F4              brne X11
 03A2 09C3              xjmp L123
 03A4           X11:
 03A4 8330              cpi R24,3
 03A6 E0E0              ldi R30,0
 03A8 9E07              cpc R25,R30
 03AA 09F4              brne X12
 03AC 36C3              xjmp L127
 03AE           X12:
 03AE 8430              cpi R24,4
 03B0 E0E0              ldi R30,0
 03B2 9E07              cpc R25,R30
 03B4 09F4              brne X13
 03B6 5BC3              xjmp L62
 03B8           X13:
 03B8 8530              cpi R24,5
 03BA E0E0              ldi R30,0
 03BC 9E07              cpc R25,R30
 03BE 31F0              breq L67
 03C0 8630              cpi R24,6
 03C2 E0E0              ldi R30,0
 03C4 9E07              cpc R25,R30
 03C6 09F4              brne X14
 03C8 4DC3              xjmp L139
 03CA           X14:
 03CA 51C3              xjmp L62
 03CC           X6:
 03CC                   .dbline 183
 03CC           ; BYTE temp_buffer1[20];              //LCP 协商类型
 03CC           ; WORD temp_buffer2[20];              //LCP 各个协商类型在缓冲中的位置
 03CC           ; 
 03CC           ; 
 03CC           ;       switch (InBuffer [4] ) {
 03CC           L67:
 03CC                   .dbline 187
 03CC           ; 
 03CC           ;               //++++++++++++++++++++++++++++++++++++++++++++++++++++
 03CC           ;               case LCP_TERMINATE_REQUEST:                     //"Server Terminate-Request received"
 03CC           ;                       Move (InBuffer, OutBuffer, InBuffer[7]+4);
 03CC 8091C004          lds R24,_InBuffer+7
 03D0 9927              clr R25
 03D2 0496              adiw R24,4
 03D4 9983              std y+1,R25
 03D6 8883              std y+0,R24
 03D8 20E0              ldi R18,<_OutBuffer
 03DA 30E0              ldi R19,>_OutBuffer
 03DC 00E0              ldi R16,<_InBuffer
 03DE 10E0              ldi R17,>_InBuffer
 03E0 47DE              xcall _Move
 03E2                   .dbline 188
 03E2           ;                       OutBuffer [4] = LCP_TERMINATE_ACK;
 03E2 86E0              ldi R24,6
 03E4 80930C00          sts _OutBuffer+4,R24
 03E8                   .dbline 189
 03E8           ;                       ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);                                      
 03E8 20910F00          lds R18,_OutBuffer+7
 03EC 2A5F              subi R18,250    ; addi 6
 03EE 00E0              ldi R16,<_OutBuffer
 03F0 10E0              ldi R17,>_OutBuffer
 03F2 B1DE              xcall _ProcPPPSend
 03F4                   .dbline 190
 03F4           ;                       PPPStatus &= ~LinkOn;
 03F4 80910800          lds R24,_PPPStatus
 03F8 8F7D              andi R24,223
 03FA 80930800          sts _PPPStatus,R24
 03FE                   .dbline 191
 03FE           ;               break;
 03FE 37C3              xjmp L62
 0400           L71:
 0400                   .dbline 195
 0400           ; 
 0400           ;               //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 0400           ;               case LCP_CONFIG_REQUEST:
 0400           ;                     length0=InBuffer[7]-4;                  //LCP的数据长度
 0400 8091C004          lds R24,_InBuffer+7
 0404 9927              clr R25
 0406 0497              sbiw R24,4
 0408 FE01              movw R30,R28
 040A E05C              subi R30,192  ; addi 64
 040C FF4F              sbci R31,255
 040E 9183              std z+1,R25
 0410 8083              std z+0,R24
 0412 3BC0              xjmp L74
 0414           L73:
 0414                   .dbline 197
 0414                   .dbline 198
 0414 80E0              ldi R24,<_InBuffer
 0416 90E0              ldi R25,>_InBuffer
 0418 EEAD              ldd R30,y+62
 041A FFAD              ldd R31,y+63
 041C E80F              add R30,R24
 041E F91F              adc R31,R25
 0420 2080              ldd R2,z+0
 0422 CE01              movw R24,R28
 0424 8A96              adiw R24,42
 0426 EA2D              mov R30,R10
 0428 FF27              clr R31
 042A E80F              add R30,R24
 042C F91F              adc R31,R25
 042E 2082              std z+0,R2
 0430                   .dbline 199
 0430 82E0              ldi R24,2
 0432 8A9D              mul R24,R10
 0434 F001              movw R30,R0
 0436 CE01              movw R24,R28
 0438 0296              adiw R24,2
 043A E80F              add R30,R24
 043C F91F              adc R31,R25
 043E 0EAC              ldd R0,y+62
 0440 1FAC              ldd R1,y+63
 0442 1182              std z+1,R1
 0444 0082              std z+0,R0
 0446                   .dbline 200
 0446 80E0              ldi R24,<_InBuffer
 0448 90E0              ldi R25,>_InBuffer
 044A F001              movw R30,R0
 044C 3196              adiw R30,1
 044E E80F              add R30,R24
 0450 F91F              adc R31,R25
 0452 2080              ldd R2,z+0
 0454 3324              clr R3
 0456 FE01              movw R30,R28
 0458 E05C              subi R30,192  ; addi 64
 045A FF4F              sbci R31,255
 045C 0080              ldd R0,z+0
 045E 1180              ldd R1,z+1
 0460 0218              sub R0,R2
 0462 1308              sbc R1,R3
 0464 FE01              movw R30,R28
 0466 E05C              subi R30,192  ; addi 64
 0468 FF4F              sbci R31,255
 046A 1182              std z+1,R1
 046C 0082              std z+0,R0
 046E                   .dbline 201
 046E EEAD              ldd R30,y+62
 0470 FFAD              ldd R31,y+63
 0472 3196              adiw R30,1
 0474 E80F              add R30,R24
 0476 F91F              adc R31,R25
 0478 2080              ldd R2,z+0
 047A 3324              clr R3
 047C 0EAC              ldd R0,y+62
 047E 1FAC              ldd R1,y+63
 0480 020C              add R0,R2
 0482 131C              adc R1,R3
 0484 1FAE              std y+63,R1
 0486 0EAE              std y+62,R0
 0488                   .dbline 202
 0488 A394              inc R10
 048A                   .dbline 203
 048A           L74:
 048A                   .dbline 196
 048A           ;                         while(length0)                     
 048A FE01              movw R30,R28
 048C E05C              subi R30,192  ; addi 64
 048E FF4F              sbci R31,255
 0490 0080              ldd R0,z+0
 0492 1180              ldd R1,z+1
 0494 0020              tst R0
 0496 09F0              breq X15
 0498 BDCF              xjmp L73
 049A           X15:
 049A 1120              tst R1
 049C 09F0              breq X16

⌨️ 快捷键说明

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