📄 global.lst
字号:
C51 COMPILER V7.06 GLOBAL 05/27/2008 11:02:05 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE GLOBAL
OBJECT MODULE PLACED IN .\RUN\global.obj
COMPILER INVOKED BY: D:\Keil7_06\C51\BIN\C51.EXE global.c OBJECT(.\RUN\global.obj)
stmt level source
1 /*********************************************************************
2 * Copright(c) 2004,张会福 湖南科技大学计算机学院
3 * All rights reserved.
4 *
5 *文件名称: global.c
6 *文件标识:
7 *摘 要: 定义全局变量,网络底层驱动程序,校验和计算,处理器相关设定
8 *
9 *当前版本: V1.0
10 *作 者: 张会福
11 *完成日期: 2004.4.10
12 *
13 *********************************************************************/
14
15 /*********************************************************************
16 * 公共变量定义
17 *
18 ********************************************************************/
19 //#include "uart.c"
20 #define GLOBAL_GLOBALS
21 #include "net_cfg.h"
22
23
24 /****************************************************************/
25 uchar Ping_Count; //ping的次数,决定本地回显次数
26 uchar Ping_IP_TTL=0; //ping的主机的物理地址生存时间,单位分钟,为0表示IP地址没有解析
27 uchar Gateway_IP_TTL=0 ; //网关IP地址的物理地址生存时间,单位分钟
28 //=0表示还没有解析,<5分钟时需要更新
29
30 uchar Udp_Count;
31 uchar Msec=0; //10毫秒
32 uchar Sec=0; //秒钟
33 uchar Min=0; //分钟
34 uchar i=0;
35 uchar bnry; //读芯片RAM指针
36 uchar curr; //写芯片RAM指针
37 uchar RtTime=20; //重发时间
38 uchar Tcp_Drop_Count=0; //用于关闭tcp连接的计数
39 uint FrameIndex=0; //IP包的序列号
40 uint ComRxdRead=0; //串口接收读指针
41 uint ComTxdRead=0; //串口发送读指针
42 uint ComRxdWrite=0; //串口接收写指针
43 uint ComTxdWrite=0; //串口发送写指针
44
45 bit ComTxdBufempty=0; //串口发送缓冲区数据空的标志
46 bit Tx_Buff_Sel=0; //芯片的发送缓冲区选择
47 bit BiSecond; //两秒时,该标志置1
48 bit Tcp_Timeout=0; //TCP超时标志,定时器0中断中将该标志置位
49 bit TcpConnected=0; //TCP连接建立标志
50
51 uchar code MacID[6]=MY_MAC_ID;//将RTL8019的物理地址存储在程序空间中
52 uchar code HexTable[]={"0123456789ABCDEF"}; //为ascii->hex的转换表
53 xdata uchar Command_Buf[COMMAND_BUFF_SIZE]; //命令缓冲区
54 xdata uchar IpStr[16];
55 xdata uchar PortStr[5];
C51 COMPILER V7.06 GLOBAL 05/27/2008 11:02:05 PAGE 2
56 xdata struct Socket_Type TCP1024;
57
58 xdata uchar ComRxdBuf[COM_RXD_BUFF_SIZE]; //串口的接收缓冲区
59 xdata uchar ComTxdBuf[COM_TXD_BUFF_SIZE]; //串口的发送缓冲区
60
61 xdata union Netcard RxdNetBuff; //数据接收缓冲区
62 xdata union Netcard TxdNetBuff; //数据发送缓冲区
63 xdata union Netcard Resend_Buff;
64
65 xdata union Ethernet_Address_Type My_MAC ; //本机的物理地址
66 xdata union Ethernet_Address_Type Gateway_MAC; //网关的物理地址
67 xdata union Ethernet_Address_Type Ping_MAC; //PING的物理地址
68
69 xdata union Ip_Address_Type My_Ip_Address ; //本机IP地址
70 xdata union Ip_Address_Type Gateway_Ip_Address; //网关IP地址
71 xdata union Ip_Address_Type Mask_Ip_Address; //子网掩码
72 xdata union Ip_Address_Type Ping_Ip_Address; //保存PING命令的目的主机的物理地址
73
74 union u RemotePort;
75 union w CrcTemp;
76 /**********************************************************************
77 **函数原型: void delay_ms(uint ms_number)
78 **入口参数: ms_number: 延时的毫秒数
79 **出口参数: 无
80 **返 回 值: 无
81 **说 明: 延时预定的时间,延时时间与特定的处理器有关
82 ************************************************************************/
83 void Delay_MS(uint ms_number)
84 {
85 1 uint i;
86 1 uint j;
87 1 for(j = 0;j < ms_number;j++)
88 1 for(i = 0;i < 229;i++);
89 1 }
90
91 /**********************************************************************
92 **函数原型: void page(uchar pagenumber)
93 **入口参数: uchar pagenumber: 要切换的页
94 **出口参数: 无
95 **返 回 值: 无
96 **说 明: 选择页,可选择0,1,2三页,第四页ne000兼容芯片保留
97 ************************************************************************/
98 void page(uchar pagenumber)
99 {
100 1 uchar data temp;
101 1 temp=Reg00; //command register
102 1 //temp=temp&0x3f;
103 1 temp=temp&0x3B ; //注意txp位不能要
104 1 pagenumber=pagenumber <<6;
105 1 temp=temp | pagenumber;
106 1 Reg00=temp;
107 1 }
108
109 /**********************************************************************
110 **函数原型: void SetMacID()
111 **入口参数: 无
112 **出口参数: 无
113 **返 回 值: 无
114 **说 明: 设置芯片物理地址,物理地址已经存储在程序空间内
115 ************************************************************************/
116 void SetMacID()
117 {
C51 COMPILER V7.06 GLOBAL 05/27/2008 11:02:05 PAGE 3
118 1 My_MAC.bytes[0] = MacID[0]; //取出物理地址,填充到
119 1 My_MAC.bytes[1] = MacID[1];
120 1 My_MAC.bytes[2] = MacID[2];
121 1 My_MAC.bytes[3] = MacID[3];
122 1 My_MAC.bytes[4] = MacID[4];
123 1 My_MAC.bytes[5] = MacID[5];
124 1 page(1);
125 1 Reg01 = My_MAC.bytes[0];
126 1 Reg02 = My_MAC.bytes[1];
127 1 Reg03 = My_MAC.bytes[2];
128 1 Reg04 = My_MAC.bytes[3];
129 1 Reg05 = My_MAC.bytes[4];
130 1 Reg06 = My_MAC.bytes[5];
131 1 page(0);
132 1 }
133
134 /**********************************************************************
135 **函数原型: void Send_Packet(union Netcard *TxdNetBuff,uint length)
136 **入口参数: union Netcard *TxdNetBuff :指向发送缓冲区
137 ** uint length :发送数据包的长度
138 **出口参数: 无
139 **返 回 值: 无
140 **说 明: 发送数据包,以太网底层驱动程序,所有的数据发送都要通过该程序
141 ************************************************************************/
142 void Send_Packet(union Netcard *TxdNetBuff,uint length)
143 {
144 1 uchar i;
145 1 uint ii;
146 1 page(0); //切换至第0页
147 1 if(length<60)
148 1 length=60; //如果数据长度<60字节,设置长度为60字节
149 1 for(i=0;i<3;i++) //设置源物理地址
150 1 {
151 2 TxdNetBuff->EtherFrame.SourceMacId[i]=My_MAC.words[i];
152 2 }
153 1 Tx_Buff_Sel=!Tx_Buff_Sel; //设置两个发缓区,提高发送效率
154 1 if(Tx_Buff_Sel)
155 1 Reg09=0x40 ; //设置发送页地址
156 1 else
157 1 Reg09=0x46 ; //设置发送页地址
158 1
159 1 Reg08=0x00; //read page address low
160 1 Reg0b=length>>8; //read count high
161 1 Reg0a=length&0xff; //read count low;
162 1 Reg00=0x12; //write dma, page0
163 1
164 1 for(ii=4;ii<length+4;ii++)
165 1 {
166 2 Reg10=TxdNetBuff->bytes.bytebuf[ii];
167 2 }
168 1 /***************************************/
169 1 //以下为终止DMA操作
170 1 Reg0b=0x00;
171 1 Reg0a=0x00;
172 1 Reg00=0x22; //结束或放弃DMA操作
173 1 /***************************************/
174 1
175 1 for(i=0;i<6;i++) //最多重发6次
176 1 {
177 2 for(ii=0;ii<1000;ii++)
178 2 {//检查CR寄存器的txp位是否为低,为1说明正在发送,为0说明发完或出错放弃
179 3 if((Reg00&0x04)==0)
C51 COMPILER V7.06 GLOBAL 05/27/2008 11:02:05 PAGE 4
180 3 { break; }
181 3 }
182 2 if((Reg04&0x01)!=0)//表示发送成功,判断发送状态寄存器TSR,决定是否出错
183 2 {break;};
184 2 Reg00=0x3e;
185 2 }
186 1
187 1 Reg07=0xff;
188 1 if(Tx_Buff_Sel)
189 1 {
190 2 Reg04=0x40; //txd packet start;
191 2 }
192 1 else
193 1 {
194 2 Reg04=0x46; //txd packet start;
195 2 }
196 1 Reg06=length>>8; //high byte counter
197 1 Reg05=length&0xff;//low byte counter
198 1 Reg07=0xff;
199 1 Reg00=0x3e; //to sendpacket;
200 1
201 1 }
202
203 /**********************************************************************
204 **函数原型: bit Rec_NewPacket()
205 **入口参数: 无
206 **出口参数: 无
207 **返 回 值: 0 没有新数据包
208 ** 1 接收到新数据包
209 **说 明: 查询是否有新数据包并接收进缓冲区
210 ************************************************************************/
211 bit Rec_NewPacket()
212 {
213 1 uchar i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -