📄 main.lst
字号:
194 1 //初始化PING表
195 1 InitPingTable();
196 1 //初始化ARP表
197 1 InitArpTable();
198 1 //初始化tcp
199 1 init_tcp();
200 1
201 1 //调试用的,一闪一闪表示没死机
202 1 P10=0;
203 1 //主循环
204 1 //申请一个套接字
205 1 Disp_All();
206 1
207 1 while(1)
208 1 {
209 2 if(query_8019()) //表示收到数据包
210 2 maincycle();
211 2
212 2
213 2 if(10==D10ms.count) //10ms定时到
214 2 {
215 3 D10ms.arrived=FALSE;
216 3 // 初始序列号加1.
217 3 initial_sequence_nr += 1280;
218 3 //防止溢出
219 3 tcp_retransmit();
220 3 if (initial_sequence_nr==0xFFFFFFFFL) initial_sequence_nr=1;
221 3 }
222 2 if(100==D1s.count&&D1s.arrived) //1s定时到
223 2 {
224 3 //保证D1s=100的时候只进来一次
225 3 D1s.arrived=FALSE;
226 3 //tcp保活定时器
227 3 tcp_inactivity();
228 3 PingCycle();
229 3 //更新ARP表的生存时间
230 3 updatearptab();
231 3
232 3 //测试用的
233 3 P10=~P10;
234 3 //如果已经发出SYN_SEND,则判断是否已连接,这里认为从发出SYN_SEND
235 3 //到建立连接时间不超过1s,这个假定是合理的。如果在发出SYN_SEND
236 3 //1s后还未建立连接,则认为是服务器端(上位机)没有在监听
237 3 if(bFirst)
238 3 {
239 4 bFirst = FALSE;
240 4 IndexOfClient = TCPSocket();
241 4 }
C51 COMPILER V8.02 MAIN 09/21/2006 20:16:30 PAGE 5
242 3 //找到空闲套接字
243 3
244 3 //每隔1秒去连接一次,直到连上为止
245 3 if(!bConnect)
246 3 {
247 4 if(IndexOfClient != ERR_SOCK_FULL)
248 4 {
249 5 TCPConnect(IndexOfClient,my_ServerIP,Server_PORT.word,OnReceive,OnClose,OnConnect);
250 5 }
251 4 count_connect++;
252 4 if(count_connect>10)
253 4 {
254 5 //连接10次仍旧连不上,初始化芯片
255 5 //初始化PING表
256 5 InitPingTable();
257 5 //初始化ARP表
258 5 // InitArpTable();
259 5 init_tcp();
260 5 bFirst = TRUE;
261 5 count_connect=0;
262 5 }
263 4 }
264 3 }
265 2 //处理通过串口发过来的命令
266 2 switch(State)
267 2 {
268 3 case StatInputCom://开始收集命令
269 3 {
270 4
271 4 //搜集80个命令字符,MaxCmd=80
272 4 if(Mygetch(&ch))
273 4 {
274 5 if(i<MaxCmd-2)
275 5 {
276 6 i=i+1;
277 6 ComBuf[i]=ch;
278 6 }
279 5 else
280 5 {
281 6 //命令收集结束
282 6 ComBuf[i+1]='\0';
283 6 State=StatExeCom;
284 6 }
285 5 break;
286 5 }
287 4 else
288 4 {
289 5 // maincycle();
290 5 break;
291 5 }
292 4 }
293 3 //开始处理命令
294 3 case StatExeCom:
295 3 {
296 4 //检查命令还是数据
297 4 if(ComBuf[0] == 0x00)
298 4 {
299 5 if(GetWord(ComBuf,&WordTable)==1)
300 5 {
301 6 Mystrlwr(WordTable.wt[0].Str);
302 6 for(tem=0;tem<MaxComNum&&!ComMatchFlag;tem++)
303 6 {
C51 COMPILER V8.02 MAIN 09/21/2006 20:16:30 PAGE 6
304 7 if(strcmp(WordTable.wt[0].Str,ComTable[tem])==0)
305 7 ComMatchFlag=1;
306 7 }
307 6 if(ComMatchFlag)
308 6 {
309 7 tem--;
310 7 switch(tem)
311 7 {
312 8 //显示连接ok
313 8 case 0:{PrintStr("connect ok");break;}
314 8 case 1:{ //ping
315 9 SetPingIP(WordTable.wt[1].Str);
316 9 ping_request();
317 9 break;
318 9 }
319 8 case 2:{ //写要连接的服务器端IP
320 9 WRiteServerIP(WordTable.wt[1].Str);
321 9 PrintStr("Write ServerIP OK");
322 9 break;
323 9 }
324 8 case 3:{ //写本地IP
325 9 WRiteLIP(WordTable.wt[1].Str);
326 9 PrintStr("Write LocalIP OK");
327 9 break;}
328 8 case 4:{ //写mac
329 9 WRiteMAC(WordTable.wt[1].Str);
330 9 PrintStr("Write Mac OK");
331 9 break;}
332 8 case 5:{
333 9 //显示所有配置数据
334 9 DispConfig();
335 9 break;}
336 8 case 6:{ //写要连接的服务器端端口号
337 9 WRiteServerPort(WordTable.wt[1].Str);
338 9 PrintStr("Write ServerPort OK");
339 9 break;}
340 8 case 7:{
341 9 WRiteGate(WordTable.wt[1].Str);
342 9 PrintStr("Write GateIP OK");
343 9 break;}
344 8 case 8:{
345 9 break;}
346 8 case 9:{
347 9 DspTCPStat();
348 9 break;}
349 8 }
350 7 }
351 6 else
352 6 PrintStr("Bad command!");
353 6 }
354 5 }
355 4 else
356 4 {
357 5 //为数据
358 5 if(ComBuf[0] == 0x01)
359 5 {
360 6 if(bConnect)
361 6 {
362 7 User_TCPSend(IndexOfClient,ComBuf+2,ComBuf[1]);
363 7 }
364 6 }
365 5 }
C51 COMPILER V8.02 MAIN 09/21/2006 20:16:30 PAGE 7
366 4 ComMatchFlag=0;
367 4 State=StatInputCom;
368 4 i=-1;
369 4 break;
370 4 }
371 3 default:
372 3 {
373 4 //ShellEnd=1;
374 4 PrintStr("System fatal error!");
375 4 }
376 3 }
377 2 }
378 1 }
379
380
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 859 ----
CONSTANT SIZE = 288 ----
XDATA SIZE = 4 251
PDATA SIZE = ---- ----
DATA SIZE = 5 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -