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

📄 uart0.lst

📁 本程序是一个RS232转网口的。是一个透明传输的模块
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   UART0                                                                 09/26/2008 13:35:52 PAGE 8   

 427          {
 428   1          unsigned int  i;
 429   1      
 430   1              while (FrameIn2 < MAX_BUF_NUM2) { 
 431   2              if (0 == Net2TeBuf[FrameIn2].statu) {
 432   3                  for (i=0; i<length; i++) {
 433   4                      Net2TeBuf[FrameIn2].buf[i] = source[i];    //拷贝数据
 434   4                              }
 435   3                              Net2TeBuf[FrameIn2].statu  = 10;               //有数据
 436   3                              Net2TeBuf[FrameIn2].ttl    = 20;               //生存时间:单位S
 437   3                              Net2TeBuf[FrameIn2].length = length;           //长度
 438   3                              FrameIn2++;
 439   3                              break;
 440   3                      } else {
 441   3                  FrameIn2++;
 442   3                      }
 443   2              }
 444   1      
 445   1              if (FrameIn2 >= MAX_BUF_NUM2) {
 446   2              FrameIn2 = 0;
 447   2              }
 448   1      }
 449          
 450          /*
 451          *****************************************************************************************************
 452          *Func:  一侦结束判断 
 453          *Note:
 454          *    1: LOOPS:比如收到一侦数据5000个,而一侦BUF最大就只有1460个,要循环5000/1460次,每次1460个,
 455          *    2: MOD,是余数,接在后面
 456          *    //ES = 0;                                       // 很重要,洪金枝 ES=1在GETCH里恢复  
 457          *****************************************************************************************************
 458          */
 459          void Data2_Te2NetBuf(void)
 460          {
 461   1              
 462   1          inRxBuf_Bak = inRxBuf;                           //减少分侦的可能用在Mygetch前
 463   1       
 464   1          if (TimerMil[T_FRAME_END]) {                     // 1侦数据未结束 
 465   2              return;
 466   2              }
 467   1      
 468   1          Rx0_Counter = 0;
 469   1          while (Mygetch(&Mid_Buf[Rx0_Counter])) {        
 470   2              if (++Rx0_Counter == MAX_FRAME_SIZE) {
 471   3                  break;
 472   3                      }
 473   2              }
 474   1      
 475   1              if (Rx0_Counter == 0) {                        //FrameEndTime=0,有两种可能1:一侦结束;2:从没数据
 476   2              return ;
 477   2              } 
 478   1      
 479   1              if (Rx0_Counter > MAX_FRAME_SIZE) {            //保护,其实不会运行到这
 480   2              return;
 481   2              }
 482   1      
 483   1              FramePush(Mid_Buf,Rx0_Counter);
 484   1      }
 485          
 486          
 487          /*
 488          *****************************************************************************************************
C51 COMPILER V7.06   UART0                                                                 09/26/2008 13:35:52 PAGE 9   

 489          *Func:   
 490          *Note:
 491          *****************************************************************************************************
 492          */
 493          #ifdef _DEBUG_
              void Parse_Ack(unsigned char ack)
              {
                  Uart0Putf("\r\n");
                  Uart0Putf("第  ");PrintByte(FrameOut);Uart0Putf("侦:");
                  Uart0Putf("\r\n数据:");Uart0Putsl(Te2NetBuf[FrameOut].buf,Te2NetBuf[FrameOut].length);
                      Uart0Putf("\r\n");                              
                  switch (ack) {
                              case TRUE:
                                       Uart0Putf("成功:发送成功");
                                       break;
                              case ERR_BUF_FULL:
                                       Uart0Putf("失败:等待缓冲满)"); 
                                       break;
                              case ERR_NO_ESTABLISH:
                                       Uart0Putf("失败:没建立链接"); 
                                       break;
                              default:
                                       Uart0Putf("失败:未知\r\n"); 
                                       break; 
                              }
              }
              #endif
 516          
 517          #ifdef _DEBUG_
                  #define ParseAck(x) Parse_Ack(x)
              #else 
 520              #define ParseAck(x) 
 521          #endif
 522          
 523          
 524          /*
 525          *****************************************************************************************************
 526          *Func:   解析数据如果是配置命令,执行配置函数,如果是数据往NET发送
 527          *Note:
 528          *    1: 如果发送失败返回,STATU不清0等待下一次进来再尝试,用生存时间来清statu0
 529          *    2:
 530          //else {                                                 //不是配置命令,且未连接,数据先保留
 531                                    //    Uart0Putsl(Te2NetBuf[FrameOut].buf,Te2NetBuf[FrameOut].length);Uart0Putf("\r\n");                       
             -    
 532                                          //break;                                             //调试用,实际中可以直接跳出,数据先保留
 533                                  //} 
 534          *****************************************************************************************************
 535          */
 536          void Parse_Te2NetBuf(void)
 537          {
 538   1          unsigned char ack=0;
 539   1       
 540   1              while (FrameOut<MAX_BUF_NUM) {
 541   2              if (Te2NetBuf[FrameOut].statu > 0) {                         //缓冲区有数据
 542   3                          if ((Te2NetBuf[FrameOut].buf[0] == 'W') && (Te2NetBuf[FrameOut].buf[1] == 'P') 
 543   3                                 &&(Te2NetBuf[FrameOut].buf[2] == '-')) {
 544   4                      ParseUartCmd(Te2NetBuf[FrameOut].buf,Te2NetBuf[FrameOut].length);//如果是配置命令,解析命令
 545   4                              } else if(bConnect) {                                    //如果已经连接往以太网发送 
 546   4                                      ack = User_TCPSend(IndexOfClient,Te2NetBuf[FrameOut].buf,Te2NetBuf[FrameOut].length);
 547   4                      ParseAck(ack);
 548   4                                      if (ack != TRUE) {                                   //数据发送失败状态不清0,保留数据
 549   5                                              break;
C51 COMPILER V7.06   UART0                                                                 09/26/2008 13:35:52 PAGE 10  

 550   5                                      }
 551   4                              } 
 552   3                              Te2NetBuf[FrameOut++].statu  = 0;                        //清0很重要
 553   3                              break;                                                   //处理完一侦退出,不要连续做四侦
 554   3                      } else {
 555   3                      FrameOut++;
 556   3                      }
 557   2              }
 558   1      
 559   1              if (FrameOut >= MAX_BUF_NUM) {
 560   2              FrameOut = 0;
 561   2              }
 562   1      }
 563          
 564          
 565          /*
 566          *****************************************************************************************************
 567          *Func:   解析网络到终端的数据,如果是配置命令,执行配置函数,如果是数据往终端发送
 568          *Note:
 569          *    1:  如果发送失败返回,STATU不清0等待下一次进来再尝试,用生存时间来清statu0
 570          *    2: 
 571          _UART_BUF_STRUCT_  xdata  Net2TeBuf[MAX_BUF_NUM2];  // 网络到终端
 572          unsigned char      xdata  FrameIn2;                 //用来指向Net2TeBuf进入数据的标量
 573          unsigned char      xdata  FrameOut2;                //用来指向Net2TeBuf取出数据的标量
 574          *****************************************************************************************************
 575          */
 576          void Parse_Net2TeBuf(void)
 577          { 
 578   1              while (FrameOut2 < MAX_BUF_NUM2) {
 579   2              if (Net2TeBuf[FrameOut2].statu > 0) {                         //缓冲区有数据
 580   3                          if ((Net2TeBuf[FrameOut2].buf[0] == 'W') && (Net2TeBuf[FrameOut2].buf[1] == 'P') 
 581   3                                 &&(Net2TeBuf[FrameOut2].buf[2] == '-')) {
 582   4                      ParseRemoteCmd(Net2TeBuf[FrameOut2].buf,Net2TeBuf[FrameOut2].length);  //如果是配置命令,解
             -析命令
 583   4                              } else {                                                  //不是配置命令,且未连接,数据先保留
 584   4                      #ifdef  PROTOCOL_2004   
                                      OnReceiveData2004(Net2TeBuf[FrameOut2].buf,Net2TeBuf[FrameOut2].length);//纯数据处理,回调
             -收到数据函数,2004PRO
                              #else                
 587   4                                          Uart0Putsl(Net2TeBuf[FrameOut2].buf,Net2TeBuf[FrameOut2].length);
 588   4                      #endif                      
 589   4                              }
 590   3                              Net2TeBuf[FrameOut2++].statu  = 0;                         //清0很重要
 591   3                              break;                                                    //处理完一侦退出,不要连续做四侦
 592   3                      } else {
 593   3                      FrameOut2++;
 594   3                      }
 595   2              }
 596   1      
 597   1              if (FrameOut2 >= MAX_BUF_NUM2) {
 598   2              FrameOut2 = 0;
 599   2              }
 600   1      }
 601          
 602          
 603          /*
 604          *****************************************************************************************************
 605          *Func:   发送心跳包
 606          *Note:
 607          *    1: 
 608          *    2: 
 609          *****************************************************************************************************
C51 COMPILER V7.06   UART0                                                                 09/26/2008 13:35:52 PAGE 11  

 610          */
 611          void SendHeart(void)
 612          {
 613   1          unsigned char heart='$';                    // 发送%
 614   1      
 615   1          FramePush(&heart,1);                        // 压入缓冲
 616   1      
 617   1              if (SendHeartFlag == FALSE) {
 618   2                  SendHeartFlag = TRUE;                       // 置已发标志
 619   2                  TimerSec[T_SOCKET_TTL] = SOCKET_TTL_SEC;    // 时间初始化2分钟
 620   2              }
 621   1      }
 622          
 623          
 624          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2083    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =  17861    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12      20
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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