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

📄 saa3010.lst

📁 SAA3010红外线遥控解码,供大家参考
💻 LST
字号:
C51 COMPILER V7.07   SAA3010                                                               05/12/2007 15:07:19 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE SAA3010
OBJECT MODULE PLACED IN SAA3010.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE SAA3010.c DEBUG OBJECTEXTEND

stmt level    source

   1          #define SAA3010_GLOBALS
   2          #include <reg51.h>
   3          #include "SAA3010.h"
   4          #include "main.h"
   5          
   6          
   7          //========================================================================================================
             -===
   8          // 该函数的作用是每调用一次就在temp1-4组成的32bit长度的最低位上移入
   9          // 一个0或者1,数据由bitdata确定
  10          void SAA3010_cycle_data(unsigned char bitdata)
  11          {
  12   1              temp4=temp4<<1;
  13   1              if((temp3&0x80)==1) temp4=temp4|0x01;
  14   1              else temp4=temp4&0xfe;
  15   1      
  16   1              temp3=temp3<<1;
  17   1              if((temp2&0x80)==1) temp3=temp3|0x01;
  18   1              else temp3=temp3&0xfe;
  19   1      
  20   1              temp2=temp2<<1;
  21   1              if((temp1&0x80)==1) temp2=temp2|0x01;
  22   1              else temp2=temp2&0xfe;
  23   1      
  24   1              temp1=temp1<<1;
  25   1              if(bitdata==1) temp1=temp1|0x01;
  26   1              else temp1=temp1&0xfe;
  27   1      }
  28          
  29          //========================================================================================================
             -===
  30          // 解码出错返回1,对则返回0
  31          unsigned char SAA3010_decode(void)
  32          {
  33   1      //--------------------------------------------------------------------------------------------------------
             ----
  34   1              unsigned char count=0;
  35   1      
  36   1              TR1=1;                                 // 启动计时
  37   1              while(1)
  38   1              {
  39   2                      while(ir_receive==0);                  // 等待电平变高,不需要超时监测
  40   2                      TR1=0;                                 // 高电平(对发射电路而言)测试结束                
  41   2                      high_level_time=TH1*256+TL1;           // 记录高电平的数据
  42   2      //--------------------------------------------------------------------------------------------------------
             ----
  43   2                      TH1=0;  TL1=0; TR1=1;                  // 启动对低电平的测试
  44   2      //--------------------------------------------------------------------------------------------------------
             ----
  45   2      // 处理低电平           
  46   2                      if((high_level_time<750)||(high_level_time>1800)) return 1;    // 不是合格的电平
  47   2                      if((high_level_time>750)&&(high_level_time<1000)){SAA3010_cycle_data(0);count+=1;} // 移入一个0
  48   2                      if((high_level_time>1500)&&(high_level_time<1800)) {SAA3010_cycle_data(0);SAA3010_cycle_data(0);count+=2
             -;} // 移入两个0
  49   2                      
C51 COMPILER V7.07   SAA3010                                                               05/12/2007 15:07:19 PAGE 2   

  50   2                      while(ir_receive==1)                   // 等待电平变低
  51   2                      {
  52   3                              if(TH1>0x08) break;                // 高电平超时,正常情况下是测试结束,异常时则是出错
  53   3                      }
  54   2                  
  55   2                      TR1=0;                                 // 低电平(对发射电路而言)测试结束
  56   2                      if(TH1>0x08) {break;}
  57   2                      low_level_time=TH1*256+TL1;            // 保存低电平的数据
  58   2      
  59   2                      TH1=0;  TL1=0;  TR1=1;   // 为增加计时的准确性,数据的处理都是在计时过程里
  60   2      //--------------------------------------------------------------------------------------------------------
             ----
  61   2      // 处理高电平
  62   2                      if((low_level_time<750)||(low_level_time>1800)) return 1;    // 不是合格的电平
  63   2                      if((low_level_time>750)&&(low_level_time<1000)) {SAA3010_cycle_data(1); count+=1;} // 移入一个0
  64   2                      if((low_level_time>1500)&&(low_level_time<1800)) {SAA3010_cycle_data(1); SAA3010_cycle_data(1);count+=2;
             -} // 移入两个0
  65   2              }                           
  66   1              
  67   1              if(count==26) {SAA3010_cycle_data(1); count++;}
  68   1              if(count!=27) return 1;
  69   1              led=0;  
  70   1      
  71   1      // 提取按健信息
  72   1              key_code=0;
  73   1              if((temp1>>1)&0x01) key_code=key_code|0x01;
  74   1              else key_code=key_code&0xfe;
  75   1              if((temp1>>3)&0x01) key_code=key_code|0x02;
  76   1              else key_code=key_code&0xfd;
  77   1              if((temp1>>5)&0x01) key_code=key_code|0x04;
  78   1              else key_code=key_code&0xfb;
  79   1              if((temp1>>7)&0x01) key_code=key_code|0x08;
  80   1              else key_code=key_code&0xf7;
  81   1              if((temp2>>1)&0x01) key_code=key_code|0x10;
  82   1              else key_code=key_code&0xef;
  83   1              if((temp2>>3)&0x01) key_code=key_code|0x20;
  84   1              else key_code=key_code&0xdf;
  85   1      
  86   1      // 提取系统信息
  87   1              sys_code=0;
  88   1              if((temp2>>5)&0x01) sys_code=sys_code|0x01;
  89   1              else sys_code=sys_code&0xfe;
  90   1              if((temp2>>7)&0x01) sys_code=sys_code|0x02;
  91   1              else sys_code=sys_code&0xfd;
  92   1      
  93   1              if((temp3>>1)&0x01) sys_code=sys_code|0x04;
  94   1              else sys_code=sys_code&0xfb;
  95   1              if((temp3>>3)&0x01) sys_code=sys_code|0x08;
  96   1              else sys_code=sys_code&0xf7;
  97   1              if((temp3>>5)&0x01) sys_code=sys_code|0x10;
  98   1              else sys_code=sys_code&0xef;
  99   1              if((temp3>>7)&0x01) sys_code=sys_code|0x20;
 100   1              else sys_code=sys_code&0xdf;
 101   1      
 102   1              data_available=1;
 103   1              return 0;
 104   1      }
 105          //========================================================================================================
             -===


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V7.07   SAA3010                                                               05/12/2007 15:07:19 PAGE 3   

   CODE SIZE        =    598    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -