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

📄 rc522.lst

📁 这是一个单片机与MFRC522通信的程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.07   RC522                                                                 02/12/2007 09:56:17 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE RC522
OBJECT MODULE PLACED IN RC522.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE RC522.C

stmt level    source

   1          #include <intrins.h>
   2          #include "lpcreg.h"
   3          #include "main.h"
   4          #include "mfrc522.h"
   5          #define MAXRLEN 18
   6                                        
   7          /////////////////////////////////////////////////////////////////////
   8          //功    能:寻卡
   9          //参数说明: req_code[IN]:寻卡方式
  10          //                0x52 = 寻感应区内所有符合14443A标准的卡
  11          //                0x26 = 寻未进入休眠状态的卡
  12          //          pTagType[OUT]:卡片类型代码
  13          //                0x4400 = Mifare_UltraLight
  14          //                0x0400 = Mifare_One(S50)
  15          //                0x0200 = Mifare_One(S70)
  16          //                0x0800 = Mifare_Pro(X)
  17          //                0x4403 = Mifare_DESFire
  18          //返    回: 成功返回MI_OK
  19          /////////////////////////////////////////////////////////////////////
  20          char PcdRequest(unsigned char req_code,unsigned char *pTagType)
  21          {
  22   1         char status;  
  23   1         unsigned int  unLen;
  24   1         unsigned char ucComMF522Buf[MAXRLEN]; 
  25   1      //  unsigned char xTest ;
  26   1         ClearBitMask(Status2Reg,0x08);
  27   1         WriteRawRC(BitFramingReg,0x07);
  28   1      
  29   1      //  xTest = ReadRawRC(BitFramingReg);
  30   1      //  if(xTest == 0x07 )
  31   1       //   { LED_GREEN  =0 ;}
  32   1       // else {LED_GREEN =1 ;while(1){}}
  33   1         SetBitMask(TxControlReg,0x03);
  34   1       
  35   1         ucComMF522Buf[0] = req_code;
  36   1      
  37   1         status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);
  38   1      //     if(status  == MI_OK )
  39   1      //   { LED_GREEN  =0 ;}
  40   1      //   else {LED_GREEN =1 ;}
  41   1         if ((status == MI_OK) && (unLen == 0x10))
  42   1         {    
  43   2             *pTagType     = ucComMF522Buf[0];
  44   2             *(pTagType+1) = ucComMF522Buf[1];
  45   2         }
  46   1         else
  47   1         {   status = MI_ERR;   }
  48   1         
  49   1         return status;
  50   1      }
  51          
  52          /////////////////////////////////////////////////////////////////////
  53          //功    能:防冲撞
  54          //参数说明: pSnr[OUT]:卡片序列号,4字节
  55          //返    回: 成功返回MI_OK
C51 COMPILER V7.07   RC522                                                                 02/12/2007 09:56:17 PAGE 2   

  56          /////////////////////////////////////////////////////////////////////  
  57          char PcdAnticoll(unsigned char *pSnr)
  58          {
  59   1          char status;
  60   1          unsigned char i,snr_check=0;
  61   1          unsigned int  unLen;
  62   1          unsigned char ucComMF522Buf[MAXRLEN]; 
  63   1          
  64   1      
  65   1          ClearBitMask(Status2Reg,0x08);
  66   1          WriteRawRC(BitFramingReg,0x00);
  67   1          ClearBitMask(CollReg,0x80);
  68   1       
  69   1          ucComMF522Buf[0] = PICC_ANTICOLL1;
  70   1          ucComMF522Buf[1] = 0x20;
  71   1      
  72   1          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);
  73   1      
  74   1          if (status == MI_OK)
  75   1          {
  76   2               for (i=0; i<4; i++)
  77   2               {   
  78   3                   *(pSnr+i)  = ucComMF522Buf[i];
  79   3                   snr_check ^= ucComMF522Buf[i];
  80   3               }
  81   2               if (snr_check != ucComMF522Buf[i])
  82   2               {   status = MI_ERR;    }
  83   2          }
  84   1          
  85   1          SetBitMask(CollReg,0x80);
  86   1          return status;
  87   1      }
  88          
  89          /////////////////////////////////////////////////////////////////////
  90          //功    能:选定卡片
  91          //参数说明: pSnr[IN]:卡片序列号,4字节
  92          //返    回: 成功返回MI_OK
  93          /////////////////////////////////////////////////////////////////////
  94          char PcdSelect(unsigned char *pSnr)
  95          {
  96   1          char status;
  97   1          unsigned char i;
  98   1          unsigned int  unLen;
  99   1          unsigned char ucComMF522Buf[MAXRLEN]; 
 100   1          
 101   1          ucComMF522Buf[0] = PICC_ANTICOLL1;
 102   1          ucComMF522Buf[1] = 0x70;
 103   1          ucComMF522Buf[6] = 0;
 104   1          for (i=0; i<4; i++)
 105   1          {
 106   2              ucComMF522Buf[i+2] = *(pSnr+i);
 107   2              ucComMF522Buf[6]  ^= *(pSnr+i);
 108   2          }
 109   1          CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);
 110   1        
 111   1          ClearBitMask(Status2Reg,0x08);
 112   1      
 113   1          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);
 114   1          
 115   1          if ((status == MI_OK) && (unLen == 0x18))
 116   1          {   status = MI_OK;  }
 117   1          else
C51 COMPILER V7.07   RC522                                                                 02/12/2007 09:56:17 PAGE 3   

 118   1          {   status = MI_ERR;    }
 119   1      
 120   1          return status;
 121   1      }
 122          
 123          /////////////////////////////////////////////////////////////////////
 124          //功    能:验证卡片密码
 125          //参数说明: auth_mode[IN]: 密码验证模式
 126          //                 0x60 = 验证A密钥
 127          //                 0x61 = 验证B密钥 
 128          //          addr[IN]:块地址
 129          //          pKey[IN]:密码
 130          //          pSnr[IN]:卡片序列号,4字节
 131          //返    回: 成功返回MI_OK
 132          /////////////////////////////////////////////////////////////////////               
 133          char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)
 134          {
 135   1          char status;
 136   1          unsigned int  unLen;
 137   1          unsigned char i,ucComMF522Buf[MAXRLEN]; 
 138   1      
 139   1          ucComMF522Buf[0] = auth_mode;
 140   1          ucComMF522Buf[1] = addr;
 141   1          for (i=0; i<6; i++)
 142   1          {    ucComMF522Buf[i+2] = *(pKey+i);   }
 143   1          for (i=0; i<6; i++)
 144   1          {    ucComMF522Buf[i+8] = *(pSnr+i);   }
 145   1       //   memcpy(&ucComMF522Buf[2], pKey, 6); 
 146   1       //   memcpy(&ucComMF522Buf[8], pSnr, 4); 
 147   1          
 148   1          status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen);
 149   1          if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08)))
 150   1          {   status = MI_ERR;   }
 151   1          
 152   1          return status;
 153   1      }
 154          
 155          /////////////////////////////////////////////////////////////////////
 156          //功    能:读取M1卡一块数据
 157          //参数说明: addr[IN]:块地址
 158          //          pData[OUT]:读出的数据,16字节
 159          //返    回: 成功返回MI_OK
 160          ///////////////////////////////////////////////////////////////////// 
 161          char PcdRead(unsigned char addr,unsigned char *pData)
 162          {
 163   1          char status;
 164   1          unsigned int  unLen;
 165   1          unsigned char i,ucComMF522Buf[MAXRLEN]; 
 166   1      
 167   1          ucComMF522Buf[0] = PICC_READ;
 168   1          ucComMF522Buf[1] = addr;
 169   1          CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
 170   1         
 171   1          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
 172   1          if ((status == MI_OK) && (unLen == 0x90))
 173   1       //   {   memcpy(pData, ucComMF522Buf, 16);   }
 174   1          {
 175   2              for (i=0; i<16; i++)
 176   2              {    *(pData+i) = ucComMF522Buf[i];   }
 177   2          }
 178   1          else
 179   1          {   status = MI_ERR;   }
C51 COMPILER V7.07   RC522                                                                 02/12/2007 09:56:17 PAGE 4   

 180   1          
 181   1          return status;
 182   1      }
 183          
 184          /////////////////////////////////////////////////////////////////////
 185          //功    能:写数据到M1卡一块
 186          //参数说明: addr[IN]:块地址
 187          //          pData[IN]:写入的数据,16字节
 188          //返    回: 成功返回MI_OK
 189          /////////////////////////////////////////////////////////////////////                  
 190          char PcdWrite(unsigned char addr,unsigned char *pData)
 191          {
 192   1          char status;
 193   1          unsigned int  unLen;
 194   1          unsigned char i,ucComMF522Buf[MAXRLEN]; 
 195   1          
 196   1          ucComMF522Buf[0] = PICC_WRITE;
 197   1          ucComMF522Buf[1] = addr;
 198   1          CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
 199   1       
 200   1          status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
 201   1      
 202   1          if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
 203   1          {   status = MI_ERR;   }
 204   1              
 205   1          if (status == MI_OK)
 206   1          {
 207   2              //memcpy(ucComMF522Buf, pData, 16);
 208   2              for (i=0; i<16; i++)
 209   2              {    ucComMF522Buf[i] = *(pData+i);   }
 210   2              CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]);
 211   2      
 212   2              status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen);
 213   2              if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))

⌨️ 快捷键说明

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