timer0.lst

来自「本程序是一个RS232转网口的。是一个透明传输的模块」· LST 代码 · 共 383 行 · 第 1/2 页

LST
383
字号
C51 COMPILER V7.06   TIMER0                                                                09/26/2008 13:35:50 PAGE 4   

 179   1          if (ModelStatu == MODEL_CONFIG_STATU) {                 //配置状态下不去连接服务器
 180   2              return;
 181   2              }
 182   1      
 183   1              if (!bConnect){                                         //每隔1秒去连接一次,直到连上为止
 184   2                      if (!conxn[IndexOfClient].bUsed) {
 185   3                              conxn[IndexOfClient].bUsed = TRUE;                  //标志该套接字已使用
 186   3                      }
 187   2                      if (ConnectNum > 0) {                               //连接10次仍旧连不上更改本地端口号
 188   3                  ConnectNum--;
 189   3                      } else {
 190   3                              ConnectNum = RECONNECT_NUM;                     //重连填初值
 191   3                              SocketIndexInit(IndexOfClient);                 //客户端套接字初始化
 192   3                              LocalPort++;
 193   3                              InitArpTable();                                 //初始化ARP表
 194   3                  if ((LocalPort < 1024) || (LocalPort > 5000)) {
 195   4                      LocalPort = 1024;                           //本地端口填初始值1024 
 196   4                      McuRst(NO_SAVE_EXIT);                       //如果连到这里还没连上,程序重起               
             -             
 197   4                              }
 198   3                      }
 199   2                      TCPConnect(IndexOfClient,my_ServerIP,Server_PORT.word,OnReceive,OnClose,OnConnect);
 200   2              } else {                                                //连上以后     
 201   2              if (TimerSec[T_SEND_HEART] > 0) {                   //判断发送心跳包时间到达                     
 202   3                  TimerSec[T_SEND_HEART]--;                                
 203   3                      } else {
 204   3                          TimerSec[T_SEND_HEART] = HeartTimeOutBak;       //时间初始化
 205   3                              DebugMsg(53);
 206   3                  #ifdef  PROTOCOL_2004   
                              SendHeart2004();                            //发送心跳包 //屏蔽供测试
                          #else 
 209   3                          SendHeart();                                //发送心跳包
 210   3                  #endif
 211   3                              SentHeartTime++;
 212   3                      }
 213   2                      OnLineTime++;                                       //连续在线时间计时
 214   2              }
 215   1      }
 216          
 217          
 218          
 219          /*
 220          *****************************************************************************************************
 221          *FUNC:  
 222          *NOTE:  
 223              缓冲区里的数据生存时间,超出最大生存时间,放弃
 224          *****************************************************************************************************
 225          */
 226          void Te2NetBuf_Ttl(void)                                 
 227          {
 228   1          unsigned char i;
 229   1              for (i=0; i<MAX_BUF_NUM; i++) {
 230   2              if (Te2NetBuf[i].statu > 0) {     //有数据
 231   3                  if (Te2NetBuf[i].ttl > 0) {
 232   4                      Te2NetBuf[i].ttl--;       //生存时间
 233   4                              } else {
 234   4                      Te2NetBuf[i].statu = 0;   //放弃
 235   4                              }
 236   3                      } 
 237   2              }
 238   1      }
 239          
C51 COMPILER V7.06   TIMER0                                                                09/26/2008 13:35:50 PAGE 5   

 240          
 241          /*
 242          *****************************************************************************************************
 243          *FUNC:  
 244          *NOTE:  
 245              缓冲区里的数据生存时间,超出最大生存时间,放弃
 246          *****************************************************************************************************
 247          */
 248          void Net2TeBuf_Ttl(void)                                 
 249          {
 250   1          unsigned char i;
 251   1              for (i=0; i<MAX_BUF_NUM2; i++) {
 252   2              if (Net2TeBuf[i].statu > 0) {     //有数据
 253   3                  if (Net2TeBuf[i].ttl > 0) {
 254   4                      Net2TeBuf[i].ttl--;       //生存时间
 255   4                              } else {
 256   4                      Net2TeBuf[i].statu = 0;   //放弃
 257   4                              }
 258   3                      } 
 259   2              }
 260   1      }
 261          
 262          /*
 263          *****************************************************************************************************
 264          *FUNC:  套接字超时重连
 265          *NOTE:   心跳包发出后2分钟没响应重连  
 266          *****************************************************************************************************
 267          */
 268          void Socket_Ttl(void)
 269          {
 270   1          if (SendHeartFlag == FALSE) {                       //心跳包已发,开始超时计时
 271   2              return;
 272   2              }
 273   1          if (TimerSec[T_SOCKET_TTL] > 0) {
 274   2              TimerSec[T_SOCKET_TTL]--;
 275   2              } else {
 276   2              HintMsg(9,NULL);
 277   2              tcp_send(&TCPSend,FLG_RST, 20, IndexOfClient);  //这里一定要加RST
 278   2                      InerClose(IndexOfClient);                       //关闭该套接字,重连 关闭后SendHeartFlag=FALSE;
 279   2              }
 280   1      }
 281          /*
 282          *****************************************************************************************************
 283          *FUNC:  10MS周期函数
 284          *NOTE:  对发出的数据如果超时,进行重发,每一次隔1S,每二次隔2S,4S,8S,16S,32S,由FINALTIMEOUT决定
 285          
 286          *****************************************************************************************************
 287          */
 288          void Cycle10ms(void)
 289          {
 290   1              if (10==D10ms.count)    {              //10ms定时到
 291   2                      D10ms.arrived=FALSE;
 292   2                      initial_sequence_nr += 1280;       // 初始序列号加1.
 293   2                      tcp_retransmit();                  //数据超时没响应,重传
 294   2                      if (initial_sequence_nr == 0xFFFFFFFFL) {
 295   3                          initial_sequence_nr=1;
 296   3                      }
 297   2                      DefaultPin();                      //恢复出厂值IO脚电平判断
 298   2              }
 299   1      }
 300          
 301          /*
C51 COMPILER V7.06   TIMER0                                                                09/26/2008 13:35:50 PAGE 6   

 302          *****************************************************************************************************
 303          *FUNC:  
 304          *NOTE:  1:2分钟时间到发心跳ARP包,如果没返回,视对方PC不存在,关闭套接字
 305                  2:对PING的结果状态进行判断,是否PING通
 306                          3:更新ARP表的生存时间
 307                          4:当作客户端,连接套接字
 308          *****************************************************************************************************
 309          */
 310          void Cycle1s(void) 
 311          {
 312   1          static unsigned char xdata seconds=0;
 313   1              static unsigned char xdata count=0;
 314   1      
 315   1          if ((100 == D1s.count) && D1s.arrived) {     //1s定时到
 316   2                  D1s.arrived = FALSE;                     //保证D1s=100的时候只进来一次
 317   2              if (bConnect) {
 318   3                  if (++count % 4) {
 319   4                      LED(RUN_LED,OFF);                //连上以后运行LED灭3S
 320   4                              } else {
 321   4                      LED(RUN_LED,ON);                 //连上以后运行LED亮1S
 322   4                              }
 323   3                      } else {
 324   3                  RUN_LED =~RUN_LED;
 325   3                      }
 326   2                      if ((bBound == FALSE) && DHCPMode) {     //DHCP模式并且IP未绑定
 327   3                          if (++seconds % 2){                  //如果未得到IP,2秒请求DHCP分配一次
 328   4                      DHCPRequest();
 329   4                              }
 330   3                      } else { 
 331   3                          tcp_inactivity();              //在线后,tcp保活心跳定时器,2分钟发一次ARP探测,配合:TCP_ATYARP();
 332   3                              UpdateArpTab();                //更新ARP表的生存时间
 333   3                              Client_Connect();              //客户端尝试连接
 334   3                              Socket_Ttl();                  //套接字超时重连
 335   3                  DHCPTimer();                   //DHCP租期计时器
 336   3                      }
 337   2                      PingCycle();                       //PING结果
 338   2      
 339   2                      Updata_Model_Statu();              //配置状态下3分钟分强制进入运行状态
 340   2                      Te2NetBuf_Ttl();                   //数据生存时间判断(终端到网络)        
 341   2                      Net2TeBuf_Ttl();                   //数据生存时间判断(网络到终端)
 342   2                      #ifdef PROTOCOL_2004
                                  ResenBuf_Interval();
                              #endif
 345   2              }
 346   1      }
 347          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1255    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     14       6
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?