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

📄 ppp.lst

📁 在串口上PPP拨号上网的源程序(实现PPP协议栈)
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    0364 EFCF      LDI	R28,0xFF
    0365 E1D0      LDI	R29,0x10
    0366 BFCD      OUT	0x3D,R28
    0367 BFDE      OUT	0x3E,R29
    0368 51C0      SUBI	R28,0x10
    0369 40D0      SBCI	R29,0
    036A EA0A      LDI	R16,0xAA
    036B 8308      STD	Y+0,R16
    036C 2400      CLR	R0
    036D E3EB      LDI	R30,0x3B
    036E E0F1      LDI	R31,1
    036F E01F      LDI	R17,0xF
    0370 35E8      CPI	R30,0x58
    0371 07F1      CPC	R31,R17
    0372 F011      BEQ	0x0375
    0373 9201      ST	R0,Z+
    0374 CFFB      RJMP	0x0370
    0375 8300      STD	Z+0,R16
    0376 E8EC      LDI	R30,0x8C
    0377 E0F6      LDI	R31,6
    0378 E0A0      LDI	R26,0
    0379 E0B1      LDI	R27,1
    037A E016      LDI	R17,6
    037B 3CE7      CPI	R30,0xC7
    037C 07F1      CPC	R31,R17
    037D F021      BEQ	0x0382
    037E 95C8      LPM
    037F 9631      ADIW	R30,1
    0380 920D      ST	R0,X+
    0381 CFF9      RJMP	0x037B
    0382 940E03BB  CALL	_main
_exit:
    0384 CFFF      RJMP	_exit
_uart_inter:
    0385 940E0C24  CALL	push_lset
FILE: G:\sppp\main.c
(0001) #include <iom128v.h>
(0002) #include <stdlib.h>
(0003) #include <string.h>
(0004) #include "PPP.h"
(0005) #include "UART.h"
(0006) #define xtal 7372800
(0007) 
(0008) void modem (void);
(0009) void delay_1ms(void);
(0010) void delay_ms(unsigned int n );
(0011) 
(0012) BYTE UART_BUFFER[PPP_BUFFER_SIZE+3];
(0013) extern BYTE *ptrBUFFER=UART_BUFFER;
(0014) static WORD MRU=PPP_BUFFER_SIZE;
(0015) extern BYTE PPPStatus;
(0016) extern UART_ptr;
(0017) static WORD j=0;
(0018) #pragma interrupt_handler uart_inter:31
(0019) void uart_inter(void)
(0020) {
(0021) static BYTE i=0;
(0022) UCSR1B&=~(1<<RXCIE1);
    0387 9180009A  LDS	R24,0x9A
    0389 778F      ANDI	R24,0x7F
    038A 9380009A  STS	0x9A,R24
(0023)   i=getchar();
    038C 940E0B96  CALL	_getchar
    038E 9300010E  STS	0x10E,R16
(0024)   	if(j>(PPP_BUFFER_SIZE+3)) 
    0390 EB83      LDI	R24,0xB3
    0391 E094      LDI	R25,4
    0392 9020010C  LDS	R2,0x10C
    0394 9030010D  LDS	R3,0x10D
    0396 1582      CP	R24,R2
    0397 0593      CPC	R25,R3
    0398 F430      BCC	0x039F
(0025) 	 {
(0026) 	 j=0;
    0399 2422      CLR	R2
    039A 2433      CLR	R3
    039B 9230010D  STS	0x10D,R3
    039D 9220010C  STS	0x10C,R2
(0027) 	 }
(0028) 		 UART_BUFFER[j]=i;
    039F E38B      LDI	R24,0x3B
    03A0 E091      LDI	R25,1
    03A1 91E0010C  LDS	R30,0x10C
    03A3 91F0010D  LDS	R31,0x10D
    03A5 0FE8      ADD	R30,R24
    03A6 1FF9      ADC	R31,R25
    03A7 9020010E  LDS	R2,0x10E
    03A9 8220      STD	Z+0,R2
(0029) 		 j++;
    03AA 9180010C  LDS	R24,0x10C
    03AC 9190010D  LDS	R25,0x10D
    03AE 9601      ADIW	R24,1
    03AF 9390010D  STS	0x10D,R25
    03B1 9380010C  STS	0x10C,R24
(0030) UCSR1B|=(1<<RXCIE1);
    03B3 9180009A  LDS	R24,0x9A
    03B5 6880      ORI	R24,0x80
    03B6 9380009A  STS	0x9A,R24
(0031) }
    03B8 940E0C3B  CALL	pop_lset
    03BA 9518      RETI
(0032) 
(0033) void main (void)
(0034) {
(0035) WORD i;
(0036) uart_init();
_main:
  i                    --> R20
    03BB 940E0BC0  CALL	_uart_init
(0037) PPPInit();
    03BD 940E0428  CALL	_PPPInit
(0038) modem ();
    03BF D02E      RCALL	_modem
(0039) for(i=0;i<(PPP_BUFFER_SIZE+3);i++)
    03C0 2744      CLR	R20
    03C1 2755      CLR	R21
    03C2 C009      RJMP	0x03CC
(0040) {
(0041) UART_BUFFER[i]='\0';
    03C3 E38B      LDI	R24,0x3B
    03C4 E091      LDI	R25,1
    03C5 01FA      MOVW	R30,R20
    03C6 0FE8      ADD	R30,R24
    03C7 1FF9      ADC	R31,R25
    03C8 2422      CLR	R2
    03C9 8220      STD	Z+0,R2
    03CA 5F4F      SUBI	R20,0xFF
    03CB 4F5F      SBCI	R21,0xFF
    03CC 3B43      CPI	R20,0xB3
    03CD E0E4      LDI	R30,4
    03CE 075E      CPC	R21,R30
    03CF F398      BCS	0x03C3
(0042) }
(0043) j=0;
    03D0 2422      CLR	R2
    03D1 2433      CLR	R3
    03D2 9230010D  STS	0x10D,R3
    03D4 9220010C  STS	0x10C,R2
(0044) LCPREQPacket(MRU);
    03D6 9100010A  LDS	R16,0x10A
    03D8 9110010B  LDS	R17,0x10B
    03DA 940E0AA1  CALL	_LCPREQPacket
    03DC C00F      RJMP	0x03EC
(0045) 
(0046) while(1)
(0047) {
(0048) if(UART_BUFFER[UART_ptr]!='\0')
    03DD E38B      LDI	R24,0x3B
    03DE E091      LDI	R25,1
    03DF 91E00131  LDS	R30,0x131
    03E1 91F00132  LDS	R31,0x132
    03E3 0FE8      ADD	R30,R24
    03E4 1FF9      ADC	R31,R25
    03E5 8020      LDD	R2,Z+0
    03E6 2022      TST	R2
    03E7 F011      BEQ	0x03EA
(0049) {
(0050) ProcPPPReceive ();
    03E8 940E0532  CALL	_ProcPPPReceive
(0051) }
(0052) PPPEntry();
    03EA 940E042E  CALL	_PPPEntry
    03EC CFF0      RJMP	0x03DD
(0053) }
(0054) }
    03ED 9508      RET
_modem:
  k                    --> R20
    03EE 940E0BFD  CALL	push_gset1
(0055) 
(0056) 
(0057) 
(0058) void modem (void)
(0059) {
(0060)  BYTE k=1;
    03F0 E041      LDI	R20,1
    03F1 C011      RJMP	0x0403
(0061)  while(k)
(0062)  {
(0063)   putstr("CLIENT");
    03F2 E10C      LDI	R16,0x1C
    03F3 E011      LDI	R17,1
    03F4 940E0BB0  CALL	_putstr
(0064)   delay_ms(100);
    03F6 E604      LDI	R16,0x64
    03F7 E010      LDI	R17,0
    03F8 D020      RCALL	_delay_ms
(0065)   if(strstr(UART_BUFFER,"CLIENTSERVER") != NULL)
    03F9 E02F      LDI	R18,0xF
    03FA E031      LDI	R19,1
    03FB E30B      LDI	R16,0x3B
    03FC E011      LDI	R17,1
    03FD 940E0BCE  CALL	_strstr
    03FF 3000      CPI	R16,0
    0400 0701      CPC	R16,R17
    0401 F009      BEQ	0x0403
(0066)   {
(0067)    k=0;
    0402 2744      CLR	R20
    0403 2344      TST	R20
    0404 F769      BNE	0x03F2
(0068)   }
(0069)  } 
(0070) }
    0405 940E0C00  CALL	pop_gset1
    0407 9508      RET
_delay_1ms:
  i                    --> R16
    0408 940E0C14  CALL	push_gset2
(0071) 
(0072) void delay_1ms(void)
(0073) { unsigned int i;
(0074)  for(i=1;i<(unsigned int)(xtal*143-2);i++);
    040A E001      LDI	R16,1
    040B E010      LDI	R17,0
    040C C002      RJMP	0x040F
    040D 5F0F      SUBI	R16,0xFF
    040E 4F1F      SBCI	R17,0xFF
    040F EF4E      LDI	R20,0xFE
    0410 E75F      LDI	R21,0x7F
    0411 ED67      LDI	R22,0xD7
    0412 E37E      LDI	R23,0x3E
    0413 1704      CP	R16,R20
    0414 0715      CPC	R17,R21
    0415 F3B8      BCS	0x040D
(0075) }
    0416 940E0BF4  CALL	pop_gset2
    0418 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    0419 940E0C14  CALL	push_gset2
    041B 01B8      MOVW	R22,R16
(0076) void delay_ms(unsigned int n )
(0077) {
(0078)  unsigned int i=0;
    041C 2744      CLR	R20
    041D 2755      CLR	R21
    041E C003      RJMP	0x0422
(0079)    while(i<n)
(0080)    {delay_1ms();
    041F DFE8      RCALL	_delay_1ms
(0081)     i++;
    0420 5F4F      SUBI	R20,0xFF
    0421 4F5F      SBCI	R21,0xFF
    0422 1746      CP	R20,R22
    0423 0757      CPC	R21,R23
    0424 F3D0      BCS	0x041F
(0082)    }
(0083) }
    0425 940E0BF4  CALL	pop_gset2
    0427 9508      RET
FILE: G:\sppp\PPP.C
(0001) #include "PPP.h"
(0002) #include "UART.h"
(0003) 
(0004) BYTE PPPStatus = 0;
(0005) BYTE InBuffer [PPP_BUFFER_SIZE + 1];	//PPP数据输入缓冲
(0006) BYTE OutBuffer[PPP_BUFFER_SIZE + 1];	//PPP数据输出缓冲
(0007) static  BYTE 	FrameSize = 0;          
(0008) static  BYTE    *PPP_Packet = InBuffer;
(0009) extern  WORD MRU=PPP_BUFFER_SIZE;
(0010) BYTE local_IPAddress[4];   //本地IP
(0011) BYTE remote_IPAddress[4];  //远端IP
(0012) extern BYTE UART_BUFFER[PPP_BUFFER_SIZE+3];
(0013) WORD UART_ptr=0;
(0014) 
(0015) 
(0016) 
(0017) void PPPInit (void) {
(0018) 	PPPStatus |= ReSync;
_PPPInit:
    0428 9180012B  LDS	R24,0x12B
    042A 6084      ORI	R24,4
    042B 9380012B  STS	0x12B,R24
(0019) }
    042D 9508      RET
_PPPEntry:
    042E 940E0BFD  CALL	push_gset1
(0020) 
(0021) void PPPEntry (void) {    
(0022) 		if (PPPStatus & IsFrame) {                             //判断是否收到一个完整的PPP包
    0430 9020012B  LDS	R2,0x12B
    0432 FE23      SBRS	R2,3
    0433 C029      RJMP	0x045D
(0023) 		switch (((((WORD)InBuffer [2])<<8)+InBuffer [3])) {                    //判断协议域
    0434 90200AAA  LDS	R2,_InBuffer+3
    0436 90300AA9  LDS	R3,_InBuffer+2
    0438 2D53      MOV	R21,R3
    0439 2D42      MOV	R20,R2
    043A 3241      CPI	R20,0x21
    043B ECE0      LDI	R30,0xC0
    043C 075E      CPC	R21,R30
    043D F079      BEQ	0x044D
    043E E281      LDI	R24,0x21
    043F EC90      LDI	R25,0xC0
    0440 1784      CP	R24,R20
    0441 0795      CPC	R25,R21
    0442 F02C      BLT	0x0448
    0443 3241      CPI	R20,0x21
    0444 E8E0      LDI	R30,0x80
    0445 075E      CPC	R21,R30
    0446 F041      BEQ	0x044F
    0447 C009      RJMP	0x0451
    0448 3241      CPI	R20,0x21
    0449 E0E0      LDI	R30,0
    044A 075E      CPC	R21,R30
    044B F049      BEQ	0x0455
    044C C004      RJMP	0x0451
(0024) 
(0025) 				case PPPID_LCP:	                       //是LCP的包
(0026) 					HandleLCPOptions ();
    044D D18B      RCALL	_HandleLCPOptions
(0027) 				break;
    044E C006      RJMP	0x0455
(0028) 
(0029) 				case PPPID_IPCP:  			//是IPCP的包
(0030) 					HandleIPCPOptions ();
    044F D514      RCALL	_HandleIPCPOptions
(0031) 				break;
    0450 C004      RJMP	0x0455
(0032) 				
(0033) 				case PPPID_IP:			        //是IP的包
(0034) 				                                        //NNOS接口
(0035) 				break;
(0036) 				
(0037) 				default:
(0038) 					  RejectProtocol (InBuffer);	//拒绝协议 
    0451 EA07      LDI	R16,0xA7
    0452 E01A      LDI	R17,0xA
    0453 940E0B31  CALL	_RejectProtocol
(0039) 				break;
(0040) 			};
(0041) 			
(0042) 			PPPStatus &= ~IsFrame;
    0455 9180012B  LDS	R24,0x12B
    0457 7F87      ANDI	R24,0xF7
    0458 9380012B  STS	0x12B,R24
(0043) 			PPPStatus |= ReSync;
    045A 6084      ORI	R24,4
    045B 9380012B  STS	0x12B,R24
(0044) 		}
(0045) 
(0046) }
    045D 940E0C00  CALL	pop_gset1
    045F 9508      RET
_Move:
  numBYTEs             --> R20
  dest                 --> R18
  src                  --> R16
    0460 940E0BFD  CALL	push_gset1
    0462 814A      LDD	R20,Y+2
    0463 815B      LDD	R21,Y+3
(0047) void Move (BYTE *src, BYTE *dest, register numBYTEs) {
(0048) 	if ( numBYTEs <= 0 ) return;
    0464 2422      CLR	R2
    0465 2433      CLR	R3
    0466 1624      CP	R2,R20
    0467 0635      CPC	R3,R21
    0468 F00C      BLT	0x046A
    0469 C029      RJMP	0x0493
(0049) 	if ( src < dest ) {
    046A 1702      CP	R16,R18
    046B 0713      CPC	R17,R19
    046C F4C0      BCC	0x0485
(0050) 		src += numBYTEs;
    046D 0F04      ADD	R16,R20
    046E 1F15      ADC	R17,R21
(0051) 		dest += numBYTEs;
    046F 0F24      ADD	R18,R20
    0470 1F35      ADC	R19,R21
(0052) 		do {
(0053) 		*--dest = *--src;
    0471 01C9      MOVW	R24,R18
    0472 9701      SBIW	R24,1
    0473 011C      MOVW	R2,R24
    0474 019C      MOVW	R18,R24
    0475 01C8      MOVW	R24,R16
    0476 9701      SBIW	R24,1
    0477 018C      MOVW	R16,R24
    0478 01FC      MOVW	R30,R24
    0479 8040      LDD	R4,Z+0
    047A 01F1      MOVW	R30,R2
    047B 8240      STD	Z+0,R4
(0054) 		} while ( --numBYTEs > 0 );
    047C 01CA      MOVW	R24,R20
    047D 9701      SBIW	R24,1
    047E 01AC      MOVW	R20,R24
    047F 2444      CLR	R4
    0480 2455      CLR	R5
    0481 1648      CP	R4,R24
    0482 0659      CPC	R5,R25
    0483 F36C      BLT	0x0471
(0055) 	} else
    0484 C00E      RJMP	0x0493
(0056) 		do {
(0057) 		     *dest++ = *src++;
    0485 01F8      MOVW	R30,R16
    0486 01D9      MOVW	R26,R18
    0487 9001      LD	R0,Z+
    0488 018F      MOVW	R16,R30
    0489 920D      ST	R0,X+
    048A 019D      MOVW	R18,R26
(0058) 		} while ( --numBYTEs > 0 );
    048B 01CA      MOVW	R24,R20
    048C 9701      SBIW	R24,1
    048D 01AC      MOVW	R20,R24
    048E 2444      CLR	R4
    048F 2455      CLR	R5
    0490 1648      CP	R4,R24
    0491 0659      CPC	R5,R25
    0492 F394      BLT	0x0485

⌨️ 快捷键说明

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