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

📄 rf_manchester.lst

📁 单片机曼彻斯特解码程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   RF_MANCHESTER                                                         05/31/2006 22:17:06 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE RF_MANCHESTER
OBJECT MODULE PLACED IN RF_Manchester.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE RF_Manchester.c OMF2 BROWSE DEBUG

line level    source

   1          #include <REGX51.H>
   2          #include <intrins.h>
   3          
   4          //#include <REGX51.H>
   5          #define uchar unsigned char
   6          #define uint  unsigned int
   7          #define IRout P2_1
   8          #define MaxAllLevel 600                                 //周期最大值650uS
   9          #define MaxHalfLevel 300                                //半周期最大值350uS
  10          #define MinAllLevel 400                                 //周期最小值450uS
  11          #define MinHalfLevel 100                                //半周期最小值200uS
  12          
  13          #define Start_Check 0x01                                //数据头已经检测到,开始接受剩余数据
  14          #define Start_Find 0x02                                 //正在检测数据头
  15          #define mcsHead 0x03
  16          #define mcsHeadNull     0x04
  17          #define mcsHighTimer 0x05
  18          #define mcsLowTimer 0x06
  19          
  20          uchar   code    Adj[16]={0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0};
  21          /*
  22          uchar   code    uData[]={0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
  23                                                  0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
  24                                                  0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
  25                                                  0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55};
  26          */
  27          
  28          uint    High_Timer,Low_Timer;
  29          uchar   temp1,temp2;
  30          //uchar         bdata mcsbuf=0;
  31          uchar   bdata buffer=0;
  32          sbit    IRbitPri=buffer^0;
  33          sbit    IRbitNext=buffer^1;
  34          uchar   i=0;
  35          uchar   OS_Status;
  36          uchar   RecvBuf[7];                                             //接收数据缓冲
  37          
  38          typedef struct{
  39                          uchar Head;                                             //数据检测头(一个周期的高电平)
  40                          uchar Pro;                                              //前一次读取的电平长度
  41          }Mchste_MSG;
  42          Mchste_MSG mcsbuf;
  43          
  44          typedef struct{                                                 //接收数据头标志判别(9个1)
  45                          uchar intHigh;                                  //+接收数据个数(1 or 0)
  46                          uchar intLow;
  47          }DataHead_MSG;
  48          DataHead_MSG DataHeadbuf;
  49          
  50          uchar bdata pBuf;                                               //接收数据后组合缓冲(将8位数组合成字节数据)     
  51          sbit pBuf0=pBuf^0;
  52          sbit pBuf1=pBuf^1;
  53          sbit pBuf2=pBuf^2;
  54          sbit pBuf3=pBuf^3;
  55          sbit pBuf4=pBuf^4;
C51 COMPILER V7.50   RF_MANCHESTER                                                         05/31/2006 22:17:06 PAGE 2   

  56          sbit pBuf5=pBuf^5;
  57          sbit pBuf6=pBuf^6;
  58          sbit pBuf7=pBuf^7;
  59                          
  60          void InitReg(void);
  61          uchar Calibration(void);
  62          void Send_Data(uchar SDData);
  63          uchar Manchster(uchar index);
  64          void Push_Data(uchar PDData);
  65          uchar Calibration(void);
  66          void HeadFindHandle(uchar HFHData);
  67          void DataRecvHandle(uchar DRHData);
  68          
  69          void InitReg(void)
  70          {
  71   1              SCON    =       0x40;
  72   1              TMOD    =       0x21;
  73   1              TH1             =       0xFD;
  74   1              TL1             =       0xFD;
  75   1              PCON    =       0x00;                                   //9600bps
  76   1              TR1             =       1;
  77   1              TR0             =       0;            
  78   1              TH0             =       0x00;
  79   1              TL0             =       0x00;
  80   1              IRout   =       1;
  81   1              ET0             =       1;
  82   1              ES              =       1;
  83   1              OS_Status=Start_Find;
  84   1              mcsbuf.Head=mcsHeadNull;
  85   1              DataHeadbuf.intHigh=0;
  86   1              DataHeadbuf.intLow=0;
  87   1              
  88   1      //      AUXR = 0x00;
  89   1      }
  90          
  91          
  92          /*--------------------------------------------------------------------------------
  93          函数:
  94          功能:
  95          引用值:
  96          返回值:
  97          --------------------------------------------------------------------------------*/
  98          void FeedDog(void)
  99          {
 100   1              _nop_();
 101   1              _nop_();
 102   1      //      WDTRST = 0x1E;
 103   1              _nop_();
 104   1              _nop_();
 105   1      //      WDTRST = 0xE1;
 106   1      }
 107          
 108          /*--------------------------------------------------------------------------------
 109          函数:
 110          功能:
 111          引用值:
 112          返回值:
 113          --------------------------------------------------------------------------------*/
 114          
 115          /*--------------------------------------------------------------------------------
 116          函数:
 117          功能:
C51 COMPILER V7.50   RF_MANCHESTER                                                         05/31/2006 22:17:06 PAGE 3   

 118          引用值:
 119          返回值:
 120          --------------------------------------------------------------------------------*/
 121          void T0_service(void) interrupt 1     
 122          {
 123   1      /*
 124   1      IRbit = IRout;
 125   1      i++;
 126   1      if(i==8) 
 127   1              {
 128   1              TI=0;
 129   1              SBUF=buffer;
 130   1              i=0;
 131   1              }
 132   1      buffer=buffer<<1;
 133   1      */
 134   1      } 
 135          
 136          void Send_Data(uchar SDData)
 137          {
 138   1              SBUF=SDData;
 139   1              while(TI==0);
 140   1              TI=0;
 141   1      }
 142          /*--------------------------------------------------------------------------------
 143          函数:  Manchster(uchar index)
 144          功能:  Manchster数据处理
 145          引用值:index:  mcsLowTimer:低电平数据处理;mcsHighTimer:高电平数据处理
 146          返回值:0:数据0;1:数据1;2:数据还未分析完毕,需下次才能判断;3:错误 
 147          --------------------------------------------------------------------------------*/
 148          uchar Manchster(uchar index)
 149          {
 150   1              if(index==mcsLowTimer)                                                  //处理Low_Timer
 151   1              {
 152   2                      if((Low_Timer>MinAllLevel)&&(Low_Timer<MaxAllLevel))
 153   2                      {
 154   3                              if(mcsbuf.Head==mcsHead)
 155   3                              {
 156   4                                      if((mcsbuf.Pro==0x21) || (mcsbuf.Pro==0x11))
 157   4                                      {
 158   5                                              mcsbuf.Pro=0x20;        //0x20:2个0;0x10:1个0
 159   5                                              return(0);
 160   5                                      }
 161   4                                      else
 162   4                                      {
 163   5                                              mcsbuf.Head=mcsHeadNull;
 164   5                                              return(3);                      //在没有确定起始检测位时所有数据不予理会
 165   5                                      }                                       
 166   4                              }
 167   3                              else
 168   3                              {
 169   4                                      mcsbuf.Head=mcsHeadNull;
 170   4                                      return(3);                              //在没有确定起始检测位时所有数据不予理会
 171   4                              }
 172   3                      }               
 173   2                      else if((Low_Timer>MinHalfLevel)&&(Low_Timer<MaxHalfLevel))
 174   2                      {
 175   3                              if(mcsbuf.Head==mcsHead)
 176   3                              {
 177   4                                      if(mcsbuf.Pro!=0xff)    //只要前一位数据没有处理完,则结合本次数据进行处理并返回同时置数据处理完毕标志
 178   4                                      {
 179   5                                              mcsbuf.Pro=0xff;
C51 COMPILER V7.50   RF_MANCHESTER                                                         05/31/2006 22:17:06 PAGE 4   

 180   5                                              return(0);
 181   5                                      }
 182   4                                      else
 183   4                                      {
 184   5                                              mcsbuf.Pro=0x10;
 185   5                                              return(2);                      //如果前一位数据已经处理完毕,则从新开始纪录数据便于下次处理
 186   5                                      }
 187   4                              }
 188   3                              else
 189   3                              {
 190   4                                      mcsbuf.Head=mcsHeadNull;
 191   4                                      return(3);                              //在没有确定起始检测位时所有数据不予理会
 192   4                              }
 193   3                      }
 194   2                      else if((Low_Timer<MinHalfLevel)||(Low_Timer>MaxAllLevel))
 195   2                      {
 196   3                              mcsbuf.Head=mcsHeadNull;
 197   3                              return(3);                                      //在没有确定起始检测位时所有数据不予理会                        
 198   3                      }       
 199   2              }
 200   1              else if(index==mcsHighTimer)            //处理High_Timer
 201   1              {
 202   2                      if((High_Timer>MinAllLevel)&&(High_Timer<MaxAllLevel))
 203   2                      {
 204   3                              if(mcsbuf.Head==mcsHeadNull)
 205   3                              {
 206   4                                      mcsbuf.Head=mcsHead;    //确定数据检测起始位置
 207   4                                      mcsbuf.Pro=0x21;                //0x21:2个1;0x11:1个1
 208   4                              }
 209   3                              else
 210   3                              {
 211   4                                      if((mcsbuf.Pro==0x20) || (mcsbuf.Pro==0x10))
 212   4                                      {
 213   5                                              mcsbuf.Pro=0x21;        //0x21:2个1;0x11:1个1
 214   5                                              return(1);
 215   5                                      }
 216   4                                      else
 217   4                                      {
 218   5                                              mcsbuf.Head=mcsHeadNull;
 219   5                                              return(3);                      //在没有确定起始检测位时所有数据不予理会
 220   5                                      }
 221   4                              }
 222   3                      }               
 223   2                      else if((High_Timer>MinHalfLevel)&&(High_Timer<MaxHalfLevel))
 224   2                      {
 225   3                              if(mcsbuf.Head==mcsHead)
 226   3                              {
 227   4                                      if(mcsbuf.Pro!=0xff)    //只要前一位数据没有处理完,则结合本次数据进行处理并返回同时置数据处理完毕标志
 228   4                                      {

⌨️ 快捷键说明

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