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

📄 rf2272.lst

📁 解码2272模拟程序,调试通过,需要者也可和我联系
💻 LST
字号:
C51 COMPILER V7.08   RF2272                                                                09/12/2007 11:40:14 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE RF2272
OBJECT MODULE PLACED IN RF2272.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE RF2272.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********** 用单片机代替PT2272解码PT2262的程序 **********
   2          晶振: 12MHz
   3          开始时间: 2007-09-07 15:20
   4          最后修改: 
   5          
   6          *********************************** 说   明 ***********************************
   7          接收到的信号为发送信号的反码因为每检测到按键有效一次PT2262 都发送四次编码我们可以
   8          利用这一特点来解码先检测有没有接收到信息当有的时候我们就去掉第一次编码的信号检测5ms 的
   9          高电平来检测编码的开始信号接收到5ms 的高电平后才开始解码我们可以发现每个码的长度都是1.2ms
  10          左右每一个编码都是由低电平开始然后到高电平又到低电平又回到高电平我们从第一个高电平
  11          的宽度可以把1 码区分出来剩下的悬空码和0 码可以从第二个高电平的宽度区分出来
  12          具体的单片机译码方法如下
  13          由高电平开始检测到下降沿时就延时300us 读取接收的状态记为A0 然后再检测下一个下降沿
  14          降沿后又延时300us 读取接收的状态记为A1 这样就把一个编码给译出来了
  15          A0 A1 和悬空1 码0 码的关系如下:
  16          A0 A1 代码
  17          0 0 1 码
  18          0 1 错误
  19          1 0 悬空
  20          1 1 0 码
  21          ******************************************************************************/
  22          #include <my_89x51.h>
  23          #include <intrins.h>
  24          #define uint unsigned int
  25          #define ulong unsigned long
  26          #define uchar unsigned char
  27          
  28          
  29          uint  key_high_low;
  30          uint key1;
  31          uchar key_data;
  32          //位定义
  33          sbit W_REM =P3^3; //遥控接收输入脚
  34          sbit LEDR =P1^3; 
  35          sbit LEDG =P1^4;
  36          bit bdata error;
  37          bit bdata recv_flg, //接收正确位标志(1:正确 0:错误)
  38          //因为当按住PT2262的按键不放的时候PT2262会把编码不断的送出
  39          //设置lianji_flg位用来检测按键有没有放开过如果没有放开则不再响应
  40          lianji_flg; //按键没有放开过标志(1:连击 0:点击)
  41          uchar addr_user_a0; //设定的8位地址密码A0
  42          uchar addr_user_a1; //设定的8位地址密码A1
  43          
  44          
  45          //------------------------------------- sub functon ----------------------------------------------
  46          
  47          //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  48          void d1ms (uint ljh_in)    /*1mS延时函数*/
  49          {
  50   1       uint data ljh_i;
  51   1       uchar data ljh_j;
  52   1       for(ljh_i=0;ljh_i<ljh_in;ljh_i++){
  53   2       for(ljh_j=0;ljh_j<108;ljh_j++){
  54   3       _nop_(); _nop_();
  55   3       _nop_(); _nop_();
C51 COMPILER V7.08   RF2272                                                                09/12/2007 11:40:14 PAGE 2   

  56   3       _nop_(); _nop_();
  57   3       }
  58   2       }
  59   1      }
  60          //<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<
  61          void ledg()
  62          {
  63   1                      d1ms(100);
  64   1                      LEDG=!LEDG;
  65   1                      d1ms(100);
  66   1                      LEDG=!LEDG;
  67   1                      d1ms(100);
  68   1                      LEDG=!LEDG;
  69   1                      d1ms(100);
  70   1                      LEDG=!LEDG;
  71   1      }
  72          //<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<
  73          void ledr()
  74          {
  75   1                      d1ms(50);
  76   1                      LEDR=!LEDR;
  77   1                      d1ms(50);
  78   1                      LEDR=!LEDR;
  79   1                      d1ms(50);
  80   1                      LEDR=!LEDR;
  81   1      }
  82          
  83          //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  84          void d50us(uchar n) //50uS延时
  85          {
  86   1              uchar data i,j;
  87   1              for(j=n;j;j--) { //[1T+2T+(2i+2)T+1T+2T]*n+1T+2T+2T=(2i+8)*n+5T
  88   2                      for(i=21;i;i--) ;//延时2T+2T*i=(2i+2)T
  89   2              }
  90   1      }
  91          
  92          //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  93          PT2272_deco() //解码
  94          {
  95   1              uchar i;
  96   1              uint j;
  97   1              bit time;
  98   1              bit Key_Low_Highbit;
  99   1              error  =0;
 100   1              time = 0;
 101   1              j =0;
 102   1              recv_flg =0;
 103   1              if(recv_flg)    ;
 104   1              else {//先找出接收码的开头即5ms左右的高电平 //设置高电平时间为4~6ms//检测和等待4ms的高电平
 105   2                      for(i=80;i;i--) { //延时4mS
 106   3                              if(!W_REM) i=80;
 107   3                              else d50us(1);
 108   3      
 109   3                              j++;
 110   3                              if(j>= 400 ) {time =1;break;}//超时退出5ms+25ms
 111   3                              }
 112   2      //等待在2ms内接收到的低电平 --------------------------------------------
 113   2                      for(i=40;i;i--) { //延时4mS
 114   3                              if(!W_REM) break;
 115   3                              else d50us(1);
 116   3                              }
 117   2      
C51 COMPILER V7.08   RF2272                                                                09/12/2007 11:40:14 PAGE 3   

 118   2      //4ms到6ms内接收到下降沿则跳去解码否则返回
 119   2      //超出6ms接收错误返回
 120   2                      if(time|!i) {
 121   3      //                      ledg();
 122   3                              recv_flg =0; //清按键没有放开过标志
 123   3                              error = 1;
 124   3                              }//干扰信号处理
 125   2      //等待300us后采集接收信号
 126   2                      key_high_low = 0;
 127   2                      key_data = 0;
 128   2                      if (!error){
 129   3                      ledg();
 130   3      //进入代码接收部分 24个码位 8位地址4位数据
 131   3      /*              for(i=0;i<12;i++) {
 132   3                              LEDG=!LEDG;
 133   3                              d50us(6);
 134   3                              if(W_REM) {
 135   3                                      key_data |=0x01;
 136   3                                      }
 137   3                              key_data <<=0x01;
 138   3      //左移一位,从key_data 到key_high_low
 139   3                              Key_Low_Highbit = key_data & 0x80;
 140   3                              key_high_low <<= 1;
 141   3                              if(Key_Low_Highbit)
 142   3                                      key_high_low += 0x01;
 143   3      //等待第二个下降沿
 144   3                              while(!W_REM) ;
 145   3                              while(W_REM) ;
 146   3      //等待300us后采集接收信号
 147   3                              d50us(6);
 148   3                              if(W_REM) {
 149   3                                      key_data |=0x01;
 150   3                                      }
 151   3      //等待第二个码值的下降沿
 152   3                              key_data <<=0x01;
 153   3              
 154   3                              Key_Low_Highbit = key_data & 0x80;
 155   3                              key_high_low <<= 1;
 156   3                              if(Key_Low_Highbit)
 157   3                                      key_high_low += 0x01;
 158   3              
 159   3                              while(!W_REM) ; 
 160   3                              while(W_REM) ;//LEDG=~LEDG;
 161   3                              }//12次接收
 162   3      */      }
 163   2              
 164   2              }
 165   1              key1 = key_high_low;
 166   1              if (key_high_low == 0xaaaa){
 167   2              ledg();
 168   2              recv_flg = 1;
 169   2              lianji_flg =1;}
 170   1              else {
 171   2              recv_flg = 0;
 172   2              lianji_flg = 0;}
 173   1              
 174   1      
 175   1      }
*** WARNING C280 IN LINE 98 OF RF2272.C: 'Key_Low_Highbit': unreferenced local variable
 176          //<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<
 177          void remote_2272_deco() //接收遥控码(解码程序)
 178          {
C51 COMPILER V7.08   RF2272                                                                09/12/2007 11:40:14 PAGE 4   

 179   1      uint i;
 180   1      //检测50ms内有没有编码接收
 181   1              for(i=1000;i;i--) {
 182   2                      if(!W_REM) {
 183   3      
 184   3                      PT2272_deco(); //解码
 185   3                      break;
 186   3                      }
 187   2                      else d50us(1); //50uS延时
 188   2              }
 189   1              recv_flg =0; //清按键没有放开过标志
 190   1      }
 191          //<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<
 192          
 193          //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 194          void work() //控制输出 //把选中的LED取反
 195          {
 196   1              if(recv_flg) { //接收不正确,退出
 197   2                      recv_flg=0; //清接收正确标志位
 198   2                      //LEDG = !LEDG;
 199   2                      d50us(200);
 200   2              }
 201   1      }
 202          //<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<
 203          
 204          // ==================================== main function ============================================
 205          void main (void)
 206          {
 207   1      //上电初始化 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 208   1      P1 =0xff;
 209   1      P3 =0xff;
 210   1      d1ms(200);
 211   1      //编码设定为:A0~A7地址编码为:悬空 +++++++++++++++++++++++++++++++++++++++++++++
 212   1      addr_user_a0 =0xaa;
 213   1      addr_user_a1 =0xaa;
 214   1                      ledr();
 215   1      
 216   1      //start: //================================================================================
 217   1              while(1) {
 218   2                      remote_2272_deco(); //接收遥控码
 219   2      //              work(); //控制输出
 220   2                      LEDR =!LEDR;
 221   2                      d1ms(200);
 222   2      
 223   2                      }
 224   1      }
 225          //==============================================================================================


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    284    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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