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

📄 125k.lst

📁 STC89C51输出125K方波信号
💻 LST
字号:
C51 COMPILER V7.00  125K                                                                   10/11/2007 15:46:24 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE 125K
OBJECT MODULE PLACED IN 125k.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 125k.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <REG52.H>
   2          sfr T2MOD = 0xc9;
   3          
   4          sbit    speak_port = P2^5;
   5          
   6          #define time0 60  //90us
   7          #define time1 200  //300us
   8          #define time2 460  //690us
   9          
  10          //读卡头内部变量
  11          sbit rf_data1 = P1^5;
  12          bit inbak = 1;
  13          unsigned char byte_buffer[4];
  14          unsigned char currency_temp[4];
  15          unsigned int pulse_time;
  16          
  17          unsigned char eerom_delay;
  18          
  19          //MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 韦根解码 MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  20          /***等待电平跳变******************************************/
  21          bit wait_change(void)
  22          {
  23   1         unsigned char  long_time = 200;    //22.1184------ 1次为4.3us
  24   1         while(inbak == rf_data1) {if(--long_time == 0) return(0);}
  25   1      
  26   1         pulse_time = TH1;
  27   1         pulse_time = ((pulse_time << 8) & 0xff00) | TL1;
  28   1         TH1 = 0; TL1 = 0;
  29   1         inbak = rf_data1;
  30   1         return(1);
  31   1      }
  32          //***返回:读卡成功标记,成功读卡数据放在 byte_buffer[4]中 ************************
  33          bit read_IDka(void)
  34          {
  35   1         unsigned char i, j;
  36   1         unsigned char five_bit, verify_row, bit_buffer[11];
  37   1         bit verify_bit, compare_bit;
  38   1      
  39   1      start_readid:
  40   1               //CLEARWDT; 
  41   1               //确定起始标识
  42   1               if(!wait_change()) return(0);
  43   1               if((pulse_time < time1) || inbak) goto start_readid;
  44   1      
  45   1               for(i=0;i<16;i++)
  46   1               {
  47   2               if(!wait_change()) return(0);
  48   2               if(pulse_time>time1 || pulse_time<time0) goto start_readid;
  49   2               }
  50   1      
  51   1                              //speak_port = !speak_port;
  52   1      
  53   1              //保存位数据
  54   1               for(i=0; i<11; i++)
  55   1               {
C51 COMPILER V7.00  125K                                                                   10/11/2007 15:46:24 PAGE 2   

  56   2                   five_bit = 0;
  57   2                   for(j=0; j<5; j++)
  58   2                   {
  59   3                       five_bit <<= 1;  if(!wait_change()) return(0);
  60   3                       if(pulse_time <= time1)
  61   3                       {
  62   4                       if(pulse_time < time0) goto start_readid;
  63   4                       if(!wait_change()) return(0);  //有空跳
  64   4                       if(pulse_time<time0 || pulse_time>time1) goto start_readid;
  65   4                       }
  66   3      
  67   3                       else if(pulse_time > time2)  goto start_readid;
  68   3                       if(inbak == 0) five_bit |= 0x01;
  69   3                   }
  70   2                   bit_buffer[i] = five_bit;
  71   2               }
  72   1      
  73   1               //行校验
  74   1               for(i=2;i<10;i++)     //从第二行开始
  75   1               {
  76   2                   verify_bit = 0;   five_bit = bit_buffer[i];
  77   2                   for(j=0;j<5;j++)
  78   2                   {
  79   3                   if( five_bit & 0x01 ) verify_bit = !verify_bit;
  80   3                   five_bit >>= 1;
  81   3                   }
  82   2                   if( verify_bit ) goto start_readid;
  83   2               }
  84   1      
  85   1               //列校验
  86   1               verify_row = 0x02;     //从第一列开始
  87   1               for(i=0;i<4;i++)       //共4列
  88   1               {
  89   2                   verify_bit = 0;
  90   2                   for(j=0;j<11;j++)
  91   2                   {
  92   3                   five_bit = bit_buffer[j];
  93   3                   if( five_bit & verify_row )  verify_bit = !verify_bit;
  94   3                   }
  95   2                   if( verify_bit ) return(0);
  96   2                   verify_row <<= 1;   //准备校验下一列
  97   2               }
  98   1      
  99   1               //合并成4字节数据
 100   1               for(i=0,j=2;i<4;i++)
 101   1               {
 102   2               bit_buffer[j] <<= 3;  bit_buffer[j] &= 0xf0; //高字节
 103   2               five_bit = bit_buffer[j];   j++;
 104   2               bit_buffer[j] >>= 1;  bit_buffer[j] &= 0x0f; //低字节
 105   2               byte_buffer[i] = five_bit | bit_buffer[j];  j++;
 106   2               }
 107   1      
 108   1               //屏蔽全0卡号和全ff卡号
 109   1               if(!byte_buffer[3] && !byte_buffer[2] && !byte_buffer[1] && !byte_buffer[0]) return(0);
 110   1               if(byte_buffer[0] == 0xff && byte_buffer[1] == 0xff
 111   1               && byte_buffer[2] == 0xff && byte_buffer[0] == 0xff)  return(0);
 112   1      
 113   1               //读2次卡号相同才认为成功
 114   1               compare_bit = !compare_bit;
 115   1               if(compare_bit)
 116   1               {
 117   2               currency_temp[0] = byte_buffer[0];    currency_temp[1] = byte_buffer[1];
C51 COMPILER V7.00  125K                                                                   10/11/2007 15:46:24 PAGE 3   

 118   2               currency_temp[2] = byte_buffer[2];    currency_temp[3] = byte_buffer[3];
 119   2               goto start_readid;
 120   2               }
 121   1               else if(currency_temp[0] == byte_buffer[0] && currency_temp[1] == byte_buffer[1]
 122   1                    && currency_temp[2] == byte_buffer[2] && currency_temp[3] == byte_buffer[3]) return(1);
 123   1       }
 124          
 125          
 126          main()
 127          {
 128   1              T2CON = 0;
 129   1              T2MOD = 0x02;
 130   1              RCAP2H = 0xff;
 131   1              RCAP2L = 0xf0;
 132   1              TR2 = 1;
 133   1      
 134   1              while(1)
 135   1              {
 136   2      
 137   2                      if(read_IDka())
 138   2                      {
 139   3                              speak_port = !speak_port;
 140   3                      }
 141   2              }
 142   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    475    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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