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

📄 saa3010.lst

📁 主要实现对专用芯片SAA3010的遥控器进行解码
💻 LST
字号:
C51 COMPILER V7.06   SAA3010                                                               12/31/2007 20:21:52 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SAA3010
OBJECT MODULE PLACED IN saa3010.OBJ
COMPILER INVOKED BY: D:\keil评估版\keil C51完全破解版\anzhuang\C51\BIN\C51.EXE saa3010.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "reg51.h"
   2          #include " intrins.h "
   3          #define uchar unsigned char
   4          uchar ykcode;                         //遥控码(14位的最后8位)
   5          bit ykok;                             //遥控数据有效标志
   6          uchar ykbnum;                         //遥控已接收位数
   7          uchar ykbtc;                          //遥控中断时 ykbtc=TH1
   8          uchar ykdelay;                        //遥控延时接收
   9          bdata uchar ykcodetemp;               //遥控临时码
  10          sbit ykcodetemp0=ykcodetemp^0;
  11          unsigned char temp;
  12          void YkInit(void);                   //遥控接收初始化
  13          unsigned char YkGetcode(void);       //返回遥控码
  14          //bit YkTest(void);                    //检查有无遥控信号
  15          
  16          uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, //0,1,2,3,4,5,6,7
  17                       0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};//8,9,A,B,C,D,E,F,-
  18          
  19          void delay1(int ms)
  20          {
  21   1       unsigned char y;
  22   1        while(ms--)
  23   1       {
  24   2        for(y = 0; y<250; y++)
  25   2        {
  26   3         _nop_();
  27   3         _nop_();
  28   3         _nop_();
  29   3         _nop_();
  30   3        }
  31   2       }
  32   1      }
  33          void main(void)
  34          {    
  35   1          unsigned char k2,k3;
  36   1              YkInit();
  37   1           P2=0xff;
  38   1               P1=255-table[1];
  39   1                                      
  40   1              while(1)                                
  41   1              {        
  42   2                 
  43   2                      k2=ykcode/16;
  44   2                      k3=ykcode%16;
  45   2                  
  46   2                      if (ykok)
  47   2                      {    
  48   3                          //for(i=0;i<2;i++)
  49   3                              //temp=ykcode; 
  50   3                               //{  
  51   3                                  P2=0xf2;
  52   3                                  P1=255-table[k3];
  53   3                                      
  54   3                                  delay1(1);
  55   3                                      P2=0xf1;
C51 COMPILER V7.06   SAA3010                                                               12/31/2007 20:21:52 PAGE 2   

  56   3                                      P1=255-table[k2];
  57   3                      delay1(1);
  58   3                                      P2=0x00;
  59   3                                      delay1(1);
  60   3                                // P2=ykcode; 
  61   3                      }               
  62   2              }
  63   1      }
  64          
  65          void YkInit(void)                       //遥控接收初始化
  66          {
  67   1              EA=1;                      //开总中断
  68   1              
  69   1              TMOD=0x11;                //TMOD T0,T1均选用方式1(16位定时)
  70   1              SCON=0x00;
  71   1              TH1=0;
  72   1              TL1=0;
  73   1              IE|=0x89;                //EA=1;ET1=1;EX0=1;
  74   1              IP|=0x01;                //PX0=1;
  75   1              TCON |= 0x41;            //TR1=1;IT0=1;        
  76   1              ykbnum=0;
  77   1              ykcodetemp=0;
  78   1              ykdelay=0;
  79   1      }
  80          
  81          
  82          //bit YkTest(void)        //检查有无遥控信号
  83          //{
  84           //       return(ykok);
  85          //}
  86          
  87          void intx0() interrupt 0 using 2        //遥控使用外部中断0,接P3.2口
  88          {
  89   1              ykbtc=TH1;TH1=0;TL1=0;TR1=1;ET1=1;
  90   1              switch(ykbnum)
  91   1              {
  92   2                      case(0):
  93   2                              ykbnum=1;
  94   2                              break;
  95   2                      case(1):
  96   2                              if(ykbtc==6)
  97   2                                      ykbnum=2;
  98   2                              else 
  99   2                                      ykbnum=0;
 100   2                              break;
 101   2                      case(2):
 102   2                              if(ykbtc==6||ykbtc==9)
 103   2                                      ykbnum=3;
 104   2                              else 
 105   2                                      ykbnum=0; 
 106   2                              break;
 107   2                      case(3):
 108   2                              if(ykbtc==9||ykbtc==6)
 109   2                                      ykbnum=4;
 110   2                              else 
 111   2                                      ykbnum=0;
 112   2                              break;
 113   2                              
 114   2                      default:
 115   2                              if(ykbnum<7)
 116   2                              {
 117   3                                      if(ykbtc==6)
C51 COMPILER V7.06   SAA3010                                                               12/31/2007 20:21:52 PAGE 3   

 118   3                                              ykbnum++;
 119   3                                      else 
 120   3                                              ykbnum=0;
 121   3                              }
 122   2                              else 
 123   2                              {
 124   3                                      if(ykbtc==6)
 125   3                                      {
 126   4                                              if(ykcodetemp0)
 127   4                                                      ykcodetemp=ykcodetemp*2+1;
 128   4                                              else 
 129   4                                                      ykcodetemp=ykcodetemp*2;
 130   4                                              ykbnum++;
 131   4                                      }
 132   3                                      else if(ykbtc==9)
 133   3                                      {        
 134   4                                              if(ykcodetemp0)
 135   4                                              {
 136   5                                                      ykbnum++;
 137   5                                                      ykcodetemp=ykcodetemp*2;
 138   5                                              }  
 139   4                                              else 
 140   4                                              {
 141   5                                                      ykbnum+=2;
 142   5                                                      ykcodetemp=ykcodetemp*2;
 143   5                                                      ykcodetemp=ykcodetemp*2+1;
 144   5                                              }
 145   4                                      }
 146   3                                      else if(ykbtc>11&&ykbtc<15)
 147   3                                      {
 148   4                                              ykbnum+=2;
 149   4                                              ykcodetemp=ykcodetemp*2;
 150   4                                              ykcodetemp=ykcodetemp*2+1;
 151   4                                      }
 152   3                                      else if(ykbtc>30)
 153   3                                              EX0=1;
 154   3                                      else 
 155   3                                              ykbnum=0;                
 156   3                              }
 157   2              }
 158   1      }  
 159          
 160          void intt1() interrupt 3 using 3        //遥控使用定时计数器1
 161          {
 162   1              if(ykdelay)
 163   1              {
 164   2                      ykdelay--;
 165   2                      EX0=0;
 166   2              }        //ykdelay不为0暂停接收
 167   1              else
 168   1              {
 169   2                  if(ykbnum==13)    //遥控码最后一位为0,补0
 170   2                  {
 171   3                          ykcode=ykcodetemp*=2;
 172   3                          ykdelay=3;
 173   3                          EX0=0;        //暂停接收
 174   3                          ykok=1;       //遥控数据有效
 175   3                  }
 176   2                  else if(ykbnum==14)       //遥控码最后一位为1,不用补
 177   2                      {
 178   3                          ykcode=ykcodetemp;
 179   3                          ykdelay=3;
C51 COMPILER V7.06   SAA3010                                                               12/31/2007 20:21:52 PAGE 4   

 180   3                          EX0=0;                //暂停接收
 181   3                          ykok=1;               //遥控数据有效
 182   3                      }
 183   2                      else 
 184   2                              EX0=1;                //ykbnum不为13,14接收无效,继续接收
 185   2                      ykbnum=0;
 186   2                      ykcodetemp=0;
 187   2              }
 188   1      }
 189          
 190          
 191          
 192          
 193          
 194          
 195          
 196          
 197          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    386    ----
   CONSTANT SIZE    =     17    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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