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

📄 mmm.lst

📁 矿工定位系统单端
💻 LST
📖 第 1 页 / 共 4 页
字号:
 264   5                                                                 CALL_isr_T0() ;
 265   5                                           };
 266   4                                                       break;
 267   4       
 268   4            case RECV_ADDR0:       
 269   4                                                               if (c ==  ADDR)//0xd2)//MeterNum.chrX[3])
 270   4                                           {
 271   5                                     RecvState = RECV_ADDR1;
 272   5                                                                 START_T0(T_533_ms);
 273   5                                                               }
 274   4                                                               else
 275   4                                           {
 276   5                                                                 CALL_isr_T0() ;
 277   5                                           };
 278   4                                                       break;
 279   4            case RECV_ADDR1:       
 280   4                                                               if (c == 0x02)//MeterNum.chrX[2])
 281   4                                           {
 282   5                                     RecvState = RECV_ADDR2;
 283   5                                                                 START_T0(T_533_ms);
 284   5                                                               }
 285   4                                                               else
 286   4                                           {
 287   5                                                                 CALL_isr_T0() ;
 288   5                                           };
 289   4                                                       break;
 290   4            case RECV_ADDR2:       
 291   4                                                               if (c == 0x96)//MeterNum.chrX[1])
 292   4                                           {
 293   5                                     RecvState = RECV_ADDR3;
 294   5                                                                 START_T0(T_533_ms);
 295   5                                                               }
 296   4                                                               else
 297   4                                           {
 298   5                                                                 CALL_isr_T0() ;
 299   5                                           };
C51 COMPILER V7.05   MMM                                                                   03/01/2002 11:48:58 PAGE 6   

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

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

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

 486          *                                                                           *
 487          * Input:        -                                                           *
 488          * Output:       -                                                           *
 489          *                                                                           *
 490          * Description:                                                              *
 491          *                                                                           *
 492          *                                                                           *
 493          ****************************************************************************/
 494          void isr_timer0(void) interrupt 1 using 0
 495          {
 496   1        //TR0=0;
 497   1        if(com2)
 498   1        {
 499   2         if(RXTimerOUT!=0)        //此if{}else{} 为新加入的判断超时功能
 500   2          { 
 501   3             RXTimerOUT--;
 502   3          }
 503   2          else
 504   2          {
 505   3               
 506   3            RXSTAT=0;
 507   3            RXNOM=0;
 508   3          }
 509   2        }//end ifcom2
 510   1      
 511   1        if(com1)
 512   1        {
 513   2          if ( Timer0Cnt != 0 )
 514   2          {
 515   3                --Timer0Cnt;
 516   3          }
 517   2          else
 518   2          {
 519   3           TR0 = 0 ;
 520   3               if ((RecvState == RECV_DLE) || (RecvState == RECV_DLE_OR_NAK)) //发送起始字超时
 521   3               {
 522   4                 ErrorCount++;
 523   4                 if ( ErrorCount <= 1)
 524   4                 {       
 525   5                    SendReady = TRUE;
 526   5                        TI = 1;
 527   5                 }
 528   4                 else
 529   4                 {
 530   5                        ErrorCount = 0 ; 
 531   5                    SendReady = FALSE;
 532   5                    RecvReady = TRUE; 
 533   5                    RecvState = RECV_STX;
 534   5                    En485 = RECV;
 535   5                    //Ir_En = RECV;
 536   5      
 537   5              }
 538   4                }
 539   3               else                                     //接收超时

⌨️ 快捷键说明

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