⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 基于51单片机和RTL8019以太网控制器的嵌入式以太网控制程序。
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -