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

📄 mmm.lst

📁 矿工定位系统单端
💻 LST
📖 第 1 页 / 共 5 页
字号:
 234   1       else
 235   1       {
 236   2             TI_1=0;
 237   2                 
C51 COMPILER V7.05   MMM                                                                   01/30/2003 18:32:34 PAGE 5   

 238   2        }
 239   1      }
 240                   /****************************************************************************
 241          *                                                                           *
 242          * Function:     isr_UART                                                    *
 243          *                                                                           *
 244          * Input:        -                                                           *
 245          * Output:       -                                                           *
 246          *                                                                           *
 247          * Description:                                                              *
 248          ****************************************************************************/
 249          void isr_UART(void) interrupt 4 using 2
 250          {
 251   1        unsigned char c , oldRecvState , i , bcc;
 252   1      
 253   1      //  WatchDog();
 254   1        
 255   1        if ( RI )                                         // Receive Command
 256   1        { 
 257   2          TR0 = 0 ;                              //stop t0
 258   2              c  = SBUF;
 259   2              RI = 0;
 260   2              if (RecvReady)
 261   2              {
 262   3              SendReady = FALSE;
 263   3          oldRecvState = RecvState;
 264   3              RecvState = RECV_STX;
 265   3        
 266   3        
 267   3          switch (oldRecvState)
 268   3              {                           
 269   4                case RECV_STX:         // Receive STX and answer DLE
 270   4                                                               if (c == STX)
 271   4                                           { 
 272   5                                                                 RecvState = RECV_ADDR0;
 273   5                                                                 START_T0(T_533_ms);
 274   5                                                               }
 275   4                                                               else
 276   4                                           {
 277   5                                                                 CALL_isr_T0() ;
 278   5                                           };
 279   4                                                       break;
 280   4       
 281   4            case RECV_ADDR0:       
 282   4                                                               if (c ==  ADDR)//0xd2)//MeterNum.chrX[3])
 283   4                                           {
 284   5                                     RecvState = RECV_ADDR1;
 285   5                                                                 START_T0(T_533_ms);
 286   5                                                               }
 287   4                                                               else
 288   4                                           {
 289   5                                                                 CALL_isr_T0() ;
 290   5                                           };
 291   4                                                       break;
 292   4            case RECV_ADDR1:       
 293   4                                                               if (c == 0x02)//MeterNum.chrX[2])
 294   4                                           {
 295   5                                     RecvState = RECV_ADDR2;
 296   5                                                                 START_T0(T_533_ms);
 297   5                                                               }
 298   4                                                               else
 299   4                                           {
C51 COMPILER V7.05   MMM                                                                   01/30/2003 18:32:34 PAGE 6   

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

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

 424   5                                                  TI = FALSE;
 425   5      
 426   5                                                                      SBUF = ETX;
 427   5                                                                      while (!TI);
 428   5                                                  TI = FALSE;
 429   5                                                                      RecvState = RECV_DLE_OR_NAK ;
 430   5                                                  START_T0(T_533_ms);
 431   5                                      En485 = RECV;
 432   5                                      //Ir_En = RECV;
 433   5                                                               }
 434   4                                                               else
 435   4                                                               {
 436   5                                                                 CALL_isr_T0() ;
 437   5                                                               };
 438   4                                                               break;
 439   4      
 440   4            case RECV_DLE_OR_NAK: //Recieve answer from HOST
 441   4                                                               if ( c == DLE)
 442   4                                                               {
 443   5                                                                 SendOk = TRUE;
 444   5                                                                 SendReady = FALSE;
 445   5                                                                 RecvReady = TRUE;
 446   5                                                                 RecvState = RECV_STX;
 447   5                                                               }
 448   4                                                               else 
 449   4                                                               {
 450   5                                                                 SendOk = FALSE;
 451   5                                                                 SendReady = TRUE;
 452   5                                                                 RecvReady = FALSE;
 453   5                                                                 CALL_isr_T0() ;
 454   5                                                               };
 455   4                                   En485 = RECV;
 456   4                                   //Ir_En = RECV;
 457   4                                                               break;
 458   4      
 459   4                default:                           
 460   4                                       CALL_isr_T0() ;
 461   4                                                       break;
 462   4      
 463   4              };//end of case
 464   3         }  //end of if(RecvReady)
 465   2        };//end of if(RI)
 466   1      
 467   1      
 468   1        if ( TI && !RI )
 469   1        {  
 470   2               TI = 0 ;
 471   2               if ( SendReady )
 472   2               {  
 473   3                      SendReady = FALSE ;
 474   3                      
 475   3                  bcc = SerBuffer[0];   //计算BCC
 476   3                  for ( i = 1 ; i < SerBuffer[2]+3 ; i++ )
 477   3                      {

⌨️ 快捷键说明

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