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

📄 clone.lst

📁 通过遥控红外信号在电器之间传输数据的软件
💻 LST
📖 第 1 页 / 共 2 页
字号:
 329          
 330          /* ======================================= */
 331          static void CloneStatusToWaitACK(WAIT_ACK_TYPE type)
 332          {
 333   1                g_ucCloneStatus = CLONE_WAIT_ACK;
 334   1                ucWaitAckType = type;
 335   1                wWaitRecCount = 0;
 336   1      }
 337          /* ======================================= */
 338          
 339          static void CloneStatusToRecData(void)
 340          {
 341   1              g_ucCloneStatus = CLONE_REC_AND_SEND_ACK;
 342   1              g_wCloneNVAddress = 0;                     
 343   1              g_wTVNVAddress = CLONE_TV_NV_ADDR_START;
 344   1              wWaitRecCount = 0;
 345   1      }
 346          
 347          
 348          static void CloneStatusToSendData(void)
 349          {
 350   1              g_ucCloneStatus = CLONE_SEND_DATA;
 351   1              g_wTVNVAddress = CLONE_TV_NV_ADDR_START;
 352   1              g_wCloneNVAddress = 0;
 353   1      }
 354          /* ======================================= */
 355          static void CloneClearRecMessage(void)
 356          {
 357   1      /*
 358   1          Byte i;
 359   1         for(i = 0;i < 19; i++)
 360   1         {
 361   1           irRecBuffer[i] = 0;
 362   1         }
 363   1      */  
 364   1         //clear the flag
C51 COMPILER V7.50   CLONE                                                                 10/25/2006 14:55:44 PAGE 7   

 365   1         g_ucIRRecDataType = REC_NONE;
 366   1         g_bIRDetect = 0;     
 367   1         wWaitRecCount = 0;
 368   1      }
 369          /* ======================================= */
 370          
 371          static void CloneHandler(void)
 372          {
 373   1       #ifdef DEBUG
               if(g_bIRDetect)
               {
                      g_bIRDetect = 0;
                      g_wCloneNVAddress = 0;
                      NVWriteNByte(16, &irRecBuffer[2]);
              }
               #else
 381   1      //   Byte i;
 382   1      //   Word RecNVAddress;
 383   1         Byte num;
 384   1         if(g_ucCloneStatus == CLONE_NONE)      return;
 385   1         
 386   1          switch(g_ucCloneStatus)
 387   1          {
 388   2      
 389   2          //process send data
 390   2              case CLONE_SEND_SEND_READY:             
 391   2                IRSend_SendReady();
 392   2                Delay1ms(120);
 393   2                CloneStatusToSendData();
 394   2                break;
 395   2      /*
 396   2            case CLONE_SEND_ADDR:
 397   2                 IRSend_Address(g_wTVNVAddress);
 398   2                 CloneStatusToWaitACK(SEND_ADDRESS_WAITACK);
 399   2                break;        
 400   2      */        
 401   2              case CLONE_SEND_DATA:
 402   2                 if(g_wTVNVAddress <= (CLONE_TV_NV_ADDR_END - 15))//send 16 byte data
 403   2                 {
 404   3                      NVReadNByte(16,irSendBuffer);
 405   3                      IRSend_16ByteData(irSendBuffer);
 406   3                      g_wTVNVAddress += 16;
 407   3                      g_wCloneNVAddress += 16;
 408   3                 }
 409   2                 else if(g_wTVNVAddress <= CLONE_TV_NV_ADDR_END)//send n byte data
 410   2                 {
 411   3                     num = CLONE_TV_NV_ADDR_END - g_wTVNVAddress + 1;
 412   3                      NVReadNByte(num, irSendBuffer);
 413   3                      IRSend_nByteData(num,irSendBuffer);
 414   3                      g_wTVNVAddress += num;
 415   3                 }
 416   2      //         CloneStatusToWaitACK(SEND_DATA_WAITACK);       //20061008 del 子机不回复ACK,等待100ms后继续发 
 417   2                Delay1ms(120);                  
 418   2                if(g_wTVNVAddress > CLONE_TV_NV_ADDR_END)       //数据发送完毕
 419   2                {
 420   3                      g_ucCloneStatus = CLONE_SEND_END;
 421   3                }     
 422   2              break;
 423   2      
 424   2      
 425   2              //recevie data handle
 426   2              case CLONE_SEND_REC_READY:
C51 COMPILER V7.50   CLONE                                                                 10/25/2006 14:55:44 PAGE 8   

 427   2                 IRSend_RecReady();
 428   2                CloneStatusToWaitACK(SEND_RECREADY_WAITACK);
 429   2              break;
 430   2      
 431   2              case CLONE_REC_AND_SEND_ACK:
 432   2      
 433   2                      /*
 434   2                         if(g_ucIRRecDataType == REC_DATA_ADDRESS)
 435   2                         {
 436   2                                        RecNVAddress = (irRecBuffer[2] << 8) + irRecBuffer[3];
 437   2                                        if((RecNVAddress == g_wTVNVAddress) && 
 438   2                                              VerifyCheckSum(CHECK_ADDRESS))
 439   2                                        {
 440   2                                            IRSend_RecReady();
 441   2                                        }
 442   2                                        else
 443   2                                        {
 444   2                                          g_ucCloneStatus = CLONE_ERROR;      
 445   2                                        }
 446   2                         }
 447   2                  */
 448   2                      if(g_bIRDetect)
 449   2                      {
 450   3                          if(g_ucIRRecDataType == REC_16_BYTES)
 451   3                          {
 452   4                                     if(VerifyCheckSum(CHECK_16_BYTE))
 453   4                                      {
 454   5                                             NVWriteNByte(16, irRecBuffer + 2);
 455   5                                              g_wTVNVAddress += 16;
 456   5                                              g_wCloneNVAddress += 16;
 457   5                                              IRSend_RecReady();
 458   5                                      }
 459   4                                     else
 460   4                                      {
 461   5                                            g_ucCloneStatus = CLONE_CHECKSUM_ERROR;                                   
 462   5                                      }                                  
 463   4      
 464   4                         }
 465   3                         else if(g_ucIRRecDataType == REC_N_BYTES)
 466   3                         {
 467   4                                   if(VerifyCheckSum(CHECK_N_BYTE))
 468   4                                      {
 469   5                                              num = irRecBuffer[2];//N bytes number
 470   5                                               NVWriteNByte(num, &irRecBuffer[3]);
 471   5                                               g_wTVNVAddress += num;
 472   5                                               g_wCloneNVAddress += num;
 473   5                                              IRSend_RecReady();
 474   5                                      }
 475   4                                   else
 476   4                                   {
 477   5                                          g_ucCloneStatus = CLONE_CHECKSUM_ERROR;                                                                     
 478   5                                   }
 479   4                        }                     
 480   3                     else
 481   3                      {
 482   4                            g_ucCloneStatus = CLONE_REC_CUSTOM_ERROR;                                 
 483   4                      }       
 484   3                                 
 485   3                       if(g_wTVNVAddress > CLONE_TV_NV_ADDR_END)
 486   3                       {
 487   4                              g_ucCloneStatus = CLONE_REC_END;
 488   4                       }
C51 COMPILER V7.50   CLONE                                                                 10/25/2006 14:55:44 PAGE 9   

 489   3                      CloneClearRecMessage();
 490   3                      }
 491   2                       else if(++wWaitRecCount > 30000)
 492   2                         g_ucCloneStatus = CLONE_ERROR;
 493   2              break;
 494   2      
 495   2      
 496   2              case CLONE_WAIT_ACK:
 497   2                if(g_bIRDetect)       
 498   2                {
 499   3                          if(!CheckRecAck(ucWaitAckType))
 500   3                           {
 501   4                               g_ucCloneStatus = CLONE_ERROR; 
 502   4                           }
 503   3                        CloneClearRecMessage();
 504   3                } 
 505   2               else if(++wWaitRecCount > 30000)
 506   2                   g_ucCloneStatus = CLONE_ERROR;
 507   2              break;
 508   2      
 509   2       //add for remote receive data  from another remote
 510   2              case CLONE_REC_PREPARE:
 511   2                if(g_bIRDetect)       
 512   2                {
 513   3                     if(g_ucIRRecDataType == REC_SEND_READY)
 514   3                     {
 515   4                        IRSend_RecReady();
 516   4                        CloneStatusToRecData();
 517   4                     }
 518   3                   CloneClearRecMessage();
 519   3                }
 520   2                 break;       
 521   2      
 522   2             case CLONE_SEND_END:
 523   2                      IRSend_IrEnd();
 524   2                    GlobalVariableInit();
 525   2              break;
 526   2              
 527   2             case CLONE_REC_END:
 528   2                    GlobalVariableInit();
 529   2              break;  
 530   2              
 531   2              default:
 532   2                 break;       
 533   2          }
 534   1      #endif  
 535   1      }
 536          
 537          /* ======================================= */
 538          
 539          static void LedDisplayHandler(void)
 540          {
 541   1      #ifdef DEBUG
                 if(g_bI2cError)
                 {
                       if((wMainLoopCount % 1000) == 0)      //fast blink
                        All_LED_Blink();
                 }
                else if(g_ucIRRecDataType == REC_ERROR)
                {
                       All_LED_On();
                }
C51 COMPILER V7.50   CLONE                                                                 10/25/2006 14:55:44 PAGE 10  

                else
              #endif          
 553   1        {
 554   2          switch(g_ucCloneStatus)
 555   2          {
 556   3               case CLONE_NONE:
 557   3                       LED1_On_Only();
 558   3                       break; 
 559   3      
 560   3                       /* 发送 */
 561   3                case CLONE_SEND_PREPARE:
 562   3                       LED3_On_Only();
 563   3                        break;        
 564   3                 case CLONE_SEND_SEND_READY:
 565   3                 case CLONE_SEND_DATA:
 566   3                        LED3_Blink_Only();
 567   3                        break;        
 568   3      
 569   3                        /* 接收 */
 570   3                case CLONE_REC_PREPARE:
 571   3                        LED2_On_Only();
 572   3                        break;        
 573   3                case CLONE_SEND_REC_READY:
 574   3                 case CLONE_REC_AND_SEND_ACK:
 575   3                        if((wMainLoopCount % 1500) == 0)      //slow blink
 576   3                        {
 577   4                         LED2_Blink_Only();
 578   4                        }
 579   3                        break;        
 580   3                        
 581   3      #ifdef DEBUG              
                        case CLONE_ERROR:
                                if((wMainLoopCount % 1000) == 0)      //fast blink
                                {
                                  LED4_Blink_Only();
                                }
                                break;        
                        case CLONE_REC_CUSTOM_ERROR:
                                if((wMainLoopCount % 1000) == 0)      //fast blink
                                {
                                  LED3Blink();
                                  LED4Blink();
                                }
                                break;        
                        case CLONE_CHECKSUM_ERROR:
                                if((wMainLoopCount % 1000) == 0)      //fast blink
                                {
                                  LED1Blink();
                                  LED2Blink();
                                }
                                break;                
              #else
 603   3                case CLONE_ERROR:
 604   3                case CLONE_REC_CUSTOM_ERROR:
 605   3                case CLONE_CHECKSUM_ERROR:
 606   3                        if((wMainLoopCount % 1000) == 0)      //fast blink
 607   3                        {
 608   4                          LED4_Blink_Only();
 609   4                        }
 610   3                 break;       
 611   3      #endif
 612   3                 default:
C51 COMPILER V7.50   CLONE                                                                 10/25/2006 14:55:44 PAGE 11  

 613   3                      break;
 614   3          }  
 615   2      }
 616   1      }
 617          
 618          
 619          
 620          
 621          
 622          
 623          void main(void)
 624          {
 625   1          SP = 0x60; 
 626   1       //Initial
 627   1          McuInit();
 628   1          GlobalVariableInit();       
 629   1      
 630   1       //main loop
 631   1         while(1)
 632   1         {
 633   2      //     if((wMainLoopCount % 160) == 0)//about 16ms    /* Del By dj 2006-10-16 */
 634   2           {
 635   3              KeyScan();
 636   3              KeyHandler();
 637   3           } 
 638   2            IR_CheckLeadingHander();   
 639   2            CloneHandler();
 640   2            LedDisplayHandler();        
 641   2                
 642   2            wMainLoopCount++;
 643   2         }
 644   1         
 645   1      }
 646          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1116    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       4
   IDATA SIZE       =     26    ----
   BIT SIZE         =      1    ----
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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