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

📄 main.lst

📁 EM4095 程序 可以参考下 keil 下编译!
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 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 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          
   9          
  10          ////EM4095控制线定义
  11          sbit    MOD = P1^1;
  12          sbit    SHD = P1^2;
  13          sbit    DEMOD_OUT = P3^3;
  14          sbit    RDY_CLK = P3^4;
  15          sbit    speak = P1^3;
  16          
  17          union   myunion
  18          {
  19                  uint    word;
  20                  struct
  21                  {
  22                          uchar high2;
  23                          uchar low2;
  24                  }bytes;
  25          };
  26          
  27          
  28          union myunion count_timer2;
  29          uchar fwd_1st_pulse = 256 - 20;                 //20个RF周期
  30          uchar field_stop;                               //next field stop in RF clocks
  31          uchar fwd_01_zero   = 256 - 20;                 //complement to fwd_01_stop,20个RF周期
  32          uchar fwd_01_one    = 256 - 29;                 //notmod full period '1',29个RF周期
  33          uchar fwd_01_stop   = 256 - 9;                  //9个RF周期
  34          uchar edge=1;                                   //for manchester usage
  35          
  36          
  37          // 定时器0中断服务程序
  38          // 写操作,控制MOD
  39          void Timer0_int(void) interrupt 1 using 1
  40          {                 
  41   1              TF0=0;                                          //clear interrupt flag
  42   1          if (fwd_bit_phase == 1) 
  43   1          {                     
  44   2              MOD=1;  
  45   2                      TR0=0;                     
  46   2              TH0=0xFF;
  47   2              TL0 = field_stop;
  48   2                      TR0=1;
  49   2              field_stop = fwd_01_stop;             
  50   2              fwd_bit_phase = 2;
  51   2              return;
  52   2          }
  53   1          
  54   1          MOD=0;                   
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 2   

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

 117   3                      rx_i++;
 118   3                      rx_len = Rxtemp;
 119   3                      if(rx_len > MAX_RXNUM)
 120   3                      {
 121   4                              rx_start = 0;
 122   4                              rx_finish = 0;
 123   4                              rx_lenflag = 0;
 124   4                      }               
 125   3                      return;
 126   3              }
 127   2              rx_buff[rx_i] = Rxtemp;
 128   2                  rx_i++;
 129   2                  rx_len--;
 130   2                  if(rx_len ==0)
 131   2                  {
 132   3                      rx_start = 0;
 133   3                      rx_finish = 1;
 134   3                      rx_lenflag = 0;
 135   3                      if(rx_buff[rx_i-1] != ETX)
 136   3                      {                       
 137   4                              rx_finish = 0;                  
 138   4                      }               
 139   3                  }       
 140   2                      return;
 141   2              }
 142   1              if(TI)
 143   1              {
 144   2                      TI = 0;
 145   2                      MYTI = 1;               
 146   2              }
 147   1      }
 148          
 149          // ==================================================================
 150          void Timer2_int(void) interrupt 5 using 2
 151          {
 152   1              if (currentMaxTimeHi != 0xFF) 
 153   1              {                 
 154   2              currentMaxTimeHi = 0xFF;
 155   2              } 
 156   1              else 
 157   1              {
 158   2              flag_wait=0;
 159   2              ET2=0;  
 160   2              }
 161   1      }
 162          
 163          void main(void)
 164          {
 165   1              uchar i;
 166   1              uchar checksum;
 167   1              //使能winbond W78E365内部1K SRAM
 168   1              CHPENR = 0x87;
 169   1          CHPENR = 0x59;
 170   1          CHPCON = (CHPCON|0x10);
 171   1              CHPENR = 0x00;
 172   1      
 173   1              //串口,定时器1,双倍速率,9600bps
 174   1              SCON = 0x50;            
 175   1              TMOD = 0x20;
 176   1              TH1 = 0xf4;TL1 = 0xf4;
 177   1              PCON = PCON|0x80;
 178   1              TR1 = 1;
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 4   

 179   1              ES = 1;
 180   1              TI = 0;RI = 0;          
 181   1              EA = 1;
 182   1              C_T2 = 1;                               //T2脚的负跳变计数,TH2,TL2自动重装
 183   1              //EM4095 初始化
 184   1              MOD = 0;
 185   1              SHD = 0;
 186   1              //串口接收初始化
 187   1              rx_start = 0;
 188   1          rx_finish = 0;
 189   1              rx_lenflag = 0;
 190   1          rx_len = 0;                         //还要接收的数据个数
 191   1              rx_i = 0;               //接收到个数
 192   1              MYTI = 0;
 193   1              
 194   1              //配置读卡器默认值,RF/64,Manchester解码
 195   1          config_delayed = 0;
 196   1          config_lwr = 8;                      
 197   1          config_raw = 0;     
 198   1      
 199   1              halfDataRate = 32;//default values, RF/64
 200   1              MaxCaptureHalfDateRate = halfDataRate + (halfDataRate >> 1);            //=48 
 201   1              MaxCaptureDateRate = halfDataRate + halfDataRate + (halfDataRate >> 1); //=80
 202   1              lwr = config_lwr;
 203   1              delayed = config_delayed;
 204   1              raw = config_raw;
 205   1              //forward_link_type = 0x01; 
 206   1              maxTLogin = 4 + (4 + 9) * 2 * (uint)halfDataRate;               //0x0344
 207   1              maxTWrite = 1144 + (4 + 8) * 2 * (uint)halfDataRate;
 208   1              maxTWriteRaw = 1144 + (4 + 5 + 54) * 2 * (uint)halfDataRate;
 209   1              maxTRead = (100) + 4 + (5 + 54) * 2 * (uint)halfDataRate;               //3880
 210   1              maxTDisable = maxTLogin;
 211   1              maxTDefaultRead = 2*((lwr-4)*4*8)*2*((uint32)halfDataRate);
 212   1              tpp_period = 4 + 2 * (uint)halfDataRate - 4;            //64
 213   1              twr_period = (68 + 64 + 896 + 116) + 2 * (uint)halfDataRate - 4;
 214   1              
 215   1              while(1)
 216   1              {
 217   2                      if(rx_finish == 1)//串口完成合法的接收
 218   2                  {           
 219   3                              rx_finish = 0;
 220   3                          checksum = rx_buff[1];
 221   3                              for(i=2;i<=(rx_buff[1]-1);i++)
 222   3                              {
 223   4                                      checksum ^= rx_buff[i];
 224   4                              }
 225   3                              if (checksum != rx_buff[rx_buff[1]])    //检查校验和    
 226   3                                      continue;
 227   3                  }
 228   2                  else continue;
 229   2                                      
 230   2                      forward_ptr = forwardLink_data; 
 231   2                      
 232   2                      switch(rx_buff[2])                      
 233   2                      {
 234   3                              case 0x80 :
 235   3                                      ReadWordToPC();         //读卡
 236   3                                      break;
 237   3                              case 0x81 :
 238   3                                      WriteWordtoCard();              //写卡
 239   3                                      break;
 240   3                              case 0x82 :
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 5   

 241   3                                      Login();                        //

⌨️ 快捷键说明

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