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

📄 mmm.lst

📁 矿工定位系统单端
💻 LST
📖 第 1 页 / 共 4 页
字号:
 255   3              SendReady = FALSE;
 256   3          oldRecvState = RecvState;
 257   3              RecvState = RECV_STX;
 258   3        
 259   3        
 260   3          switch (oldRecvState)
 261   3              {                           
 262   4                case RECV_STX:         // Receive STX and answer DLE
 263   4                                                               if (c == STX)
 264   4                                           { 
 265   5                                                                 RecvState = RECV_ADDR0;
 266   5                                                                 START_T0(T_533_ms);
 267   5                                                               }
 268   4                                                               else
 269   4                                           {
 270   5                                                                 CALL_isr_T0() ;
 271   5                                           };
 272   4                                                       break;
 273   4       
 274   4            case RECV_ADDR0:       
 275   4                                                               if (c ==  ADDR)//0xd2)//MeterNum.chrX[3])
 276   4                                           {
 277   5                                     RecvState = RECV_ADDR1;
 278   5                                                                 START_T0(T_533_ms);
 279   5                                                               }
 280   4                                                               else
 281   4                                           {
 282   5                                                                 CALL_isr_T0() ;
 283   5                                           };
 284   4                                                       break;
 285   4            case RECV_ADDR1:       
 286   4                                                               if (c == 0x02)//MeterNum.chrX[2])
 287   4                                           {
 288   5                                     RecvState = RECV_ADDR2;
 289   5                                                                 START_T0(T_533_ms);
 290   5                                                               }
 291   4                                                               else
 292   4                                           {
 293   5                                                                 CALL_isr_T0() ;
 294   5                                           };
 295   4                                                       break;
 296   4            case RECV_ADDR2:       
 297   4                                                               if (c == 0x96)//MeterNum.chrX[1])
 298   4                                           {
 299   5                                     RecvState = RECV_ADDR3;
C51 COMPILER V7.05   MMM                                                                   07/08/2005 11:42:13 PAGE 6   

 300   5                                                                 START_T0(T_533_ms);
 301   5                                                               }
 302   4                                                               else
 303   4                                           {
 304   5                                                                 CALL_isr_T0() ;
 305   5                                           };
 306   4                                                       break;
 307   4      
 308   4            case RECV_ADDR3:       
 309   4                                                               if (c ==0x49) //MeterNum.chrX[0])
 310   4                                           { 
 311   5                                                                // LED_RED = ~LED_RED;
 312   5                                     En485 = SEND;
 313   5                                     //Ir_En = SEND;
 314   5                                                                 SBUF = DLE ;
 315   5                                                                 RecvState = RECV_DATA_DLE_ETX;
 316   5                                                                 DataDleReceived = FALSE;
 317   5                                                                 Index = 0;
 318   5                                                                 Cmdok = FALSE; 
 319   5                                                                 
 320   5                                                                 while( !TI );
 321   5                                                                 TI = FALSE;
 322   5                                                                 En485 = RECV;
 323   5                                     //Ir_En = RECV;
 324   5                                                                 START_T0(T_533_ms);
 325   5                                                               }
 326   4                                                               else
 327   4                                           {
 328   5                                                                 CALL_isr_T0() ;
 329   5                                           };
 330   4                                                       break;
 331   4      
 332   4                case RECV_DATA_DLE_ETX:// Receive data,DEL,ETX  and answer DLE
 333   4                                                               if (c == DLE) 
 334   4                                           { 
 335   5                                                                 if (!DataDleReceived)        //如果上一个不是DLE        丢掉
 336   5                                             {
 337   6                                                   DataDleReceived = TRUE;
 338   6                                                   RecvState = RECV_DATA_DLE_ETX;
 339   6                                                   START_T0(T_533_ms);
 340   6                                                   break;
 341   6                                             }
 342   5                                             else                                         //如果上一个是DLE
 343   5                                             {
 344   6                                                   DataDleReceived = FALSE; //留下
 345   6                                             };
 346   5                                                               }
 347   4                                                               else if (c == ETX)
 348   4                                                                    {
 349   5                                                              if (DataDleReceived)  //如果是结束标记    处理
 350   5                                                  {
 351   6                                                         DataDleReceived = FALSE;
 352   6                                                                                 
 353   6                                                                                 bcc = 0;
 354   6                                                     for (i = 0; i < Index; i++)
 355   6                                                     {
 356   7                                                         bcc ^= SerBuffer[i];
 357   7                                                     } ;
 358   6      
 359   6                                                                                 if( bcc == 0) 
 360   6                                                                                 { En485 = SEND;
 361   7                                               //Ir_En = SEND;
C51 COMPILER V7.05   MMM                                                                   07/08/2005 11:42:13 PAGE 7   

 362   7                                                                                   Cmdok = TRUE;
 363   7                                                                                   SBUF = DLE ;
 364   7                                                                                       while( !TI );
 365   7                                                                           TI = FALSE;
 366   7                                               En485 = RECV;
 367   7                                             //LED_RED = ~LED_RED;
 368   7                                               //Ir_En = RECV;
 369   7                                                                                 }
 370   6                                                                                 else
 371   6                                                                                 { En485 = SEND;
 372   7                                               //Ir_En = SEND;
 373   7                                                                                   Cmdok = FALSE;
 374   7                                                                                   SBUF = NAK ;
 375   7                                                                                       while( !TI );
 376   7                                                                           TI = FALSE;
 377   7                                               En485 = RECV;
 378   7                                               //Ir_En = RECV;
 379   7                                                                                 };
 380   6                                                                                      RecvState=RECV_STX;
 381   6                                                         break;
 382   6                                                  }
 383   5                                                  else
 384   5                                                  {
 385   6                                                         DataDleReceived = FALSE;   //如果不是结束标记  留下
 386   6                                                  };
 387   5                                                                    };
 388   4      
 389   4                                                               if (Index < SERBUFLEN)             //将数据写入SerBuffer[]
 390   4                                           {
 391   5                                             SerBuffer[Index++] = c;
 392   5                                           };
 393   4                                           RecvState = RECV_DATA_DLE_ETX;
 394   4                                           START_T0(T_533_ms);
 395   4                                                               break;
 396   4      
 397   4            case RECV_DLE: //Recieve answer from HOST
 398   4                                                               if ( c == DLE)
 399   4                                                               {
 400   5                                      En485 = SEND;
 401   5                                      //Ir_En = SEND;
 402   5                                                                  for (i = 0; i < (3 + SerBuffer[2] +1); i++)  //send data
 403   5                                              {  
 404   6                                                     SBUF = SerBuffer[i];
 405   6                                                     while (!TI);
 406   6                                                     TI = FALSE;
 407   6                                                     if ( SerBuffer[i] == DLE )          //send DLE two
 408   6                                                     {
 409   7                                                       SBUF = DLE;
 410   7                                                       while (!TI);
 411   7                                                       TI = FALSE;
 412   7                                                     };
 413   6                                              };
 414   5                                                               
 415   5                                                                      SBUF = DLE;                //send END
 416   5                                                                      while (!TI);
 417   5                                                  TI = FALSE;
 418   5      
 419   5                                                                      SBUF = ETX;
 420   5                                                                      while (!TI);
 421   5                                                  TI = FALSE;
 422   5                                                                      RecvState = RECV_DLE_OR_NAK ;
 423   5                                                  START_T0(T_533_ms);
C51 COMPILER V7.05   MMM                                                                   07/08/2005 11:42:13 PAGE 8   

 424   5                                      En485 = RECV;
 425   5                                      //Ir_En = RECV;
 426   5                                                               }
 427   4                                                               else
 428   4                                                               {
 429   5                                                                 CALL_isr_T0() ;
 430   5                                                               };
 431   4                                                               break;
 432   4      
 433   4            case RECV_DLE_OR_NAK: //Recieve answer from HOST
 434   4                                                               if ( c == DLE)
 435   4                                                               {
 436   5                                                                 SendOk = TRUE;
 437   5                                                                 SendReady = FALSE;
 438   5                                                                 RecvReady = TRUE;
 439   5                                                                 RecvState = RECV_STX;
 440   5                                                               }
 441   4                                                               else 
 442   4                                                               {
 443   5                                                                 SendOk = FALSE;
 444   5                                                                 SendReady = TRUE;
 445   5                                                                 RecvReady = FALSE;
 446   5                                                                 CALL_isr_T0() ;
 447   5                                                               };
 448   4                                   En485 = RECV;
 449   4                                   //Ir_En = RECV;
 450   4                                                               break;
 451   4      
 452   4                default:                           
 453   4                                       CALL_isr_T0() ;
 454   4                                                       break;
 455   4      
 456   4              };//end of case
 457   3         }  //end of if(RecvReady)
 458   2        };//end of if(RI)
 459   1      
 460   1      
 461   1        if ( TI && !RI )
 462   1        {  
 463   2               TI = 0 ;
 464   2               if ( SendReady )
 465   2               {  
 466   3                      SendReady = FALSE ;
 467   3                      
 468   3                  bcc = SerBuffer[0];   //计算BCC
 469   3                  for ( i = 1 ; i < SerBuffer[2]+3 ; i++ )
 470   3                      {
 471   4                        bcc = bcc ^ SerBuffer[i]  ;
 472   4                      };
 473   3                      SerBuffer[SerBuffer[2]+3] = bcc;
 474   3                  En485 = SEND;
 475   3              //Ir_En = SEND;
 476   3              SBUF = STX ;             //发送起始位}
 477   3                      RecvReady = TRUE ;
 478   3                      RecvState = RECV_DLE ;   //准备接收应答
 479   3              //      LED_GREEN = ~LED_GREEN;
 480   3                      while(!TI) ;
 481   3                      TI = FALSE ;
 482   3              En485 = RECV;
 483   3              //Ir_En = RECV;
 484   3                      START_T0(T_533_ms) ;        //chao shi 
 485   3               } ;
C51 COMPILER V7.05   MMM                                                                   07/08/2005 11:42:13 PAGE 9   

 486   2        };
 487   1      
 488   1      }
 489          /*************************原有的函数需改变*************************************
 490          *                                                                           *
 491          * Function:     isr_timer0                                                  *
 492          *                                                                           *
 493          * Input:        -                                                           *
 494          * Output:       -                                                           *
 495          *                                                                           *
 496          * Description:                                                              *
 497          *                                                                           *
 498          *                                                                           *
 499          ****************************************************************************/
 500          void isr_timer0(void) interrupt 1 using 0
 501          {
 502   1        //TR0=0;
 503   1        rest_delay++;
 504   1        if(com2)
 505   1        {
 506   2         if(RXTimerOUT!=0)        //此if{}else{} 为新加入的判断超时功能
 507   2          { 
 508   3             RXTimerOUT--;
 509   3          }
 510   2          else
 511   2          {
 512   3               
 513   3            RXSTAT=0;
 514   3            RXNOM=0;
 515   3          }
 516   2        }//end ifcom2
 517   1      
 518   1        if(com1)
 519   1        {
 520   2          if ( Timer0Cnt != 0 )
 521   2          {

⌨️ 快捷键说明

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