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

📄 ppp.lst

📁 在串口上PPP拨号上网的源程序(实现PPP协议栈)
💻 LST
📖 第 1 页 / 共 5 页
字号:
    05E3 8200      STD	Z+0,R0
(0174) WORD length1=8;                     //保存单个LCP包开始位置
    05E4 E088      LDI	R24,0x8
    05E5 E090      LDI	R25,0
    05E6 AF9F      STD	Y+63,R25
    05E7 AF8E      STD	Y+62,R24
(0175) BYTE rej=0;                         //是否要发拒绝包
    05E8 2744      CLR	R20
(0176) BYTE nak=0;                         //是否要发否定包
    05E9 24EE      CLR	R14
(0177) BYTE i=0;                           
    05EA 2766      CLR	R22
(0178) BYTE j=0;                              
    05EB 24AA      CLR	R10
(0179) BYTE temp_buffer1[20];              //LCP 协商类型
(0180) WORD temp_buffer2[20];              //LCP 各个协商类型在缓冲中的位置
(0181) 
(0182) 
(0183) 	switch (InBuffer [4] ) {
    05EC 90C00AAB  LDS	R12,0xAAB
    05EE 24DD      CLR	R13
    05EF 01C6      MOVW	R24,R12
    05F0 3081      CPI	R24,1
    05F1 E0E0      LDI	R30,0
    05F2 079E      CPC	R25,R30
    05F3 F409      BNE	0x05F5
    05F4 C033      RJMP	0x0628
    05F5 3082      CPI	R24,2
    05F6 E0E0      LDI	R30,0
    05F7 079E      CPC	R25,R30
    05F8 F409      BNE	0x05FA
    05F9 C309      RJMP	0x0903
    05FA 3083      CPI	R24,3
    05FB E0E0      LDI	R30,0
    05FC 079E      CPC	R25,R30
    05FD F409      BNE	0x05FF
    05FE C336      RJMP	0x0935
    05FF 3084      CPI	R24,4
    0600 E0E0      LDI	R30,0
    0601 079E      CPC	R25,R30
    0602 F409      BNE	0x0604
    0603 C35B      RJMP	0x095F
    0604 3085      CPI	R24,5
    0605 E0E0      LDI	R30,0
    0606 079E      CPC	R25,R30
    0607 F031      BEQ	0x060E
    0608 3086      CPI	R24,6
    0609 E0E0      LDI	R30,0
    060A 079E      CPC	R25,R30
    060B F409      BNE	0x060D
    060C C34D      RJMP	0x095A
    060D C351      RJMP	0x095F
(0184) 
(0185) 		//++++++++++++++++++++++++++++++++++++++++++++++++++++
(0186) 		case LCP_TERMINATE_REQUEST:			//"Server Terminate-Request received"
(0187) 			Move (InBuffer, OutBuffer, InBuffer[7]+4);
    060E 91800AAE  LDS	R24,0xAAE
    0610 2799      CLR	R25
    0611 9604      ADIW	R24,4
    0612 8399      STD	Y+1,R25
    0613 8388      STD	Y+0,R24
    0614 EF26      LDI	R18,0xF6
    0615 E035      LDI	R19,5
    0616 EA07      LDI	R16,0xA7
    0617 E01A      LDI	R17,0xA
    0618 DE47      RCALL	_Move
(0188) 			OutBuffer [4] = LCP_TERMINATE_ACK;
    0619 E086      LDI	R24,6
    061A 938005FA  STS	0x5FA,R24
(0189) 			ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);					
    061C 912005FD  LDS	R18,0x5FD
    061E 5F2A      SUBI	R18,0xFA
    061F EF06      LDI	R16,0xF6
    0620 E015      LDI	R17,5
    0621 DEB1      RCALL	_ProcPPPSend
(0190) 			PPPStatus &= ~LinkOn;
    0622 9180012B  LDS	R24,0x12B
    0624 7D8F      ANDI	R24,0xDF
    0625 9380012B  STS	0x12B,R24
(0191) 		break;
    0627 C337      RJMP	0x095F
(0192) 
(0193) 		//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
(0194) 		case LCP_CONFIG_REQUEST:
(0195) 		      length0=InBuffer[7]-4;                  //LCP的数据长度
    0628 91800AAE  LDS	R24,0xAAE
    062A 2799      CLR	R25
    062B 9704      SBIW	R24,4
    062C 01FE      MOVW	R30,R28
    062D 5CE0      SUBI	R30,0xC0
    062E 4FFF      SBCI	R31,0xFF
    062F 8391      STD	Z+1,R25
    0630 8380      STD	Z+0,R24
    0631 C03B      RJMP	0x066D
(0196) 			  while(length0)                     
(0197) 			  {
(0198) 			    temp_buffer1[j]=InBuffer[length1];//读取LCP 协商类型
    0632 EA87      LDI	R24,0xA7
    0633 E09A      LDI	R25,0xA
    0634 ADEE      LDD	R30,Y+62
    0635 ADFF      LDD	R31,Y+63
    0636 0FE8      ADD	R30,R24
    0637 1FF9      ADC	R31,R25
    0638 8020      LDD	R2,Z+0
    0639 01CE      MOVW	R24,R28
    063A 968A      ADIW	R24,0x2A
    063B 2DEA      MOV	R30,R10
    063C 27FF      CLR	R31
    063D 0FE8      ADD	R30,R24
    063E 1FF9      ADC	R31,R25
    063F 8220      STD	Z+0,R2
(0199) 			    temp_buffer2[j]=length1;          //读取LCP 各个协商类型在缓冲中的位置
    0640 E082      LDI	R24,2
    0641 9D8A      MUL	R24,R10
    0642 01F0      MOVW	R30,R0
    0643 01CE      MOVW	R24,R28
    0644 9602      ADIW	R24,2
    0645 0FE8      ADD	R30,R24
    0646 1FF9      ADC	R31,R25
    0647 AC0E      LDD	R0,Y+62
    0648 AC1F      LDD	R1,Y+63
    0649 8211      STD	Z+1,R1
    064A 8200      STD	Z+0,R0
(0200) 			    length0-=InBuffer[length1+1];     //
    064B EA87      LDI	R24,0xA7
    064C E09A      LDI	R25,0xA
    064D 01F0      MOVW	R30,R0
    064E 9631      ADIW	R30,1
    064F 0FE8      ADD	R30,R24
    0650 1FF9      ADC	R31,R25
    0651 8020      LDD	R2,Z+0
    0652 2433      CLR	R3
    0653 01FE      MOVW	R30,R28
    0654 5CE0      SUBI	R30,0xC0
    0655 4FFF      SBCI	R31,0xFF
    0656 8000      LDD	R0,Z+0
    0657 8011      LDD	R1,Z+1
    0658 1802      SUB	R0,R2
    0659 0813      SBC	R1,R3
    065A 01FE      MOVW	R30,R28
    065B 5CE0      SUBI	R30,0xC0
    065C 4FFF      SBCI	R31,0xFF
    065D 8211      STD	Z+1,R1
    065E 8200      STD	Z+0,R0
(0201) 			    length1+=InBuffer[length1+1];     //
    065F ADEE      LDD	R30,Y+62
    0660 ADFF      LDD	R31,Y+63
    0661 9631      ADIW	R30,1
    0662 0FE8      ADD	R30,R24
    0663 1FF9      ADC	R31,R25
    0664 8020      LDD	R2,Z+0
    0665 2433      CLR	R3
    0666 AC0E      LDD	R0,Y+62
    0667 AC1F      LDD	R1,Y+63
    0668 0C02      ADD	R0,R2
    0669 1C13      ADC	R1,R3
    066A AE1F      STD	Y+63,R1
    066B AE0E      STD	Y+62,R0
(0202) 			    j++;
    066C 94A3      INC	R10
    066D 01FE      MOVW	R30,R28
    066E 5CE0      SUBI	R30,0xC0
    066F 4FFF      SBCI	R31,0xFF
    0670 8000      LDD	R0,Z+0
    0671 8011      LDD	R1,Z+1
    0672 2000      TST	R0
    0673 F009      BEQ	0x0675
    0674 CFBD      RJMP	0x0632
    0675 2011      TST	R1
    0676 F009      BEQ	0x0678
    0677 CFBA      RJMP	0x0632
(0203) 			  }//end of while(length0)
(0204) 			  Move (InBuffer, OutBuffer, 8);
    0678 E088      LDI	R24,0x8
    0679 E090      LDI	R25,0
    067A 8399      STD	Y+1,R25
    067B 8388      STD	Y+0,R24
    067C EF26      LDI	R18,0xF6
    067D E035      LDI	R19,5
    067E EA07      LDI	R16,0xA7
    067F E01A      LDI	R17,0xA
    0680 DDDF      RCALL	_Move
(0205) 			  length1=8;
    0681 E088      LDI	R24,0x8
    0682 E090      LDI	R25,0
    0683 AF9F      STD	Y+63,R25
    0684 AF8E      STD	Y+62,R24
(0206) 			  OutBuffer[7]=4;
    0685 E084      LDI	R24,4
    0686 938005FD  STS	0x5FD,R24
(0207) 			  for(i=0;i<j;i++)
    0688 2766      CLR	R22
    0689 C067      RJMP	0x06F1
(0208) 			  {
(0209) 			  if(!((temp_buffer1[i]==LCP_OPT_MRU)
    068A 01CE      MOVW	R24,R28
    068B 968A      ADIW	R24,0x2A
    068C 2FE6      MOV	R30,R22
    068D 27FF      CLR	R31
    068E 0FE8      ADD	R30,R24
    068F 1FF9      ADC	R31,R25
    0690 8020      LDD	R2,Z+0
    0691 2433      CLR	R3
    0692 2D82      MOV	R24,R2
    0693 3081      CPI	R24,1
    0694 F409      BNE	0x0696
    0695 C05A      RJMP	0x06F0
    0696 3082      CPI	R24,2
    0697 F409      BNE	0x0699
    0698 C057      RJMP	0x06F0
    0699 3085      CPI	R24,5
    069A F409      BNE	0x069C
    069B C054      RJMP	0x06F0
(0210) 			  ||(temp_buffer1[i]==LCP_OPT_ASYNC_MAP)
(0211) 			  ||(temp_buffer1[i]==LCP_OPT_MAGIC)))
(0212) 			   {
(0213) 				Move (&InBuffer[temp_buffer2[i]],&OutBuffer[length1],InBuffer[temp_buffer2[i]+1]);
    069C E082      LDI	R24,2
    069D 9F86      MUL	R24,R22
    069E 01F0      MOVW	R30,R0
    069F 01CE      MOVW	R24,R28
    06A0 9602      ADIW	R24,2
    06A1 0FE8      ADD	R30,R24
    06A2 1FF9      ADC	R31,R25
    06A3 8020      LDD	R2,Z+0
    06A4 8031      LDD	R3,Z+1
    06A5 EA87      LDI	R24,0xA7
    06A6 E09A      LDI	R25,0xA
    06A7 01F1      MOVW	R30,R2
    06A8 9631      ADIW	R30,1
    06A9 0FE8      ADD	R30,R24
    06AA 1FF9      ADC	R31,R25
    06AB 8040      LDD	R4,Z+0
    06AC 2455      CLR	R5
    06AD 8259      STD	Y+1,R5
    06AE 8248      STD	Y+0,R4
    06AF EF86      LDI	R24,0xF6
    06B0 E095      LDI	R25,5
    06B1 AD2E      LDD	R18,Y+62
    06B2 AD3F      LDD	R19,Y+63
    06B3 0F28      ADD	R18,R24
    06B4 1F39      ADC	R19,R25
    06B5 EA87      LDI	R24,0xA7
    06B6 E09A      LDI	R25,0xA
    06B7 0181      MOVW	R16,R2
    06B8 0F08      ADD	R16,R24
    06B9 1F19      ADC	R17,R25
    06BA DDA5      RCALL	_Move
(0214) 			        OutBuffer[7]+=InBuffer[temp_buffer2[i]+1];
    06BB E082      LDI	R24,2
    06BC 9F86      MUL	R24,R22
    06BD 01F0      MOVW	R30,R0
    06BE 01CE      MOVW	R24,R28
    06BF 9602      ADIW	R24,2
    06C0 0FE8      ADD	R30,R24
    06C1 1FF9      ADC	R31,R25
    06C2 93AF      PUSH	R26
    06C3 93BF      PUSH	R27
    06C4 81A0      LDD	R26,Z+0
    06C5 81B1      LDD	R27,Z+1
    06C6 01FD      MOVW	R30,R26
    06C7 91BF      POP	R27
    06C8 91AF      POP	R26
    06C9 9631      ADIW	R30,1
    06CA EA87      LDI	R24,0xA7
    06CB E09A      LDI	R25,0xA
    06CC 0FE8      ADD	R30,R24
    06CD 1FF9      ADC	R31,R25
    06CE 8020      LDD	R2,Z+0
    06CF 903005FD  LDS	R3,0x5FD
    06D1 0C32      ADD	R3,R2
    06D2 923005FD  STS	0x5FD,R3
(0215) 				length1+=InBuffer[temp_buffer2[i]+1];    
    06D4 E082      LDI	R24,2
    06D5 9F86      MUL	R24,R22
    06D6 01F0      MOVW	R30,R0
    06D7 01CE      MOVW	R24,R28
    06D8 9602      ADIW	R24,2
    06D9 0FE8      ADD	R30,R24
    06DA 1FF9      ADC	R31,R25
    06DB 93AF      PUSH	R26
    06DC 93BF      PUSH	R27
    06DD 81A0      LDD	R26,Z+0
    06DE 81B1      LDD	R27,Z+1
    06DF 01FD      MOVW	R30,R26
    06E0 91BF      POP	R27
    06E1 91AF      POP	R26
    06E2 9631      ADIW	R30,1
    06E3 EA87      LDI	R24,0xA7
    06E4 E09A      LDI	R25,0xA
    06E5 0FE8      ADD	R30,R24
    06E6 1FF9      ADC	R31,R25
    06E7 8020      LDD	R2,Z+0
    06E8 2433      CLR	R3
    06E9 AC0E      LDD	R0,Y+62
    06EA AC1F      LDD	R1,Y+63
    06EB 0C02      ADD	R0,R2
    06EC 1C13      ADC	R1,R3
    06ED AE1F      STD	Y+63,R1
    06EE AE0E      STD	Y+62,R0
(0216) 			        rej = 1;
    06EF E041      LDI	R20,1
    06F0 9563      INC	R22
    06F1 156A      CP	R22,R10
    06F2 F408      BCC	0x06F4
    06F3 CF96      RJMP	0x068A
(0217) 			   }//end of if((temp_buffer1[i]!=0x01)||(temp_buffer1[i]!=0x02)||(temp_buffer1[i]!=0x05))
(0218) 			  }//end of for(i=0;i<j;i++)
(0219) 			   if(rej == 1)
    06F4 3041      CPI	R20,1
    06F5 F451      BNE	0x0700
(0220) 			   {
(0221) 			    OutBuffer [4] = LCP_CONFIG_REJECT;
    06F6 E084      LDI	R24,4
    06F7 938005FA  STS	0x5FA,R24
(0222) 			    ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);	
    06F9 912005FD  LDS	R18,0x5FD
    06FB 5F2A      SUBI	R18,0xFA
    06FC EF06      LDI	R16,0xF6
    06FD E015      LDI	R17,5
    06FE DDD4      RCALL	_ProcPPPSend
(0223) 				return;
    06FF C25F      RJMP	0x095F
(0224) 			   }//end of if(rej == 1)
(0225) 			   
(0226) 			   for(i=0;i<j;i++)
    0700 2766      CLR	R22
    0701 C139      RJMP	0x083B
(0227) 			   {
(0228) 				 if(temp_buffer1[i]==LCP_OPT_MRU)
    0702 01CE      MOVW	R24,R28
    0703 968A      ADIW	R24,0x2A
    0704 2FE6      MOV	R30,R22
    0705 27FF      CLR	R31
    0706 0FE8      ADD	R30,R24
    0707 1FF9      ADC	R31,R25
    0708 8180      LDD	R24,Z+0
    0709 3081      CPI	R24,1
    070A F009      BEQ	0x070C
    070B C08C      RJMP	0x0798
(0229) 				 {
(0230) 				  
(0231) 				  if(((((WORD)InBuffer[temp_buffer2[i]+2])<<8)+InBuffer [temp_buffer2[i]+3])>MRU)
    070C E082      LDI	R24,2
    070D 9F86      MUL	R24,R22
    070E 01F0      MOVW	R30,R0
    070F 01CE      MOVW	R24,R28
    0710 9602      ADIW	R24,2
    0711 0FE8      ADD	R30,R24
    0712 1FF9      ADC	R31,R25
    0713 8020      LDD	R2,Z+0
    0714 8031      LDD	R3,Z+1
    0715 EA87      LDI	R24,0xA7
    0716 E09A      LDI	R25,0xA
    0717 01F1      MOVW	R30,R2
    0718 9633      ADIW	R30,3
    0719 0FE8      ADD	R30,R24
    071A 1FF9      ADC	R31,R25
    071B 8040      LDD	R4,Z+0
    071C 01F1      MOVW	R30,R2
    071D 9632      ADIW	R30,2
    071E 0FE8      ADD	R30,R24
    071F 1FF9      ADC	R31,R25
    0720 8020      LDD	R2,Z+0
    0721 2C32      MOV	R3,R2
    0722 2C24      MOV	R2,R4
    0723 9040012F  LDS	R4,0x12F
    0725 90500130  LDS	R5,0x130
    0727 1442      CP	R4,R2
    0728 0453      CPC	R5,R3
    0729 F008      BCS	0x072B
    072A C06D      RJMP	0x0798
(0232) 				  {
(0233) 				  Move (&InBuffer[temp_buffer2[i]],&OutBuffer[length1],InBuffer[temp_buffer2[i]+1]);
    072B E082      LDI	R24,2
    072C 9F86      MUL	R24,R22
    072D 01F0      MOVW	R30,R0
    072E 01CE      MOVW	R24,R28
    072F 9602      ADIW	R24,2
    0730 0FE8      ADD	R30,R24
    0731 1FF9      ADC	R31,R25
    0732 8020      LDD	R2,Z+0
    0733 8031      LDD	R3,Z+1
    0734 EA87      LDI	R24,0xA7
    0735 E09A      LDI	R25,0xA
    0736 01F1      MOVW	R30,R2
    0737 9631      ADIW	R30,1
    0738 0FE8      ADD	R30,R24
    0739 1FF9      ADC	R31,R25
    073A 8040      LDD	R4,Z+0
    073B 2455      CLR	R5
    073C 8259      STD	Y+1,R5
    073D 8248      STD	Y+0,R4
    073E EF86      LDI	R24,0xF6
    073F E095      LDI	R25,5
    0740 AD2E      LDD	R18,Y+62
    0741 AD3F      LDD	R19,Y+63
    0742 0F28      ADD	R18,R24
    0743 1F39      ADC	R19,R25
    0744 EA87      LDI	R24,0xA7
    0745 E09A      LDI	R25,0xA
    0746 0181      MOVW	R16,R2
    0747 0F08      ADD	R16,R24
    0748 1F19      ADC	R17,R25
    0749 DD16      RCALL	_Move
(0234) 			          OutBuffer[7]+=InBuffer[temp_buffer2[i]+1];
    074A E082      LDI	R24,2
    074B 9F86      MUL	R24,R22
    074C 01F0      MOVW	R30,R0
    074D 01CE      MOVW	R24,R28
    074E 9602      ADIW	R24,2
    074F 0FE8      ADD	R30,R24
    0750 1FF9      ADC	R31,R25
    0751 93AF      PUSH	R26

⌨️ 快捷键说明

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