📄 main.lst
字号:
34 =1 uint DestMacId[3]; /*目的网卡地址*/
35 =1 uint SourceMacId[3]; /*源网卡地址*/
36 =1 uint NextProtocal; /*下一层协议 */
37 =1 uchar packet[1518]; /*包的内容*/
38 =1 } ;
39 =1
40 =1 /*******************IP包,仅当IHL=5时用,当不=5时作转换*********/
41 =1 struct ip { uint EtherHead[9]; /*以太网包头*/
42 =1 uchar VerandIphLen; /*版本与头长度*/
43 =1 uchar ServerType; /*服务类型*/
44 =1 uint TotalLen; /*总长度*/
45 =1 uint FrameIndex; /*IP帧序号*/
46 =1 uint Segment; /*分段标志*/
47 =1 uchar ttl; /*生存时间*/
48 =1 uchar NextProtocal; /*下一层协议*/
49 =1 uint Crc; /*校验和*/
50 =1 uint SourceIp[2]; /*源IP*/
51 =1 uint DestId[2]; /*目的IP*/
52 =1 uchar packet[1498]; /*IP包的内容*/
53 =1 };
54 =1 struct IpPacket { uint EtherHead[9]; /*以太网包头*/
55 =1 uint IpPacket[720]; /*IP包的内容*/
56 =1 };
57 =1 struct arp { uint EtherHead[9]; /*以太网头*//* arp报文的内容总长28字节*/
58 =1
59 =1 uint HardwareType; /*以太网为0x0001*/
60 =1 uint ProtocalType; /*ip 为0X0800*/
61 =1 uchar HardwareLen; /*=0X06*/
62 =1 uchar ProtocalLen; /*=0X04*/
63 =1 uint Operation; /*操作 0X0001为请求 0X0002为应答 */
64 =1 /*0X0003为反向地址请求 0X0004为反向地址应答*/
65 =1 uint SourceMacId[3]; /*源网卡地址*/
66 =1 uint SourceIp[2]; /*源IP地址*/
C51 COMPILER V7.01 MAIN 03/21/2003 09:31:06 PAGE 13
67 =1 uint DestMacId[3]; /*目的网卡地址*/
68 =1 uint DestId[2]; /*目的IP地址*/
69 =1 };
70 =1
71 =1 struct icmp {/*包含在IP包中,是IP的上层为0X01的应用*/
72 =1 uint EtherHead[9]; /*以太网头*/
73 =1 uint IpHead[10]; /*IP头*/
74 =1 uchar type; /*0X08 PING请求 0X00 PING应答*/
75 =1 uchar option; /*0X00 PING*/
76 =1 uint Crc;
77 =1 uint id;
78 =1 uint seq;
79 =1 uchar icmpdata[1478];
80 =1 };
81 =1
82 =1 struct tcp { uint EtherHead[9];
83 =1 uint IpHead[10];
84 =1 uint SourcePort; /*源端口*/
85 =1 uint DestPort; /*目的端口*/
86 =1 ulong SeqNum; /*顺序号*/
87 =1 ulong AckNum; /*确认号*/
88 =1 uchar offset; /*数据偏移量*/
89 =1 uchar control; /*连接控制*/
90 =1 uint window; /*流控*/
91 =1 uint Crc; /*校验和 ,包括伪头部,TCP头部,数据*/
92 =1 uint urg; /*紧急指针*/
93 =1 uchar tcpdata[1478]; /*TCP数据*/
94 =1 };
95 =1
96 =1 struct udp { uint EtherHead[9];
97 =1 uint IpHead[10];
98 =1 uint SourcePort; /*源端口*/
99 =1 uint DestPort; /*目的端口*/
100 =1 uint length;
101 =1 uint Crc; /*校验和,包括伪头部,udp头部,数据*/
102 =1 uchar udpdata[1478]; /*udp数据*/
103 =1 };
104 =1
105 =1 /*所有协议的共用体*/
106 =1 union Netcard {struct {uchar bytebuf[1536];}bytes;
107 =1 struct {uint wordbuf[768];}words;
108 =1 struct ethernet EtherFrame;
109 =1 struct retransmit ResendFrame;
110 =1 struct arp ArpFrame;
111 =1 struct icmp IcmpFrame;
112 =1 struct tcp TcpFrame;
113 =1 struct ip IpFrame;
114 =1 struct udp UdpFrame;
115 =1 struct IpPacket IpPacket;
116 =1 };
117 =1
118 =1 struct Socket_Type{
119 =1 uint My_Port; //本机端口
120 =1 uint Dest_Port; //对方端口
121 =1 uint Dest_Ip[2]; //对方ip
122 =1 uint Dest_Mac_Id[3]; //对方的以太网地址
123 =1 ulong IRS; //初始化顺序号
124 =1 ulong ISS; //我的初始化序列号
125 =1 ulong Rcv_Next; //对方的顺序号
126 =1 ulong Send_Next; //我的已经发送顺序号
127 =1 ulong Sent_UnAck; //我的还没有确认顺序号
128 =1 //unsigned long dest_ack_number;
C51 COMPILER V7.01 MAIN 03/21/2003 09:31:06 PAGE 14
129 =1 uint Rcv_Window; //对方的window大小
130 =1 uint Snd_Window; //我的window大小
131 =1 uint Dest_Max_Seg_Size; //对方接受的最大的数据包大小MTU
132 =1 uint My_Max_Seg_Size; //我能接受的最大的数据包大小
133 =1 ulong My_Wl1; //seq
134 =1 ulong My_Wl2; //ack
135 =1 uchar State; //连接状态
136 =1 uchar Open;
137 =1 };
138 =1
139 =1 /*tcp state define */
140 =1
141 =1 #define TCP_STATE_LISTEN 0
142 =1 #define TCP_STATE_SYN_RCVD 1
143 =1 #define TCP_STATE_SYN_SENT 2
144 =1 #define TCP_STATE_ESTABLISHED 3
145 =1 #define TCP_STATE_FIN_WAIT1 4
146 =1 #define TCP_STATE_FIN_WAIT2 5
147 =1 #define TCP_STATE_CLOSING 6
148 =1 #define TCP_STATE_CLOSE_WAIT 7
149 =1 #define TCP_STATE_LAST_ACK 8
150 =1 #define TCP_STATE_CLOSED 9
151 =1 #define TCP_STATE_TIME_WAIT 10
152 =1 //tcp连接的标志位
153 =1 #define TCP_FIN 0x01
154 =1 #define TCP_SYN 0x02
155 =1 #define TCP_RST 0x04
156 =1 #define TCP_PSH 0x08
157 =1 #define TCP_ACK 0x10
158 =1 #define TCP_URG 0x20
159 =1
160 =1 /*** RTL8019's address deifne ***/
161 =1 #define dp668
162 =1 #ifdef dp668 //reg00- 10为isa网卡接口的寄存器地址300-31f
163 =1 #define Reg00 XBYTE[0xfb00]
164 =1 #define Reg01 XBYTE[0xfb01]
165 =1 #define Reg02 XBYTE[0xfb02]
166 =1 #define Reg03 XBYTE[0xfb03]
167 =1 #define Reg04 XBYTE[0xfb04]
168 =1 #define Reg05 XBYTE[0xfb05]
169 =1 #define Reg06 XBYTE[0xfb06]
170 =1 #define Reg07 XBYTE[0xfb07]
171 =1 #define Reg08 XBYTE[0xfb08]
172 =1 #define Reg09 XBYTE[0xfb09]
173 =1 #define Reg0a XBYTE[0xfb0a]
174 =1 #define Reg0b XBYTE[0xfb0b]
175 =1 #define Reg0c XBYTE[0xfb0c]
176 =1 #define Reg0d XBYTE[0xfb0d]
177 =1 #define Reg0e XBYTE[0xfb0e]
178 =1 #define Reg0f XBYTE[0xfb0f]
179 =1 #define Reg10 XBYTE[0xfb10]
180 =1 #define Reg18 XBYTE[0xfb18]
181 =1
182 =1 #endif
183 =1
18 #include "global.c" //全局变量以及以太网底层驱动程序
1 =1 /*********************************************************************
2 =1 * Copright(c) 2003,广州周立功单片机发展有限公司
3 =1 * All rights reserved.
4 =1 * http://www.zlgmcu.com
5 =1 *
6 =1 *文件名称: global.c
C51 COMPILER V7.01 MAIN 03/21/2003 09:31:06 PAGE 15
7 =1 *文件标识:
8 =1 *摘 要: 定义全局变量,网络底层驱动程序,校验和计算,处理器相关设定
9 =1 *
10 =1 *当前版本: V1.0
11 =1 *作 者: zlgmcu
12 =1 *完成日期: 2003.2.27
13 =1 *
14 =1 *
15 =1 *
16 =1 *********************************************************************/
17 =1 /*********************************************************************
18 =1 * 公共变量定义
19 =1 *
20 =1 ********************************************************************/
21 =1 //#include "uart.c"
22 =1
23 =1 #define COM_RXD_BUFF_SIZE 600 //串口接收缓冲区大小
24 =1 #define COM_TXD_BUFF_SIZE 600 //串口发送缓冲区大小
25 =1 #define COMMAND_BUFF_SIZE 600
26 =1 #define RT_BUFF_NUM 1 //5 was changed to 3,2002/12/19 14:10
27 =1 #define TCP_MAX_RETXD 8 //tcp包最多重发的次数
28 =1
29 =1 /****************************************************************/
30 =1 uchar Ping_Count; //ping的次数,决定本地回显次数
31 =1 uchar Ping_IP_TTL=0; //ping的主机的物理地址生存时间,单位分钟,为0表示IP地址没有解析
32 =1 uchar Gateway_IP_TTL=0 ; //网关IP地址的物理地址生存时间,单位分钟
33 =1 //=0表示还没有解析,<5分钟时需要更新
34 =1
35 =1 uchar Udp_Count;
36 =1 uchar Msec=0; //10毫秒
37 =1 uchar Sec=0; //秒钟
38 =1 uchar Min=0; //分钟
39 =1 uchar i=0;
40 =1 uchar bnry; //读芯片RAM指针
41 =1 uchar curr; //写芯片RAM指针
42 =1 //uchar Tcp_Drop_Count=0; //用于关闭tcp连接的计数
43 =1 uchar RtTime=20; //重发时间
44 =1 uchar Tcp_Drop_Count=0; //用于关闭tcp连接的计数
45 =1 uint FrameIndex=0; //IP包的序列号
46 =1 uint ComRxdRead=0; //串口接收读指针
47 =1 uint ComTxdRead=0; //串口发送读指针
48 =1 uint ComRxdWrite=0; //串口接收写指针
49 =1 uint ComTxdWrite=0; //串口发送写指针
50 =1 uint Command_Len; //命令长度
51 =1 bit ComTxdBufempty=0; //串口发送缓冲区数据空的标志
52 =1 bit Tx_Buff_Sel=0; //芯片的发送缓冲区选择
53 =1 bit BiSecond; //两秒时,该标志置1
54 =1 bit Tcp_Timeout=0; //TCP超时标志,定时器0中断中将该标志置位
55 =1 bit TcpConnected=0; //TCP连接建立标志
56 =1
57 =1 uchar code HexTable[]={"0123456789ABCDEF"}; //为ascii->hex的转换表
58 =1 uchar code MacID[6]={0x52,0x54,0x4c,0x19,0xf8,0x23};//将RTL8019的物理地址存储在程序空间中
59 =1
60 =1 xdata uchar Command_Buf[COMMAND_BUFF_SIZE];//命令缓冲区
61 =1 xdata unsigned char IpStr[16];
62 =1 xdata unsigned char PortStr[5];
63 =1 xdata struct Socket_Type TCP1024;
64 =1
65 =1 xdata uchar ComRxdBuf[COM_RXD_BUFF_SIZE]; //串口的接收缓冲区
66 =1 xdata uchar ComTxdBuf[COM_TXD_BUFF_SIZE]; //串口的发送缓冲区
67 =1
68 =1 xdata union Netcard RxdNetBuff; //数据接收缓冲区
C51 COMPILER V7.01 MAIN 03/21/2003 09:31:06 PAGE 16
69 =1 xdata union Netcard TxdNetBuff; //数据发送缓冲区
70 =1 xdata union Netcard Resend_Buff;
71 =1
72 =1 xdata union Ethernet_Address_Type My_MAC ; //本机的物理地址
73 =1 xdata union Ethernet_Address_Type Gateway_MAC; //网关的物理地址
74 =1 xdata union Ethernet_Address_Type Ping_MAC; //PING的物理地址
75 =1
76 =1 xdata union Ip_Address_Type My_Ip_Address ; //本机IP地址
77 =1 xdata union Ip_Address_Type Gateway_Ip_Address; //网关IP地址
78 =1 xdata union Ip_Address_Type Mask_Ip_Address; //子网掩码
79 =1 xdata union Ip_Address_Type Ping_Ip_Address; //保存PING命令的目的主机的物理地址
80 =1
81 =1 union u RemotePort;
82 =1 union w CrcTemp;
83 =1 /**********************************************************************
84 =1 **函数原型: void delay_ms(uint ms_number)
85 =1 **入口参数:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -