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

📄 rf_manchester.lst

📁 单片机曼彻斯特解码程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 464   2                      DataHeadbuf.intHigh++;                  //是高电平就自动加1,找出字头(9个1)
 465   2              }
 466   1              else if(HFHData==0)
 467   1              {                                       
 468   2                      DataHeadbuf.intLow++;                   //是低电平判断高电平是否有9个连续的1
 469   2                      if(DataHeadbuf.intHigh!=9)
 470   2                      {                               
 471   3                              DataHeadbuf.intHigh=0;          //无连续9个1,说明数据头不对,丢弃从新检测
 472   3                              DataHeadbuf.intLow=0;
 473   3                      }
 474   2                      else
 475   2                      {                               
 476   3                              OS_Status=Start_Check;          //是字头则改变状态到数据接收检测,并清高电平个数从新计数
 477   3                              DataHeadbuf.intHigh=0;
 478   3                              Push_Data(0x00);                        //数据保存
 479   3                      }
 480   2              }
 481   1              else if(HFHData==3)
 482   1              {                                                                       //检测错误,清0从新检测
 483   2                      DataHeadbuf.intHigh=0;
 484   2                      DataHeadbuf.intLow=0;
 485   2                      mcsbuf.Head=mcsHeadNull;
 486   2              }
 487   1      }
 488          
 489          
C51 COMPILER V7.50   RF_MANCHESTER                                                         05/31/2006 22:17:06 PAGE 9   

 490          /*--------------------------------------------------------------------------------
 491          函数:  DataRecvHandle(uchar DRHData)
 492          功能:  处理数据接收(9个1之后的55位数据)
 493          引用值:uchar DRHData
 494          返回值:无
 495          --------------------------------------------------------------------------------*/
 496          void DataRecvHandle(uchar DRHData)
 497          {
 498   1              if(DRHData==1)
 499   1              {
 500   2                      DataHeadbuf.intHigh++;                  //是高电平就自动加1,找出字头(9个1)
 501   2                      Push_Data(0x01);                                        //数据保存              
 502   2              }
 503   1              else if(DRHData==0)
 504   1              {                                       
 505   2                      DataHeadbuf.intLow++;                   //是低电平判断高电平是否有9个连续的1
 506   2                      Push_Data(0x00);                                        //数据保存
 507   2              }
 508   1              else if(DRHData==3)
 509   1              {                                                                       //检测错误,清0从新检测
 510   2                      OS_Status=Start_Find;
 511   2                      DataHeadbuf.intHigh=0;
 512   2                      DataHeadbuf.intLow=0;
 513   2                      mcsbuf.Head=mcsHeadNull;
 514   2              }
 515   1      }
 516          
 517          /*--------------------------------------------------------------------------------
 518          函数:
 519          功能:
 520          引用值:
 521          返回值:
 522          --------------------------------------------------------------------------------*/
 523          
 524          void Main(void)
 525          {
 526   1              uchar   temp;
 527   1              InitReg();
 528   1              TR0     = 1;
 529   1              EA = 1;
 530   1              High_Timer = 0;
 531   1              Low_Timer = 0;
 532   1      
 533   1              FeedDog();
 534   1              
 535   1              while(1)
 536   1              {
 537   2                      IRbitPri = IRbitNext;
 538   2                      IRbitPri = IRbitNext;
 539   2                      IRbitNext = IRout;
 540   2                      IRbitNext = IRout;
 541   2      
 542   2                      FeedDog();
 543   2                      
 544   2                      if(IRbitPri!=IRbitNext)                 //有跳变处理
 545   2                      {
 546   3                              IRbitNext = IRout;
 547   3                              IRbitNext = IRout;
 548   3                              IRbitNext = IRout;
 549   3                              IRbitNext = IRout;
 550   3                              IRbitNext = IRout;
 551   3                              IRbitNext = IRout;
C51 COMPILER V7.50   RF_MANCHESTER                                                         05/31/2006 22:17:06 PAGE 10  

 552   3                              IRbitNext = IRout;
 553   3                              IRbitNext = IRout;
 554   3                              IRbitNext = IRout;
 555   3      
 556   3                              if(IRbitPri!=IRbitNext)                 //有跳变处理
 557   3                              {
 558   4                                      FeedDog();
 559   4      
 560   4                                      Low_Timer=TH0;
 561   4                                      temp=TL0;
 562   4                                      High_Timer=TH0;                         //低电平时间计算
 563   4                                      if(Low_Timer==High_Timer)
 564   4                                      {
 565   5                                              Low_Timer=temp+High_Timer*256;                          
 566   5                                      }
 567   4                                      else
 568   4                                      {
 569   5                                              Low_Timer=TL0+High_Timer*256;
 570   5                                      }
 571   4                                      High_Timer=Low_Timer;
 572   4                                      TL0=0x00;
 573   4                                      TH0=0x00;
 574   4                              
 575   4                                      if((IRbitPri==0)&&(IRbitNext==1))                               //如果前一位为低电平
 576   4                                      {
 577   5                                              temp=Manchster(mcsLowTimer);
 578   5                                      }
 579   4                                      else if((IRbitPri==1)&&(IRbitNext==0))                  //如果前一位是高电平
 580   4                                      {
 581   5                                              temp=Manchster(mcsHighTimer);
 582   5                                      }
 583   4      
 584   4                                      if(OS_Status==Start_Find)
 585   4                                      {                                                       //数据头检测
 586   5                                              HeadFindHandle(temp);
 587   5                                      }
 588   4                                      else if(OS_Status==Start_Check)
 589   4                                      {
 590   5                                              DataRecvHandle(temp);
 591   5                                      }
 592   4                              }
 593   3                      }               
 594   2              } 
 595   1      }
 596          
 597          /*--------------------------------------------------------------------------------
 598          函数:
 599          功能:
 600          引用值:
 601          返回值:
 602          --------------------------------------------------------------------------------*/
 603           /*             
 604                          if(IRbit)
 605                          {
 606                                  IRbitPri = IRbitNext;
 607                                  IRbitNext = IRbit;
 608                                  IRbitNext = IRbit;
 609                                  IRbitNext = IRbit;
 610                                  IRbitNext = IRbit;
 611                                  IRbitNext = IRbit;
 612                                  
 613                                  if(IRbitPri!=IRbitNext)         //有跳变处理
C51 COMPILER V7.50   RF_MANCHESTER                                                         05/31/2006 22:17:06 PAGE 11  

 614                                  { 
 615                                          Low_Timer=TH0;
 616                                          temp=TL0;
 617                                          High_Timer=TH0;                 //低电平时间计算
 618                                          if(Low_Timer==High_Timer)
 619                                          {
 620                                                  Low_Timer=temp+High_Timer*256;
 621                                          }
 622                                          else
 623                                          {
 624                                                  Low_Timer=TL0+High_Timer*256;
 625                                          }
 626          
 627                                          TL0=0x00;
 628                                          TH0=0x00;
 629          
 630                                          temp=Manchster(mcsLowTimer);
 631          
 632                                          if(OS_Status==Start_Find)
 633                                          {                                               //数据头检测
 634                                                  HeadFindHandle(temp);
 635                                          }
 636                                          else if(OS_Status==Start_Check)
 637                                          {
 638                                  
 639                                          }
 640                                  }
 641                          }       
 642                          else// if((IRbit1==0)&&(OS_Change!=HL_NoChange))
 643                          {
 644                                  IRbitPri = IRbitNext;
 645                                  IRbitNext = IRbit;
 646                                  IRbitNext = IRbit;
 647                                  IRbitNext = IRbit;
 648                                  IRbitNext = IRbit;
 649                                  IRbitNext = IRbit;
 650                                  if(IRbitPri!=IRbitNext)         //有跳变处理
 651                                  { 
 652                                          Low_Timer=TH0;
 653                                          temp=TL0;
 654                                          High_Timer=TH0;
 655                                          if(Low_Timer==High_Timer)
 656                                          {
 657                                                  High_Timer=temp+High_Timer*256;
 658                                          }
 659                                          else
 660                                          {
 661                                                  High_Timer=TL0+High_Timer*256;
 662                                          }
 663                                          
 664                                          TL0=0x00;
 665                                          TH0=0x00;
 666          
 667                                          temp=Manchster(mcsHighTimer);
 668          
 669                                          if(OS_Status==Start_Find)
 670                                          {                                               //数据头检测
 671                                                  HeadFindHandle(temp);
 672                                          }
 673                                          else if(OS_Status==Start_Check)
 674                                          {
 675                                  
C51 COMPILER V7.50   RF_MANCHESTER                                                         05/31/2006 22:17:06 PAGE 12  

 676                                          }
 677                                  }
 678                          }*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1574    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     21       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
   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 + -