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

📄 test.lst

📁 使用2051单片机对2272进行解码的完全代码,可直接拿来修改成很强的遥控器.
💻 LST
字号:
C51 COMPILER V7.04   TEST                                                                  10/30/2004 17:52:00 PAGE 1   


C51 COMPILER V7.04, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN test.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE test.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          
   3          
   4          sbit LED1 = P1^2;
   5          sbit LED2 = P1^4;
   6          sbit IR_IN = P3^2;
   7          
   8          void init_serialcomm(void)
   9          {
  10   1          SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr 
  11   1          TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload 
  12   1          PCON |= 0x80;       //SMOD=1; 
  13   1          TH1   = 0xFF;       //Baud:4800  fosc=11.0592MHz  :f4
  14   1          //IE   |= 0x90;       //Enable Serial Interrupt 
  15   1          TR1   = 1;          // timer 1 run 
  16   1              TI=1; 
  17   1      }
  18          
  19          
  20          unsigned char ir_timer=0,jiffies=0;
  21          void clock_timer(void) interrupt 1 using 1{
  22   1              ir_timer++;
  23   1              jiffies++;
  24   1      }
  25          
  26          void clock_init(void){
  27   1              jiffies = 0;
  28   1              TMOD=0x02;
  29   1      //      TH0=TL0=0x9b;//12M
  30   1      //      TH0=TL0=0x7a;//16M
  31   1      //      TH0=TL0=0x75;//16.59M
  32   1      //      TH0=TL0=0x72;//17M
  33   1      //      TH0=TL0=0x37;//24M
  34   1              TH0=TL0=0xa0;//22M
  35   1              EA=1;
  36   1              ET0=1;
  37   1      
  38   1              TR0=1;
  39   1      }
  40          
  41          unsigned char ir_step=0;
  42          unsigned int ir_addr;
  43          unsigned char ir_data;
  44          void ir_test(void){
  45   1              bit ir_status,ir_last_status;
  46   1              unsigned char __ir_timer;
  47   1      
  48   1              ir_status=IR_IN;
  49   1      
  50   1              if (ir_last_status==ir_status){//超时处理
  51   2                      if (ir_step>0 && ir_timer>0xb0){
  52   3                              ir_timer=0;
  53   3                              ir_step=0;
  54   3                      }
  55   2                      return;
C51 COMPILER V7.04   TEST                                                                  10/30/2004 17:52:00 PAGE 2   

  56   2              }
  57   1      
  58   1              __ir_timer=ir_timer;
  59   1              ir_timer=0;
  60   1              ir_step++;
  61   1              ir_last_status=ir_status;
  62   1      
  63   1              if(ir_step < 50 && __ir_timer > 0x18){//误码处理,提前出现数据码以外的非正常宽度编码,正常数据码宽度应小于0
             -x10
  64   2                      ir_step = 0;
  65   2                      return;
  66   2              }
  67   1      
  68   1      //0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 94
  69   1      //0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 94
  70   1      
  71   1              if(ir_step <= 32){
  72   2                      if((ir_step & 3)==2 || (ir_step & 3)==3){
  73   3                              ir_addr >>= 1;
  74   3                              if(__ir_timer < 0xa)
  75   3                                      ir_addr &= 0x7fff;
  76   3                              else
  77   3                                      ir_addr |= 0x8000;
  78   3                      }
  79   2                      if(ir_step==16){
  80   3                              TI=0;
  81   3                              SBUF=(ir_addr>>8);
  82   3                      }
  83   2                      if(ir_step==32){
  84   3                              TI=0;
  85   3                              SBUF=(ir_addr>>8);
  86   3                      }
  87   2              }else
  88   1              if(ir_step>32 && ir_step<=48){
  89   2                      if((ir_step & 1)==0){
  90   3                              ir_data >>= 1;
  91   3                              if(__ir_timer < 0xa)
  92   3                                      ir_data &= 0x7f;
  93   3                              else
  94   3                                      ir_data |= 0x80;
  95   3                      }
  96   2                      if(ir_step==48){
  97   3                              TI=0;
  98   3                              SBUF=(ir_data);
  99   3                      }
 100   2              }else
 101   1              if(ir_step>48 && ir_step<=50){
 102   2                      if(ir_step==50){
 103   3                              ir_timer=0;
 104   3                              ir_step=0;
 105   3                              TI=0;
 106   3                              if (__ir_timer > 0x90 && __ir_timer < 0xa0)
 107   3                                      SBUF=0xaa;
 108   3                              else
 109   3                                      SBUF=0x55;
 110   3                      }
 111   2              }
 112   1      }
 113          
 114          enum  eepromtype  {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
 115          bit   RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
 116                                          unsigned char ControlByte,enum eepromtype EepromType);
C51 COMPILER V7.04   TEST                                                                  10/30/2004 17:52:00 PAGE 3   

 117          
 118          unsigned char buf[8]={1,2,3,4,5,6,7,9};
 119          void eeprom_read_test(unsigned char page){
 120   1              unsigned char i,j,c;
 121   1              for(i=0; i<32; i++){
 122   2                      for(j=0; j<8; j++){
 123   3                              buf[j]=1;
 124   3                      }
 125   2                      c = 0xa1 | page<<1;
 126   2                      if(RW24XX(buf, 8, (unsigned int)((i*8)), c, M2408)){
 127   3                              TI=0;
 128   3                              SBUF=0x55;
 129   3                      }
 130   2                      for(j=0; j<8; j++){
 131   3                              while(!TI);
 132   3                              TI=0;
 133   3                              SBUF=buf[j];
 134   3                      }
 135   2              }
 136   1      }
 137          void eeprom_write_test(unsigned char page){
 138   1              unsigned char i,j,c;
 139   1              for(i=0; i<32; i++){
 140   2                      for(j=0; j<8; j++){
 141   3                              buf[j]=j<<1;
 142   3                      }
 143   2                      c = 0xa0 | page<<1;
 144   2                      RW24XX(buf, 8, (unsigned int)(i*8), c, M2408);
 145   2              }
 146   1      }
 147          
 148          void wait(unsigned int t){
 149   1              while(t--)
 150   1                      t=t;
 151   1      }
 152          
 153          
 154          void clock_test(){
 155   1              unsigned char i,d;
 156   1              unsigned char pdata *source=0;
 157   1      //      for(i=0; i<128; i++){
 158   1      //              source=i;
 159   1      //              *source = i>>1;
 160   1      //      }
 161   1              for(i=0; i<128; i++){
 162   2                      source=i;
 163   2                      d=*source;
 164   2                      while(!TI);
 165   2                      TI=0;
 166   2                      SBUF=d;
 167   2              }
 168   1      }
 169          
 170          void setup12887(unsigned char *p);
 171          void read12887(unsigned *p);
 172          void start12887(void);
 173          
 174          void main(){
 175   1              clock_init();
 176   1              init_serialcomm();
 177   1              wait(60000);
 178   1              wait(60000);
C51 COMPILER V7.04   TEST                                                                  10/30/2004 17:52:00 PAGE 4   

 179   1              wait(60000);
 180   1      
 181   1              while(0){
 182   2                      ir_test();
 183   2              }
 184   1              {
 185   2                      unsigned char p_w;
 186   2                      bit ir_status,ir_last_status;
 187   2                      LED1=0;
 188   2                      LED2=1;
 189   2                      ir_status=ir_last_status=1;
 190   2              while(1){
 191   3                      while(1){
 192   4                              ir_status=IR_IN;
 193   4                              if (ir_last_status!=ir_status){
 194   5                                      ir_last_status=ir_status;
 195   5                                      break;
 196   5                              }
 197   4                      }
 198   3                      p_w=jiffies;
 199   3                      jiffies=0;
 200   3      
 201   3                      while(!TI);
 202   3                      TI=0;
 203   3                      SBUF=p_w;
 204   3                      LED1=!LED1;
 205   3                      LED2=!LED2;
 206   3              }
 207   2              }
 208   1      }
 209          
 210          
 211          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    524    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       4
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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