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