📄 ppp.lst
字号:
__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 + -