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

📄 decode.lst

📁 自定简单无线协议.由AVR编码发送,51中断接收解码, 误码率低, 但通信速率较低
💻 LST
字号:
C51 COMPILER V8.02   DECODE                                                                05/06/2008 23:14:41 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE DECODE
OBJECT MODULE PLACED IN decode.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE decode.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*12MHz晶振*/
   2          #include "at89x52.h"
   3          
   4          #define uchar unsigned char
   5          #define uint unsigned int 
   6          
   7          
   8          sbit beep=P3^7;
   9          sbit inf=P3^3;
  10          sbit led1=P1^0;
  11          sbit led2=P1^1;
  12          sbit led3=P1^2;
  13          sbit led4=P1^3;
  14          sbit led5=P1^4;
  15          sbit led6=P1^5;
  16          sbit led7=P1^6;
  17          sbit led8=P1^7;
  18          sbit led9=P0^0;
  19          unsigned char rec=0;
  20          
  21          
  22          
  23          uchar key_code=0;/*key_code:遥控*/
  24          uint  buf_key_code=0;/*键值暂存对应功能看主函数*/
  25          uchar key_bit_count=0;/*键编码脉冲计数*/
  26          uint  count_T=0,buf_CT=0;/*count_T:定时器中断次数计数,buf_CT用来截获某一时间的count_T值以供判断*/
  27          uchar common_code_count=0;/*前导码脉冲计数*/
  28          uchar inf_status=0;/*inf_status:脉冲接收器所处的状态,0:无信号,1:前导码接收区,2:数据编码接收区*/
  29          uchar startkey=0;                       //the number of startkey;
  30          uchar codedata[12];
  31          uchar n;
  32          uchar frag=1;
  33          
  34          
  35          void UART_START(void)
  36          {
  37   1                           
  38   1         EA=0;
  39   1         ES=1;
  40   1         ET1=0;
  41   1         SCON=0X50;
  42   1         TMOD|=0X20;
  43   1         PCON=0X80;
  44   1         TL1=0xf3;
  45   1         TH1=0Xf3;
  46   1         TR1=1;
  47   1         EA=1;
  48   1        
  49   1      }
  50          
  51          
  52          void uart_int(void) interrupt SIO_VECTOR 
  53          {
  54   1         RI=0;
  55   1         rec=SBUF;
C51 COMPILER V8.02   DECODE                                                                05/06/2008 23:14:41 PAGE 2   

  56   1      }
  57          
  58          
  59          void Putchar(a)
  60          {
  61   1         SBUF=a;
  62   1         while(!TI);   
  63   1         TI=0;  
  64   1      } 
  65          
  66          
  67          void delay10us(uint t)
  68          {
  69   1              while(t--);
  70   1      }
  71          
  72          
  73          void delayms(uint t)
  74          {
  75   1              uint i;
  76   1              uchar j;
  77   1              for(i=0;i<t;i++)
  78   1                      for(j=125;j>0;j--);
  79   1      }
  80          
  81          
  82          
  83          void main()
  84          {
  85   1        
  86   1              EA=1;     //开全局中断
  87   1              ET0=1;    //开定时器0中断
  88   1              TMOD=0x02;//T0设置为8位自动装载模式
  89   1              TH0=0xCE; //自动装载值为202,中断间隔为50us
  90   1              TL0=0xCE; //初值为202
  91   1              IT1=1;    //INT1为下降沿触发
  92   1              EX1=1;    //开外部中断
  93   1      //      TR0=1;    //启动定时器计数
  94   1               UART_START();
  95   1              count_T=0;
  96   1              
  97   1              while(1)
  98   1              {        
  99   2               
 100   2              }
 101   1      }
 102          
 103          void Time0(void) interrupt 1
 104          { 
 105   1          count_T++;//周期累加
 106   1      //如果外部中断处于无信号区,则滤除前导宽脉冲中间的跳变毛刺
 107   1      /*      if(inf_status==0&&count_T<160)
 108   1              {
 109   1                      EX1=0;
 110   1              }
 111   1      //如果外部中断处于信号区,则滤除宽脉冲中间的跳变毛刺
 112   1              else if(inf_status==1&&count_T<12)
 113   1      {
 114   1                      EX1=0;
 115   1              }
 116   1      //渡过上升沿后重新开放外部中断
 117   1              else
C51 COMPILER V8.02   DECODE                                                                05/06/2008 23:14:41 PAGE 3   

 118   1              {
 119   1                      EX1=1;
 120   1              }*/
 121   1      //超过25ms,则锁定count_T值,等待下一次信号脉冲下降沿来解开
 122   1              if(count_T>1000)
 123   1              {
 124   2                      inf_status=0;
 125   2                      count_T=0;
 126   2              }
 127   1      }
 128          
 129          /***************************************************************
 130                          外部中断1,用于捕获红外脉冲信号
 131          ****************************************************************/
 132          void int_1(void) interrupt 2
 133          {       unsigned char i;
 134   1          
 135   1      //      led1=~led1;
 136   1              buf_CT=count_T; 
 137   1                      TR0=1;
 138   1              
 139   1              count_T=0;
 140   1          
 141   1      
 142   1      
 143   1      
 144   1              if((buf_CT>15)&&(buf_CT<120))//若收到的信号合法,则再进行以下的信号分析
 145   1              {
 146   2                      
 147   2                      if(inf_status==0)//若当前信号接收系统处于空闲状态,则标志进入前导码接收区
 148   2                      {        
 149   3                      
 150   3                                
 151   3                              if((buf_CT>60)&&(buf_CT<120))
 152   3                              {       
 153   4                              
 154   4                            
 155   4                                      
 156   4                                              startkey++;
 157   4                                      
 158   4                              
 159   4                                              if(startkey>=3)
 160   4                                      {//     led3=0 ;
 161   5                                                      inf_status=1;//标志进入数据接收区
 162   5                                                      buf_key_code=0;
 163   5                                                      key_bit_count=0;                                        
 164   5                                                      buf_CT=0;
 165   5                                                      startkey=0;
 166   5                                              }
 167   4                      
 168   4                              
 169   4                              if( (  (buf_CT>15)&&(buf_CT<25)  ) || ( (buf_CT>32)&&(buf_CT<45) ) )
 170   4                                        startkey=0;
 171   4                              
 172   4                              }
 173   3                      }
 174   2      
 175   2                      
 176   2      
 177   2                      else if(inf_status==1)//数据接收区
 178   2                      {          
 179   3                                              if((buf_CT>70)&&(buf_CT<90))
C51 COMPILER V8.02   DECODE                                                                05/06/2008 23:14:41 PAGE 4   

 180   3                                              { 
 181   4                                                      key_bit_count=0;
 182   4                                              }       
 183   3                                              
 184   3      
 185   3                                              if((buf_CT>15)&&(buf_CT<25))
 186   3                                              {//     led3=0;
 187   4                                                      codedata[key_bit_count]=0;
 188   4                                                      key_bit_count++;//数据脉冲数累加,一共有8
 189   4                                              
 190   4      
 191   4                                              
 192   4                                              }
 193   3                                              
 194   3                                              else if((buf_CT>32)&&(buf_CT<45))
 195   3                                              {         
 196   4                                                      codedata[key_bit_count]=1;
 197   4                                                      key_bit_count++;//数据脉冲数累加,一共有8
 198   4                                              
 199   4      
 200   4                                              }
 201   3              
 202   3      
 203   3      
 204   3                                      if(key_bit_count==12&&codedata[0]==0&&codedata[1]==1&&codedata[2]==0&&codedata[3]==1)
 205   3                                      {       
 206   4                                               for(i=4;i<12;i++)
 207   4                                               {       buf_key_code>>=1; 
 208   5                                                       buf_key_code=buf_key_code | (codedata[i]<<7);
 209   5                                               }
 210   4                                              
 211   4                                              led9=0;
 212   4                                              P1=buf_key_code;
 213   4                                              Putchar(buf_key_code);
 214   4                                              
 215   4                                                                                                              
 216   4                                              inf_status=0;//标志接收系统返回空闲状态
 217   4                                              key_bit_count=0;
 218   4                                              key_code=buf_key_code;
 219   4      
 220   4                                              buf_key_code=0;
 221   4                                              TR0=0;
 222   4                                      }       
 223   3      
 224   3      
 225   3                      
 226   3              /*      else if(inf_status==1)//数据接收区
 227   3                      {
 228   3                              
 229   3                              if((buf_CT>15)&&(buf_CT<25))//窄脉冲接收
 230   3                              {
 231   3                               
 232   3      
 233   3                                      buf_key_code>>=1;//接收0
 234   3                                      key_bit_count++;
 235   3                              
 236   3                                                                       
 237   3                              }
 238   3                              else if((buf_CT>32)&&(buf_CT<45))//宽脉冲接收
 239   3                              {
 240   3                                      buf_key_code>>=1;
 241   3                                      buf_key_code|=0x80;//接收1
C51 COMPILER V8.02   DECODE                                                                05/06/2008 23:14:41 PAGE 5   

 242   3                                      key_bit_count++;//数据脉冲数累加,一共有8个
 243   3                              
 244   3                              } 
 245   3      
 246   3                              if(key_bit_count>7)//若收完8位个数据脉冲,则进行以下的处理
 247   3                              {       
 248   3      
 249   3                                  P1=buf_key_code; 
 250   3                                      led9=0;
 251   3                                      inf_status=0;//标志接收系统返回空闲状态
 252   3                                      key_bit_count=0;
 253   3                                      key_code=buf_key_code;
 254   3      
 255   3                                      buf_key_code=0;
 256   3                                      TR0=0;
 257   3                                      
 258   3      
 259   3                              }       */              
 260   3                      }
 261   2                      buf_CT=0;
 262   2              } 
 263   1         EA=1;                         
 264   1       
 265   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    513    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     26    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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