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

📄 main.lst

📁 keilc写RFID独T5557卡的源程序,
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   MAIN                                                                  09/17/2007 14:50:28 PAGE 1   


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

line level    source

   1          //2006-4-27 13:10
   2          //更改为默认 manchester,RF/64,软件可读写EM4469,不能更改设置读卡器参数,可读参数2006-4-27 12:01
   3          //不能使用默认读命令
   4          //支持PCB端软件:1.EM4469 RFID Development Kit Application Software  2.EM4469 Read Only Application Softwa
             -re
   5          //支持卡片:EM4469,EM410X
   6          
   7          #include "main.h"
   8          #include   "string.h"
   9          #include   "intrins.h"
  10          #include   "stdio.h"
  11          
  12          ////EM4095控制线定义
  13          sbit    MOD = P1^1;
  14          sbit    SHD = P1^2;
  15          sbit    DEMOD_OUT = P3^3;
  16          sbit    RDY_CLK = P3^4;
  17          sbit    speak = P1^3;
  18          
  19          union   myunion
  20          {
  21                  uint    word;
  22                  struct
  23                  {
  24                          uchar high2;
  25                          uchar low2;
  26                  }bytes;
  27          };
  28          
  29          
  30          union myunion count_timer2;
  31          uchar fwd_1st_pulse = 256 - 30;                 //18个RF周期
  32          uchar field_stop;                               //next field stop in RF clocks
  33          uchar fwd_01_zero   = 256 - 24;                 //complement to fwd_01_stop,20个RF周期
  34          uchar fwd_01_one    = 256 - 56;                 //notmod full period '1',29个RF周期
  35          uchar fwd_01_stop   = 256 - 20;                 //9个RF周期
  36          uchar edge=1;                                   //for manchester usage
  37          
  38          
  39          // 定时器0中断服务程序
  40          // 写操作,控制MOD
  41          void Timer0_int(void) interrupt 1 using 1
  42          {                 
  43   1              TF0=0;                                          //clear interrupt flag
  44   1              if (fwd_bit_phase == 4)
  45   1              {
  46   2                      TR0= 0;                            
  47   2                      ET0=0;                  //disable T0 interrupt              
  48   2                      TF0=0;    
  49   2                      MOD=0;     
  50   2                      return;            
  51   2              }
  52   1              
  53   1          if (fwd_bit_phase == 1) 
  54   1          {                     
C51 COMPILER V7.50   MAIN                                                                  09/17/2007 14:50:28 PAGE 2   

  55   2              MOD=1;  
  56   2                      TR0=0;                     
  57   2              TH0=0xFF;
  58   2              TL0 = 255-19;//field_stop;
  59   2                      TR0=1;
  60   2              field_stop = fwd_01_stop;             
  61   2              //fwd_bit_phase = 2;
  62   2              if(fwd_bit_sz-- > 0) 
  63   2              {                   
  64   3                      if(((*fwd_write_ptr++) & 1) == 1) 
  65   3                              fwd_bit_phase = 2;
  66   3                      else
  67   3                              fwd_bit_phase = 3;
  68   3              }   
  69   2                  else 
  70   2                  {
  71   3                      fwd_bit_phase = 4;
  72   3      //              TR0= 0;                            
  73   3      //              ET0=0;                  //disable T0 interrupt              
  74   3      //              TF0=0;    
  75   3      //              MOD=0;                 
  76   3                  }           
  77   2                  return;
  78   2          }
  79   1          
  80   1          MOD=0;                   
  81   1              TR0=0;
  82   1          if (fwd_bit_phase == 2)                 
  83   1          {
  84   2              TH0=0xFF;
  85   2              TL0=255-55;//fwd_01_zero;
  86   2              fwd_bit_phase = 1;
  87   2          }
  88   1          else
  89   1          {
  90   2              TH0=0xFF;
  91   2              TL0= 255-23;//fwd_01_one;
  92   2              fwd_bit_phase = 1;
  93   2          }                    
  94   1              TR0=1;
  95   1      
  96   1      }
  97          //串口中断标志位
  98          uchar Rxtemp;
  99          bit rx_start;
 100          bit rx_finish;
 101          bit rx_lenflag;
 102          uchar rx_i;
 103          uchar rx_len;
 104          bit MYTI;
 105          
 106          //串口中断服务程序
 107          void serial(void) interrupt 4 using 3 
 108          {               
 109   1              uint  i;
 110   1          if(RI)
 111   1          {
 112   2              rx_finish = 0;
 113   2              RI = 0;
 114   2              EA = 0;
 115   2              //Rxtemp = SBUF;         
 116   2                  rx_buff[0] = SBUF;
C51 COMPILER V7.50   MAIN                                                                  09/17/2007 14:50:28 PAGE 3   

 117   2                  rx_i=1; 
 118   2                  for(;;)
 119   2                  {
 120   3                      for(i=0;i<0xfff;i++)
 121   3                      {
 122   4                              if(RI)
 123   4                              {                               
 124   5                                      RI = 0;
 125   5                                      rx_buff[rx_i] = SBUF;
 126   5                                      rx_i++;
 127   5                                      break;
 128   5                              }                       
 129   4                      }
 130   3                      if(i>=0xfff)
 131   3                      {
 132   4                              rx_finish = 1;
 133   4                              EA = 1;
 134   4                              break;
 135   4                      }
 136   3                  }   
 137   2              }
 138   1              if(TI)
 139   1              {
 140   2                      TI = 0;
 141   2                      MYTI = 1;               
 142   2              }
 143   1      }
 144          
 145          // ==================================================================
 146          void Timer2_int(void) interrupt 5 using 2
 147          {
 148   1              if (currentMaxTimeHi != 0xFF) 
 149   1              {                 
 150   2              currentMaxTimeHi = 0xFF;
 151   2              } 
 152   1              else 
 153   1              {
 154   2              flag_wait=0;
 155   2              ET2=0;  
 156   2              }
 157   1      }
 158          
 159          void main(void)
 160          {
 161   1      //      uchar i;
 162   1      //      uchar checksum;
 163   1              //使能winbond W78E365内部1K SRAM
 164   1              CHPENR = 0x87;
 165   1          CHPENR = 0x59;
 166   1          CHPCON = (CHPCON|0x10);
 167   1              CHPENR = 0x00;
 168   1      
 169   1              //串口,定时器1,双倍速率,9600bps
 170   1              SCON = 0x50;            
 171   1              TMOD = 0x21;
 172   1              TH1 = 0xf4;TL1 = 0xf4;
 173   1              PCON = PCON|0x80;
 174   1              TR1 = 1;
 175   1              ES = 1;
 176   1              TI = 0;RI = 0;          
 177   1              EA = 1;
 178   1              C_T2 = 1;                               //T2脚的负跳变计数,TH2,TL2自动重装
C51 COMPILER V7.50   MAIN                                                                  09/17/2007 14:50:28 PAGE 4   

 179   1              //EM4095 初始化
 180   1              MOD = 0;
 181   1              SHD = 0;
 182   1              //串口接收初始化
 183   1              rx_start = 0;
 184   1          rx_finish = 0;
 185   1              rx_lenflag = 0;
 186   1          rx_len = 0;                         //还要接收的数据个数
 187   1              rx_i = 0;               //接收到个数
 188   1              MYTI = 0;
 189   1              
 190   1              //配置读卡器默认值,RF/64,Manchester解码
 191   1          config_delayed = 0;
 192   1          config_lwr = 8;                      
 193   1          config_raw = 0;     
 194   1      
 195   1              halfDataRate = 16;//default values, RF/32
 196   1              MaxCaptureHalfDateRate = halfDataRate + (halfDataRate >> 1);            //=0x18 
 197   1              MaxCaptureDateRate = halfDataRate + halfDataRate + (halfDataRate >> 1); //0x28
 198   1              
 199   1              lwr = config_lwr;
 200   1              delayed = config_delayed;
 201   1              raw = config_raw;
 202   1              //forward_link_type = 0x01; 
 203   1              maxTLogin = 4 + (4 + 9) * 2 * (uint)halfDataRate;               //0x0344
 204   1              maxTWrite = 1144 + (4 + 8) * 2 * (uint)halfDataRate;
 205   1              maxTWriteRaw = 1144 + (4 + 5 + 54) * 2 * (uint)halfDataRate;
 206   1              maxTRead = (100) + 4 + (5 + 54) * 2 * (uint)halfDataRate;               //3880
 207   1              maxTDisable = maxTLogin;
 208   1              maxTDefaultRead = 2*((lwr-4)*4*8)*2*((uint32)halfDataRate);
 209   1              tpp_period = 4 + 2 * (uint)halfDataRate - 4;            //64
 210   1              twr_period = (68 + 64 + 896 + 116) + 2 * (uint)halfDataRate - 4;
 211   1              
 212   1              while(1)
 213   1              {
 214   2                      if(rx_finish == 1)//串口完成合法的接收
 215   2                  {           
 216   3      //                      rx_finish = 0;
 217   3      //                  trace(rx_buff,rx_i);
 218   3      //                              continue;
 219   3                  }
 220   2                  else continue;
 221   2                      rx_finish = 0;          
 222   2                      forward_ptr = forwardLink_data; 
 223   2      //              num_addr = rx_buff[3];
 224   2                      switch(rx_buff[0])                      
 225   2                      {
 226   3                              case 0x00 :
 227   3                                      ResetT5557();
 228   3                                      break;
 229   3                              case 0x10 :
 230   3                                      WakeUpT5557();
 231   3                                      break;
 232   3                              case 0x11 :
 233   3                                      GeneralRead_T5557();
 234   3                                      break;
 235   3                              case 0x12 :
 236   3                                      ReadT5557();
 237   3                                      break;
 238   3                              case 0x13 :
 239   3                                      WriteT5557();
 240   3                                      break;                  
C51 COMPILER V7.50   MAIN                                                                  09/17/2007 14:50:28 PAGE 5   

 241   3                              case 0x14 :
 242   3                                      ReadT5557_PWD();
 243   3                                      break;
 244   3                              case 0x15 :
 245   3                                      WriteT5557_PWD();
 246   3                                      break;
 247   3      
 248   3                              default : 
 249   3                                      break;
 250   3                      }
 251   2              }
 252   1      }
 253          
 254          uchar Prepare_Cmd(uchar cmd) 
 255          {
 256   1          *forward_ptr++ = cmd; //start bit
 257   1          cmd = cmd>>1;
 258   1          *forward_ptr++ = cmd;       
 259   1          return 2;                           
 260   1      }
 261          
 262          uchar Prepare_Lock(void)
 263          {
 264   1              *forward_ptr++ = 0; 
 265   1              return 1;
 266   1      }

⌨️ 快捷键说明

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