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

📄 ppppacket.s

📁 在串口上PPP拨号上网的源程序(实现PPP协议栈)
💻 S
字号:
	.module PPPpacket.c
	.area data(ram, con, rel)
_local_magic_num:
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile G:\sppp/PPP.h
	.dbsym s local_magic_num _local_magic_num A[4:4]c
_remote_magic_num:
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile G:\sppp/PPP.h
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile G:\sppp/PPP.h
	.dbsym s remote_magic_num _remote_magic_num A[4:4]c
	.area lit(rom, con, rel)
_fcstab:
	.word 0
	.word 4489
	.word 8978
	.word 12955
	.word 17956
	.word 22445
	.word 25910
	.word 29887
	.word 35912
	.word 40385
	.word 44890
	.word 48851
	.word 51820
	.word 56293
	.word 59774
	.word 63735
	.word 4225
	.word 264
	.word 13203
	.word 8730
	.word 22181
	.word 18220
	.word 30135
	.word 25662
	.word 40137
	.word 36160
	.word 49115
	.word 44626
	.word 56045
	.word 52068
	.word 63999
	.word 59510
	.word 8450
	.word 12427
	.word 528
	.word 5017
	.word 26406
	.word 30383
	.word 17460
	.word 21949
	.word 44362
	.word 48323
	.word 36440
	.word 40913
	.word 60270
	.word 64231
	.word 51324
	.word 55797
	.word 12675
	.word 8202
	.word 4753
	.word 792
	.word 30631
	.word 26158
	.word 21685
	.word 17724
	.word 48587
	.word 44098
	.word 40665
	.word 36688
	.word 64495
	.word 60006
	.word 55549
	.word 51572
	.word 16900
	.word 21389
	.word 24854
	.word 28831
	.word 1056
	.word 5545
	.word 10034
	.word 14011
	.word 52812
	.word 57285
	.word 60766
	.word 64727
	.word 34920
	.word 39393
	.word 43898
	.word 47859
	.word 21125
	.word 17164
	.word 29079
	.word 24606
	.word 5281
	.word 1320
	.word 14259
	.word 9786
	.word 57037
	.word 53060
	.word 64991
	.word 60502
	.word 39145
	.word 35168
	.word 48123
	.word 43634
	.word 25350
	.word 29327
	.word 16404
	.word 20893
	.word 9506
	.word 13483
	.word 1584
	.word 6073
	.word 61262
	.word 65223
	.word 52316
	.word 56789
	.word 43370
	.word 47331
	.word 35448
	.word 39921
	.word 29575
	.word 25102
	.word 20629
	.word 16668
	.word 13731
	.word 9258
	.word 5809
	.word 1848
	.word 65487
	.word 60998
	.word 56541
	.word 52564
	.word 47595
	.word 43106
	.word 39673
	.word 35696
	.word 33800
	.word 38273
	.word 42778
	.word 46739
	.word 49708
	.word 54181
	.word 57662
	.word 61623
	.word 2112
	.word 6601
	.word 11090
	.word 15067
	.word 20068
	.word 24557
	.word 28022
	.word 31999
	.word 38025
	.word 34048
	.word 47003
	.word 42514
	.word 53933
	.word 49956
	.word 61887
	.word 57398
	.word 6337
	.word 2376
	.word 15315
	.word 10842
	.word 24293
	.word 20332
	.word 32247
	.word 27774
	.word 42250
	.word 46211
	.word 34328
	.word 38801
	.word 58158
	.word 62119
	.word 49212
	.word 53685
	.word 10562
	.word 14539
	.word 2640
	.word 7129
	.word 28518
	.word 32495
	.word 19572
	.word 24061
	.word 46475
	.word 41986
	.word 38553
	.word 34576
	.word 62383
	.word 57894
	.word 53437
	.word 49460
	.word 14787
	.word 10314
	.word 6865
	.word 2904
	.word 32743
	.word 28270
	.word 23797
	.word 19836
	.word 50700
	.word 55173
	.word 58654
	.word 62615
	.word 32808
	.word 37281
	.word 41786
	.word 45747
	.word 19012
	.word 23501
	.word 26966
	.word 30943
	.word 3168
	.word 7657
	.word 12146
	.word 16123
	.word 54925
	.word 50948
	.word 62879
	.word 58390
	.word 37033
	.word 33056
	.word 46011
	.word 41522
	.word 23237
	.word 19276
	.word 31191
	.word 26718
	.word 7393
	.word 3432
	.word 16371
	.word 11898
	.word 59150
	.word 63111
	.word 50204
	.word 54677
	.word 41258
	.word 45219
	.word 33336
	.word 37809
	.word 27462
	.word 31439
	.word 18516
	.word 23005
	.word 11618
	.word 15595
	.word 3696
	.word 8185
	.word 63375
	.word 58886
	.word 54429
	.word 50452
	.word 45483
	.word 40994
	.word 37561
	.word 33584
	.word 31687
	.word 27214
	.word 22741
	.word 18780
	.word 15843
	.word 11370
	.word 7921
	.word 3960
	.dbsym s fcstab _fcstab A[512:256]ks
	.area text(rom, con, rel)
	.dbfile G:\sppp/PPP.h
	.dbfile G:\sppp\PPPpacket.c
	.dbfunc e LCPREQPacket _LCPREQPacket fV
;           MRUp -> y+0
;            MRU -> R20,R21
	.even
_LCPREQPacket::
	xcall push_gset1
	movw R20,R16
	sbiw R28,2
	.dbline -1
	.dbline 11
; #include "PPP.h"
; #include "UART.h"
; extern BYTE InBuffer [PPP_BUFFER_SIZE + 1];	//PPP数据输入缓冲
; extern BYTE OutBuffer[PPP_BUFFER_SIZE + 1];	//PPP数据输出缓冲
; /////////////////////////////////////////////////////////////
; /*
; LCP的协商最大传送单元
; */
; /////////////////////////////////////////////////////////////
; void LCPREQPacket (WORD MRU)                  
; {
	.dbline 13
; 	BYTE MRUp[2];
; 	MRUp[0]=MRU>>8;
	movw R2,R20
	mov R2,R3
	clr R3
	std y+0,R2
	.dbline 14
; 	MRUp[1]=MRU;
	std y+1,R20
	.dbline 15
;     OutBuffer [0] = PPP_ADD;                //地址域
	ldi R24,255
	sts _OutBuffer,R24
	.dbline 16
;     OutBuffer [1] = PPP_COMTROL;            //控制域
	ldi R24,3
	sts _OutBuffer+1,R24
	.dbline 17
;     OutBuffer [2] = 0xC0;                   //协议域
	ldi R24,192
	sts _OutBuffer+2,R24
	.dbline 18
;     OutBuffer [3] = 0x21;
	ldi R24,33
	sts _OutBuffer+3,R24
	.dbline 19
; 	OutBuffer [4] = LCP_CONFIG_REQUEST;     //代码域
	ldi R24,1
	sts _OutBuffer+4,R24
	.dbline 20
;     OutBuffer [5] = 0x01;                   //标识域
	sts _OutBuffer+5,R24
	.dbline 21
;     OutBuffer [6] = 0x00;                   //长度
	clr R2
	sts _OutBuffer+6,R2
	.dbline 22
;     OutBuffer [7] = 0x14;                   
	ldi R24,20
	sts _OutBuffer+7,R24
	.dbline 23
;     OutBuffer [8] = LCP_OPT_MRU;            //类型
	ldi R24,1
	sts _OutBuffer+8,R24
	.dbline 24
;     OutBuffer [9] = 0x04;                   //长度
	ldi R24,4
	sts _OutBuffer+9,R24
	.dbline 25
;     OutBuffer [10] = MRUp[0];               //数据
	ldd R2,y+0
	sts _OutBuffer+10,R2
	.dbline 26
;     OutBuffer [11] = MRUp[1];   
	mov R2,R20
	sts _OutBuffer+11,R2
	.dbline 27
; 	OutBuffer [12] = LCP_OPT_ASYNC_MAP;      //类型
	ldi R24,2
	sts _OutBuffer+12,R24
	.dbline 28
;     OutBuffer [13] = 0x06;                   //长度
	ldi R24,6
	sts _OutBuffer+13,R24
	.dbline 29
;     OutBuffer [14] = 0x00;     //数据
	clr R2
	sts _OutBuffer+14,R2
	.dbline 30
;     OutBuffer [15] = 0x00; 
	sts _OutBuffer+15,R2
	.dbline 31
;     OutBuffer [16] = 0x00;
	sts _OutBuffer+16,R2
	.dbline 32
;     OutBuffer [17] = 0x00;
	sts _OutBuffer+17,R2
	.dbline 33
;     OutBuffer [18]  = LCP_OPT_MAGIC;          //类型
	ldi R24,5
	sts _OutBuffer+18,R24
	.dbline 34
;     OutBuffer [19]  = 0x06;                   //长度
	ldi R24,6
	sts _OutBuffer+19,R24
	.dbline 35
;     OutBuffer [20] = local_magic_num[0];    //数据
	lds R2,_local_magic_num
	sts _OutBuffer+20,R2
	.dbline 36
;     OutBuffer [21] = local_magic_num[1]; 
	lds R2,_local_magic_num+1
	sts _OutBuffer+21,R2
	.dbline 37
;     OutBuffer [22] = local_magic_num[2];
	lds R2,_local_magic_num+2
	sts _OutBuffer+22,R2
	.dbline 38
;     OutBuffer [23] = local_magic_num[3];
	lds R2,_local_magic_num+3
	sts _OutBuffer+23,R2
	.dbline 39
;     ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);
	lds R18,_OutBuffer+7
	subi R18,250    ; addi 6
	ldi R16,<_OutBuffer
	ldi R17,>_OutBuffer
	xcall _ProcPPPSend
	.dbline -2
	.dbline 40
; }
L1:
	adiw R28,2
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l MRUp 0 A[2:2]c
	.dbsym r MRU 20 i
	.dbend
	.dbfunc e MagicNumPacket _MagicNumPacket fV
	.even
_MagicNumPacket::
	.dbline -1
	.dbline 47
; /////////////////////////////////////////////////////////////
; /*
; LCP的协商魔术字
; */
; /////////////////////////////////////////////////////////////
; void MagicNumPacket (void) 
; {
	.dbline 48
;     OutBuffer [0] = PPP_ADD;                //地址域
	ldi R24,255
	sts _OutBuffer,R24
	.dbline 49
;     OutBuffer [1] = PPP_COMTROL;            //控制域
	ldi R24,3
	sts _OutBuffer+1,R24
	.dbline 50
;     OutBuffer [2] = 0xC0;                   //协议域
	ldi R24,192
	sts _OutBuffer+2,R24
	.dbline 51
;     OutBuffer [3] = 0x21;
	ldi R24,33
	sts _OutBuffer+3,R24
	.dbline 52
;     OutBuffer [4] = LCP_CONFIG_REQUEST;     //代码域
	ldi R24,1
	sts _OutBuffer+4,R24
	.dbline 53
;     OutBuffer [5] = 0x01;                   //标识域
	sts _OutBuffer+5,R24
	.dbline 54
;     OutBuffer [6] = 0x00;                   //长度
	clr R2
	sts _OutBuffer+6,R2
	.dbline 55
;     OutBuffer [7] = 0x0A;                   
	ldi R24,10
	sts _OutBuffer+7,R24
	.dbline 56
;     OutBuffer [8] = LCP_OPT_MAGIC;          //类型
	ldi R24,5
	sts _OutBuffer+8,R24
	.dbline 57
;     OutBuffer [9] = 0x06;                   //长度
	ldi R24,6
	sts _OutBuffer+9,R24
	.dbline 58
;     OutBuffer [10] = local_magic_num[0];    //数据
	lds R2,_local_magic_num
	sts _OutBuffer+10,R2
	.dbline 59
;     OutBuffer [11] = local_magic_num[1]; 
	lds R2,_local_magic_num+1
	sts _OutBuffer+11,R2
	.dbline 60
;     OutBuffer [12] = local_magic_num[2];
	lds R2,_local_magic_num+2
	sts _OutBuffer+12,R2
	.dbline 61
;     OutBuffer [13] = local_magic_num[3];
	lds R2,_local_magic_num+3
	sts _OutBuffer+13,R2
	.dbline 62
;     ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);
	lds R18,_OutBuffer+7
	subi R18,250    ; addi 6
	ldi R16,<_OutBuffer
	ldi R17,>_OutBuffer
	.dbline -2
	.dbline 63
; }
L31:
	.dbline 0 ; func end
	xjmp _ProcPPPSend
	.dbend
	.dbfunc e RejectProtocol _RejectProtocol fV
;       InBuffer -> R20,R21
	.even
_RejectProtocol::
	xcall push_gset1
	movw R20,R16
	sbiw R28,2
	.dbline -1
	.dbline 70
; /////////////////////////////////////////////////////////////
; /*
; LCP的协议拒绝
; */
; /////////////////////////////////////////////////////////////
; void RejectProtocol (BYTE *InBuffer) 
; {
	.dbline 71
; 	OutBuffer [0] = PPP_ADD;                   //地址域
	ldi R24,255
	sts _OutBuffer,R24
	.dbline 72
; 	OutBuffer [1] = PPP_COMTROL;               //控制域
	ldi R24,3
	sts _OutBuffer+1,R24
	.dbline 73
; 	OutBuffer [2] = 0xC0;
	ldi R24,192
	sts _OutBuffer+2,R24
	.dbline 74
; 	OutBuffer [3] = 0x21;
	ldi R24,33
	sts _OutBuffer+3,R24
	.dbline 75
; 	OutBuffer [4] = LCP_PROTOCOL_REJECT;       //代码域
	ldi R24,8
	sts _OutBuffer+4,R24
	.dbline 76
; 	OutBuffer [5] = 20;                        //标识域
	ldi R24,20
	sts _OutBuffer+5,R24
	.dbline 77
; 	OutBuffer [6] = 0;                         //长度
	clr R2
	sts _OutBuffer+6,R2
	.dbline 78
; 	OutBuffer [7] = InBuffer[7] + 6;
	movw R30,R20
	ldd R24,z+7
	subi R24,250    ; addi 6
	sts _OutBuffer+7,R24
	.dbline 79
; 	Move (&InBuffer[2], &OutBuffer[8], InBuffer [7] + 2);
	ldd R24,z+7
	clr R25
	adiw R24,2
	std y+1,R25
	std y+0,R24
	ldi R18,<_OutBuffer+8
	ldi R19,>_OutBuffer+8
	movw R16,R30
	subi R16,254  ; offset = 2
	sbci R17,255
	xcall _Move
	.dbline 80
; 	ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);
	lds R18,_OutBuffer+7
	subi R18,250    ; addi 6
	ldi R16,<_OutBuffer
	ldi R17,>_OutBuffer
	xcall _ProcPPPSend
	.dbline -2
	.dbline 81
; }
L49:
	adiw R28,2
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r InBuffer 20 pc
	.dbend
	.dbfunc e IPAssignPacket _IPAssignPacket fV
	.even
_IPAssignPacket::
	.dbline -1
	.dbline 88
; /////////////////////////////////////////////////////////////
; /*
; IPCP的IP地址分配请求
; */
; /////////////////////////////////////////////////////////////
; void IPAssignPacket (void) 
; {
	.dbline 89
;     OutBuffer [0] = PPP_ADD;                //地址域
	ldi R24,255
	sts _OutBuffer,R24
	.dbline 90
;     OutBuffer [1] = PPP_COMTROL;            //控制域
	ldi R24,3
	sts _OutBuffer+1,R24
	.dbline 91
;     OutBuffer [2] = 0x80;                   //协议域
	ldi R24,128
	sts _OutBuffer+2,R24
	.dbline 92
;     OutBuffer [3] = 0x21;
	ldi R24,33
	sts _OutBuffer+3,R24
	.dbline 93
;     OutBuffer [4] = IPCP_CONFIG_REQUEST;    //代码域
	ldi R24,1
	sts _OutBuffer+4,R24
	.dbline 94
;     OutBuffer [5] = 0x01;                   //标识域
	sts _OutBuffer+5,R24
	.dbline 95
;     OutBuffer [6] = 0x00;               
	clr R2
	sts _OutBuffer+6,R2
	.dbline 96
;     OutBuffer [7] = 0x0A;                   //长度
	ldi R24,10
	sts _OutBuffer+7,R24
	.dbline 97
;     OutBuffer [8] = 0x03;                   //类型
	ldi R24,3
	sts _OutBuffer+8,R24
	.dbline 98
;     OutBuffer [9] = 0x06;                   //长度
	ldi R24,6
	sts _OutBuffer+9,R24
	.dbline 99
;     OutBuffer [10] = 0x00;                  //数据
	sts _OutBuffer+10,R2
	.dbline 100
;     OutBuffer [11] = 0x00; 
	sts _OutBuffer+11,R2
	.dbline 101
;     OutBuffer [12] = 0x00;
	sts _OutBuffer+12,R2
	.dbline 102
;     OutBuffer [13] = 0x00;
	sts _OutBuffer+13,R2
	.dbline 103
;     ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);
	lds R18,_OutBuffer+7
	subi R18,250    ; addi 6
	ldi R16,<_OutBuffer
	ldi R17,>_OutBuffer
	.dbline -2
	.dbline 104
; }
L59:
	.dbline 0 ; func end
	xjmp _ProcPPPSend
	.dbend

⌨️ 快捷键说明

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