📄 rs232.lst
字号:
C51 COMPILER V8.18 RS232 08/02/2010 19:52:46 PAGE 1
C51 COMPILER V8.18, COMPILATION OF MODULE RS232
OBJECT MODULE PLACED IN RS232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE RS232.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************************
2 FileName: RS232.c
3 Description: RS232 protocol process
4 Date: 2007 09 21
5 ************************************************************************/
6 #include "Main.h"
7 #include "EEPROM.h"
8 #include "ip.h"
9 #include "arp.h"
10 #include "RTL8019.h"
11 #include "TCP.h"
12 /************************************************************************/
13 bit Test_Flag;
14 bit Rcv_flag; //串口接收到正确的标志位
15 bit Rcv_ok; //串口接收过完成的标志位
16 bit Key_flag; //按键标志位
17 WORK16 TestCount; //按键延时记数器
18 WORK16 RcvDelayCount; //按键延时记数器
19 WORK16 KeyDelayCount; //按键延时记数器
20 UWORK16 RcvCount; // 接收记数器
21 UWORK16 RcvLen; // 接收长度
22 xdata UWORK8 Rcv_buf[UART_RCV_NUM];
23 xdata ST_UART_STATISTICS gstUARTStatistics; // 串口通信错误统计
24 xdata WORK16 SystemTimer_buf[12]; // 系统相对定时器
25 /*********************************************************************/
26 /* 网口参数 */
27 xdata UWORK8 gucaNetPara[NET_PARA_LEN];
28 xdata UWORK8 gucOpenCount; /* 3秒计数 */
29 xdata UWORK8 gucSecond; /* 系统运行时间,秒 */
30 xdata UWORK8 gucMinute; /* 系统运行时间,分钟 */
31 xdata UWORK8 gucHour; /* 系统运行时间,小时 */
32 xdata UWORK16 gusDate; /* 系统运行时间,天数 */
33 xdata UWORK16 gusStopRun;
34
35 /*********************************************************************
36 函数名: void key_judge(void)
37 功能: 按键时间判断,如果是3秒中就初始化系统
38 输入: None
39 输出: None
40 返回: None
41 日期: 2004/02/09
42 *********************************************************************/
43 void key_judge(void)
44 {
45 1 if(0 == Key) // 使用按钮对设置进行复位
46 1 {
47 2 if(++gucOpenCount > 3) // 按住3秒进行复位
48 2 {
49 3 FlashInit(); // 初始化FLASH
50 3 ResetSystem();
51 3 }
52 2 }
53 1 else
54 1 {
55 2 gucOpenCount = 0;
C51 COMPILER V8.18 RS232 08/02/2010 19:52:46 PAGE 2
56 2 }
57 1 }
58 /*********************************************************************
59 函数名: void runTimeStat(void)
60 功能: 系统运行总时间统计
61 输入: None
62 输出: None
63 返回: None
64 日期: 2004/02/09
65 *********************************************************************/
66 void runTimeStat(void)
67 {
68 1 if(++gucSecond >= 60) // 是否到了1分钟
69 1 {
70 2 gucSecond = 0;
71 2 if(++gucMinute >= 60) // 是否到了1小时
72 2 {
73 3 gucMinute = 0;
74 3 if(++gucHour >= 24) // 是否到了一天
75 3 {
76 4 gucHour = 0;
77 4 gusDate++; // 天数加1
78 4 }
79 3 }
80 2 }
81 1 }
82 /*********************************************************************
83 函数名: void judgeIPState(void)
84 功能: 判断IP状态,如果有冲突,就快闪
85 输入: None
86 输出: None
87 返回: None
88 日期: 2004/02/09
89 *********************************************************************/
90 void judgeIPState(void)
91 {
92 1 if(IPOrMacConfiltFlag)
93 1 { // IP或MAC有冲突,运行灯快闪
94 2 if(FALSE == StartConfiltLedFlag)
95 2 {
96 3 StartConfiltLedFlag = TRUE;
97 3 }
98 2 }
99 1 else
100 1 {
101 2 if(StartConfiltLedFlag)
102 2 {
103 3 StartConfiltLedFlag = FALSE;
104 3 }
105 2 Led = ~Led; // 无冲突时1s闪烁
106 2 }
107 1 }
108 /*********************************************************************
109 函数名: void judgeArpState(void)
110 功能: 判断ARP的状态
111 输入: None
112 输出: None
113 返回: None
114 日期: 2004/02/09
115 *********************************************************************/
116 /*
117 void judgeArpState(void)
C51 COMPILER V8.18 RS232 08/02/2010 19:52:46 PAGE 3
118 {
119 switch(ArpPhases)
120 {
121 case ARP_FIRST_REQUEST: // ARP第一次请求
122 if(ArpCachePoniter < IpModeNum)
123 {
124 if(ArpCache_Buf[ArpCachePoniter].ucIPValible) //是否为一个合法IP
125 {
126 if('f' == ArpCache_Buf[ArpCachePoniter].ucStatus)
127 {
128 StartTimer(4,10); // 还没有进行过ARP请求,每100ms进行一个IP
129 ArpCache_Buf[ArpCachePoniter].ucStatus = 'p';
130 ArpStartRequest(&ArpCache_Buf[ArpCachePoniter].ucaArpIp[0]); //
-ARP请求
131 }
132 else
133 {
134 ArpCachePoniter++;
135 StartTimer(7,2); // 启动定时器进行下一个远程IP的ARP
136 }
137 }
138 else
139 {
140
141 ArpCachePoniter++; // 非法的IP
142 StartTimer(7,2); // 启动定时器进行下一个远程IP的ARP
143 }
144 }
145 else
146 {
147 StartTimer(7,400);
148 ArpCachePoniter = 0;
149 ArpPhases = ARP_SECOND_REQUEST; // 没有ARP成功的IP需要再请求一次
150 }
151 break;
152
153 case ARP_SECOND_REQUEST: // 没有成功的IP,再次进行ARP
154 if(ArpCachePoniter < IpModeNum)
155 {
156 if('p' == ArpCache_Buf[ArpCachePoniter].ucStatus)
157 {
158 StartTimer(4,10); // 第二次进行过ARP请求,每100ms进行一个IP /
159 ArpCache_Buf[ArpCachePoniter].ucStatus = 'f'; // 如果ARP成功,在ARP中将置为"r",否则
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -