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

📄 mfrc500.lst

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V8.00   MFRC500                                                               04/23/2009 15:56:15 PAGE 1   


C51 COMPILER V8.00, COMPILATION OF MODULE MFRC500
OBJECT MODULE PLACED IN .\out_sst89e564\mfrc500.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\mfrc500.c LARGE BROWSE ORDER NOAREGS DEBUG OBJECTEXTEND PRINT(.\mfrc
                    -500.lst) OBJECT(.\out_sst89e564\mfrc500.obj)

line level    source

   1          //#include <reg51rx2.h>
   2          #include <reg52.h>
   3          #include <intrins.h>
   4          #include "string.h"
   5          #include "stimer.h"
   6          #include "ucio.h"
   7          #include "mfrc500.h"
   8          #include "uart.h"
   9          #include "v51rx2.h"
  10          #include "intrsc.h"
  11          #include "MifarePro.h"
  12          #include "global.h"
  13          
  14          
  15          #define DEBUGRC500
  16          
  17          #define enableme()  EX0 = 1
  18          #define disableme() EX0 = 0
  19          
  20          //static volatile bit  fSameCard;
  21          
  22          static   volatile MfCmdInfo     MInfo;
  23          
  24          // Variable in order to exchange data between function and ISR
  25          static   volatile MfCmdInfo     *MpIsrInfo = 0;
  26                  // ISR send buffer
  27          static   volatile unsigned char *MpIsrOut  = 0;
  28                   // ISR receive buffer
  29          static   volatile unsigned char *MpIsrIn   = 0;
  30          
  31          static unsigned char RxGain = 0x71;//73:42db, 72:38, 71:30, 70:27///////////////////
  32          
  33          #define MFIFOLength 64
  34          
  35          uchar xdata SndBuffer[64];
  36          uchar xdata RcvBuffer[64];
  37          
  38          
  39          // storage of the last selected serial number including check byte.
  40          // For multi level serial numbers, only the first 4 bytes are stored.
  41          unsigned char MLastSelectedSnr[5];
  42          
  43          
  44          void ResetInfo(MfCmdInfo *info)
  45          {
  46   1          info->cmd= 0;
  47   1          info->status = MI_OK;
  48   1          info->irqSource= 0;
  49   1          info->nBytesToSend = 0;
  50   1          info->nBytesSent = 0;
  51   1          info->nBytesReceived = 0;
  52   1          info->nBitsReceived  = 0;
  53   1          info->collPos  = 0;
  54   1      }
C51 COMPILER V8.00   MFRC500                                                               04/23/2009 15:56:15 PAGE 2   

  55          
  56          void SetBitMask(uchar reg,uchar mask)
  57          {
  58   1          uchar data tmp = 0x0;
  59   1          tmp = ReadIO(reg);
  60   1          WriteIO(reg,tmp | mask);
  61   1      }
  62          
  63          void ClearBitMask(uchar reg,uchar mask)
  64          {
  65   1          uchar tmp = 0x0;
  66   1          tmp = ReadIO(reg);
  67   1          WriteIO(reg,tmp & ~mask);
  68   1      }
  69          
  70          // clear fifo
  71          void FlushFIFO(void)
  72          {
  73   1          SetBitMask(RegControl,0x01);
  74   1      }
  75          
  76          /************************************
  77           * set timeout length               *
  78           * tmolength: timeout length        *
  79           ************************************/
  80           /*
  81          void M500PcdSetTmo(uchar tmoLength)
  82          {
  83              switch(tmoLength)
  84              {
  85                  case 1:
  86                      WriteIO(RegTimerClock,0x07);
  87                      WriteIO(RegTimerReload,0x6a);
  88                      break;
  89                  case 2:
  90                      WriteIO(RegTimerClock,0x07);
  91                      WriteIO(RegTimerReload,0xa0);
  92                      break;
  93                  case 3:
  94                      WriteIO(RegTimerClock,0x09);
  95                      WriteIO(RegTimerReload,0xa0);
  96                      break;
  97                  case 4:
  98                      WriteIO(RegTimerClock,0x09);
  99                      WriteIO(RegTimerReload,0xff);
 100                      break;
 101                  case 5:
 102                      WriteIO(RegTimerClock,0x0b);
 103                      WriteIO(RegTimerReload,0xff);
 104                      break;
 105                  case 6:
 106                      WriteIO(RegTimerClock,0x0d);
 107                      WriteIO(RegTimerReload,0xff);
 108                      break;
 109                  case 7:
 110                      WriteIO(RegTimerClock,0x0f);
 111                      WriteIO(RegTimerReload,0xff);
 112                      break;
 113                  default:
 114                      WriteIO(RegTimerClock,0x07);
 115                      WriteIO(RegTimerReload,tmoLength);
 116                      break;
C51 COMPILER V8.00   MFRC500                                                               04/23/2009 15:56:15 PAGE 3   

 117              }
 118          } */
 119          
 120          void M500PcdSetTmo(unsigned char tmoLength)
 121          {
 122   1         switch(tmoLength)
 123   1         {  // timer clock frequency 13,56 MHz
 124   2            case 1:                       // short timeout (1,0 ms)
 125   2               WriteIO(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
 126   2               WriteIO(RegTimerReload,0x6a);// TReloadVal = 'h6a =106(dec) 
 127   2               break;
 128   2            case 2:                       // medium timeout (1,5 ms)
 129   2               WriteIO(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
 130   2               WriteIO(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec) 
 131   2               break;
 132   2            case 3:                       // medium timeout (6 ms)
 133   2               WriteIO(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
 134   2               WriteIO(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec) 
 135   2               break;
 136   2            case 4:                       // long timeout (9.6 ms)
 137   2               WriteIO(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
 138   2               WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec) 
 139   2               break;
 140   2            case 5:                       // long timeout (38.5 ms)
 141   2               WriteIO(RegTimerClock,0x0b); // TAutoRestart=0,TPrescale=16*128
 142   2               WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec) 
 143   2               break;
 144   2            case 6:                       // long timeout (154 ms)
 145   2               WriteIO(RegTimerClock,0x0d); // TAutoRestart=0,TPrescale=64*128
 146   2               WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec) 
 147   2               break;
 148   2            case 7:                       // long timeout (616.2 ms)
 149   2               WriteIO(RegTimerClock,0x0f); // TAutoRestart=0,TPrescale=256*128
 150   2               WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec) 
 151   2               break;
 152   2            case 8:
 153   2                   WriteIO(RegTimerClock,0x0f);
 154   2                       WriteIO(RegTimerReload,0xB6);   //e1  
 155   2                       break;
 156   2            case 9:
 157   2                   WriteIO(RegTimerClock,0x11);
 158   2                       WriteIO(RegTimerReload,0xff);
 159   2                case 10:
 160   2                   WriteIO(RegTimerClock,0x12);
 161   2                       WriteIO(RegTimerReload,0xff);
 162   2                       break;
 163   2                case 11:
 164   2                   WriteIO(RegTimerClock,0x13);
 165   2                       WriteIO(RegTimerReload,0xff);
 166   2                       break;
 167   2                case 12:
 168   2                   WriteIO(RegTimerClock,0x14);
 169   2                       WriteIO(RegTimerReload,0xff);
 170   2                       break;
 171   2                case 13:
 172   2                   WriteIO(RegTimerClock,0x10);
 173   2                       WriteIO(RegTimerReload,0xE1);
 174   2                       break;
 175   2                case 14:
 176   2                   WriteIO(RegTimerClock,0x0F);
 177   2                       WriteIO(RegTimerReload,0xB0);   //E1
 178   2                       break;
C51 COMPILER V8.00   MFRC500                                                               04/23/2009 15:56:15 PAGE 4   

 179   2                case 15:
 180   2                   WriteIO(RegTimerClock,0x0F);
 181   2                       WriteIO(RegTimerReload,0xB1);           //Process the cmmand .setting the time in the MFRC500 timer.
 182   2                       break;
 183   2                case 16:
 184   2                   WriteIO(RegTimerClock,0x0C);
 185   2                       WriteIO(RegTimerReload,0xFF);
 186   2                       break;
 187   2                default:                              // 
 188   2               WriteIO(RegTimerClock,0x07);       // TAutoRestart=0,TPrescale=128
 189   2               WriteIO(RegTimerReload,tmoLength); // TReloadVal = 'h6a =tmoLength(dec) 
 190   2               break;
 191   2         }     
 192   1      }
 193          
 194          
 195          /****************************
 196           * excute mfrc500 command   *
 197           ****************************/
 198          #if 1
 199          uchar M500PcdCmd(unsigned char cmdcode, unsigned char* send, unsigned char* rcv, MfCmdInfo *info)
 200          {
 201   1          uchar  data tmpStatus;
 202   1          uchar  data lastBits;
 203   1          uchar  data status    = MI_OK;
 204   1          uchar  data irqEn     = 0x00;
 205   1          uchar  data waitFor   = 0x00;
 206   1          uint   data starttime;
 207   1              uchar  data i;
 208   1      
 209   1          WriteIO(RegInterruptEn,0x7F);   // disable all interrupts
 210   1          WriteIO(RegInterruptRq,0x7F);   // reset interrupt requests
 211   1          WriteIO(RegCommand,PCD_IDLE);   // terminate probably running command
 212   1      
 213   1          FlushFIFO();                    // flush FIFO buffer
 214   1      
 215   1          // save info structures to module pointers
 216   1          MpIsrInfo = info;
 217   1          MpIsrOut  = send;
 218   1          MpIsrIn   = rcv;
 219   1      
 220   1          info->irqSource = 0x0; // reset interrupt flags
 221   1          
 222   1          enableme();             
 223   1      
 224   1          // depending on the command code, appropriate interrupts are enabled (irqEn)
 225   1          // and the commit interrupt is choosen (waitFor).
 226   1          switch(cmdcode)
 227   1          {
 228   2              case PCD_IDLE:                   // nothing else required
 229   2                  irqEn = 0x00;
 230   2                  waitFor = 0x00;
 231   2                  break;
 232   2      
 233   2              case PCD_WRITEE2:                // LoAlert and TxIRq
 234   2                  irqEn = 0x11;
 235   2                  waitFor = 0x10;
 236   2                  break;
 237   2      
 238   2              case PCD_READE2:                 // HiAlert, LoAlert and IdleIRq
 239   2                  irqEn = 0x07;
 240   2                  waitFor = 0x04;
C51 COMPILER V8.00   MFRC500                                                               04/23/2009 15:56:15 PAGE 5   

 241   2                  break;
 242   2      
 243   2              case PCD_LOADCONFIG:             // IdleIRq and LoAlert 
 244   2              case PCD_LOADKEYE2:              // IdleIRq and LoAlert 
 245   2              case PCD_AUTHENT1:               // IdleIRq and LoAlert 
 246   2                  irqEn = 0x05;
 247   2                  waitFor = 0x04;
 248   2                  break;
 249   2      
 250   2              case PCD_CALCCRC:                // LoAlert and TxIRq
 251   2                  irqEn = 0x11;
 252   2                  waitFor = 0x10;
 253   2                  break;
 254   2      
 255   2              case PCD_AUTHENT2:               // IdleIRq
 256   2                  irqEn = 0x04;
 257   2                  waitFor = 0x04;
 258   2                  break;
 259   2      
 260   2              case PCD_RECEIVE:                // HiAlert and IdleIRq
 261   2                  info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4);      ////////////////
 262   2                  irqEn = 0x06;
 263   2                  waitFor = 0x04;
 264   2                  break;
 265   2      
 266   2              case PCD_LOADKEY:                // IdleIRq
 267   2                  irqEn = 0x05;
 268   2                  waitFor = 0x04;
 269   2                  break;
 270   2      
 271   2              case PCD_TRANSMIT:               // LoAlert and IdleIRq
 272   2                  irqEn = 0x05;
 273   2                  waitFor = 0x04;
 274   2                  break;
 275   2      
 276   2              case PCD_TRANSCEIVE:             // TxIrq, RxIrq, IdleIRq and LoAlert
 277   2                  info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4); //////////////
 278   2                  irqEn = 0x3D;   //0x1D;
 279   2                  waitFor = 0x04;

⌨️ 快捷键说明

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