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

📄 main.lst

📁 读标准韦根26码的程序
💻 LST
字号:
C51 COMPILER V7.07   MAIN                                                                  07/24/2008 17:38:53 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "at89x52.h"
   2          
   3          typedef unsigned char BYTE;
   4          typedef unsigned int  WORD;
   5          
   6          BYTE state;
   7          BYTE wg0;
   8          BYTE wg1;
   9          BYTE wg2;
  10          BYTE count;
  11          BYTE cnt;
  12          bit r_done;
  13          bit firstbit;
  14          bit lastbit;
  15          bit D0_done;
  16          bit D1_done;
  17          
  18          
  19          sbit WG_IN1       = P3^2;
  20          sbit WG_IN0       = P3^3;
  21          
  22          void delay_30us(void)
  23          {
  24   1              TR0 = 0; 
  25   1              TH0 = (65536 - 20)/256; //定时30us 
  26   1              TL0 = ((65536 - 20)%256); 
  27   1              TF0 = 0; 
  28   1              ET0 = 0; 
  29   1              TR0 = 1; 
  30   1              while (!TF0) { ;} 
  31   1              TF0 = 0;
  32   1      }
  33          
  34          void Sys_init(void)  //4800
  35          {
  36   1      /* RCAP2L=0xb8;
  37   1         RCAP2H=0xFF;
  38   1         SCON=0x40;
  39   1         T2CON=0x34;*/
  40   1         SCON=0x50;                   // UART_mode=1,REN=1
  41   1         PCON=0x00;
  42   1         TMOD=0x21;
  43   1         TL1=0xfa;
  44   1         TH1=0xfa;
  45   1         TR1=1;
  46   1      //   ES=1;
  47   1         ES=0;
  48   1         IT0=1;
  49   1         IT1=1;
  50   1      //  IP=0x10;
  51   1         EX0=1;
  52   1         EX1=1;
  53   1         EA=1;
  54   1      }
  55          void IT0_int(void) interrupt 0   //D1
C51 COMPILER V7.07   MAIN                                                                  07/24/2008 17:38:53 PAGE 2   

  56          {
  57   1      /*      delay_30us();
  58   1              if(WG_IN1==0)
  59   1              {
  60   1                      delay_30us();
  61   1                      if(WG_IN1==0)
  62   1                      {
  63   1                              delay_30us();
  64   1                              if(WG_IN1==0)
  65   1                              {*/
  66   1                                      if(count==0){
  67   2                                              firstbit=1;
  68   2                                      }else if(count<9){
  69   2                                              wg0=(wg0<<1)|0x01;
  70   2                                      }else if(count<17){
  71   2                                              wg1=(wg1<<1)|0x01;
  72   2                                      }else if(count<25){
  73   2                                              wg2=(wg2<<1)|0x01;
  74   2                                      }else {lastbit=1;r_done=1;}
  75   1                                      count++;
  76   1                                      if(count==26)
  77   1                                      count=0;
  78   1      /*                      }else count=0;
  79   1                      }else count=0;
  80   1              }
  81   1              else count=0;*/
  82   1       //  cnt=3;
  83   1      }
  84          void IT1_int(void) interrupt 2   //D0
  85          {
  86   1      /*      delay_30us();
  87   1              if(WG_IN0==0)
  88   1              {
  89   1                      delay_30us();
  90   1                      if(WG_IN0==0)
  91   1                      {
  92   1                              delay_30us();
  93   1                              if(WG_IN0==0)
  94   1                              {*/
  95   1                                      if(count==0){
  96   2                                              firstbit=0;
  97   2                                      }else if(count<9){
  98   2                                      wg0=(wg0<<1)&0xfe;
  99   2                                      }else if(count<17){
 100   2                                      wg1=(wg1<<1)&0xfe;
 101   2                                      }else if(count<25){
 102   2                                      wg2=(wg2<<1)&0xfe;
 103   2                                      }else {lastbit=0;r_done=1;}
 104   1                                      count++;
 105   1                                      if(count==26)
 106   1                                              count=0;
 107   1      /*                      }else count=0;
 108   1                      }else count=0;                   
 109   1              }else count=0;*/
 110   1      //   cnt=3;
 111   1      }
 112          
 113          void T0_init(void)
 114          {
 115   1      
 116   1      //   TMOD=0x01;
 117   1         TH0=TL0=0;
C51 COMPILER V7.07   MAIN                                                                  07/24/2008 17:38:53 PAGE 3   

 118   1         ET0=1;
 119   1         TR0=1;
 120   1         IP=0x03;
 121   1         
 122   1      }
 123          
 124          void T0_Int(void) interrupt 1
 125          {
 126   1        if(cnt){
 127   2          cnt--;
 128   2          if(cnt==0){
 129   3            count=0;
 130   3          }
 131   2        }
 132   1      }
 133          
 134          void wg_process(void)
 135          {
 136   1      
 137   1      //   BYTE i;
 138   1         BYTE sum=0;
 139   1       /* for(i=0;i<8;i++)
 140   1         {
 141   1             if(wg0&(0x01<<i))
 142   1             sum++;
 143   1         }
 144   1         for(i=0;i<4;i++)
 145   1         {
 146   1             if(wg1&(0x10<<i))
 147   1                 sum++;
 148   1         }
 149   1         if((sum%2)!=firstbit){ return;}
 150   1         sum=0;
 151   1         for(i=0;i<8;i++)
 152   1         {
 153   1             if(wg2&(0x01<<i))
 154   1             sum++;
 155   1         }
 156   1         for(i=0;i<4;i++)
 157   1         {
 158   1             if(wg1&(0x01<<i))
 159   1                 sum++;
 160   1         }
 161   1         if((sum%2)==lastbit){ return;}*/
 162   1         SBUF=wg0;
 163   1         while(TI==0);
 164   1         TI=0;
 165   1         SBUF=wg1;
 166   1         while(TI==0);
 167   1         TI=0;
 168   1         SBUF=wg2;
 169   1         while(TI==0);
 170   1         TI=0;
 171   1      }
 172          
 173          void main(void)
 174          {
 175   1          Sys_init();
 176   1          T0_init();
 177   1              cnt=0;
 178   1              while(1){
 179   2             if(r_done){
C51 COMPILER V7.07   MAIN                                                                  07/24/2008 17:38:53 PAGE 4   

 180   3                    r_done=0;
 181   3                wg_process();
 182   3                        wg0=wg1=wg2=0;
 183   3             }
 184   2          }
 185   1      }


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


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

⌨️ 快捷键说明

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