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

📄 mfucfunc.lst

📁 此程序为13.56MHz的RFID底层读写卡程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 228             MRcvBuffer[7] = 0x13; // RegModWidth
 229             MRcvBuffer[8] = 0x00; // RFU16
 230             MRcvBuffer[9] = 0x00; // RFU17
 231          
 232             MRcvBuffer[10] = 0x00; // Page
 233             MRcvBuffer[11] = 0x73; // RegRxControl1
 234             MRcvBuffer[12] = 0x08; // RegDecoderControl
 235             MRcvBuffer[13] = 0x6c; // RegBitPhase
 236             MRcvBuffer[14] = 0xFF; // RegRxThreshold
 237             MRcvBuffer[15] = 0x00; // RFU1D
 238             MRcvBuffer[16] = 0x00; // RegRxControl2
 239             MRcvBuffer[17] = 0x00; // RegClockQControl
 240          
 241             MRcvBuffer[18] = 0x00; // Page
 242             MRcvBuffer[19] = 0x06; // RegRxWait
 243             MRcvBuffer[20] = 0x03; // RegChannelRedundancy
 244             MRcvBuffer[21] = 0x63; // RegCRCPresetLSB
 245             MRcvBuffer[22] = 0x63; // RegCRCPresetMSB
 246             MRcvBuffer[23] = 0x0;  // RFU25
 247             MRcvBuffer[24] = 0x04; // RegMfOutSelect enable mfout = manchester HT
 248             MRcvBuffer[25] = 0x00; // RFU27
 249          
 250             // PAGE 5      FIFO, Timer and IRQ-Pin Configuration
 251             MRcvBuffer[26] = 0x00; // Page
 252             MRcvBuffer[27] = 0x08; // RegFIFOLevel
 253             MRcvBuffer[28] = 0x07; // RegTimerClock
 254             MRcvBuffer[29] = 0x06; // RegTimerControl
 255             MRcvBuffer[30] = 0x0A; // RegTimerReload
 256             MRcvBuffer[31] = 0x02; // RegIRqPinConfig
 257             MRcvBuffer[32] = 0x00; // RFU
C51 COMPILER V4.01,  MFUCFUNC                                                              19/08/04  14:33:23  PAGE 5   

 258             MRcvBuffer[33] = 0x00; // RFU
 259             MInfo.nBytesToSend   = 34;
 260          
 261             status = PcdSingleResponseCmd(PCD_WRITEE2,
 262                             MRcvBuffer,
 263                             MRcvBuffer,
 264                             &MInfo); // write e2
 265             return status;
 266          }
 267            */
 268          ///////////////////////////////////////////////////////////////////////
 269          //          M I F A R E   R E M O T E   A N T E N N A
 270          //  Configuration of master module
 271          ///////////////////////////////////////////////////////////////////////
 272          /*char Mf500ActiveAntennaMasterConfig(void)
 273          {
 274             char  status = MI_OK;
 275          
 276             WriteRC(RegRxControl2,0x42);
 277             WriteRC(RegTxControl,0x10);
 278             WriteRC(RegBitPhase,0x11);
 279          //WriteRC(RegControl,0x00);//////by allen
 280             return status;
 281          }
 282          */
 283          ///////////////////////////////////////////////////////////////////////
 284          //          M I F A R E    R E Q U E S T
 285          ///////////////////////////////////////////////////////////////////////
 286          char Mf500PiccRequest(unsigned char req_code, // request code ALL = 0x52
 287                                                     // or IDLE = 0x26
 288                             unsigned char *atq)     // answer to request
 289          {
 290   1        return Mf500PiccCommonRequest(req_code,atq);
 291   1      }
 292          
 293          ///////////////////////////////////////////////////////////////////////
 294          //          M I F A R E   C O M M O N   R E Q U E S T
 295          ///////////////////////////////////////////////////////////////////////
 296          char Mf500PiccCommonRequest(unsigned char req_code,
 297                                   unsigned char *atq)
 298          {
 299   1         char status = MI_OK;
 300   1         //unsigned char  nByte;
 301   1         //unsigned char  Temp;
 302   1         //unsigned char  Temp1;
 303   1          //************* initialize ******************************
 304   1         if ((status = Mf500PcdSetDefaultAttrib()) == MI_OK)
 305   1         {
 306   2      
 307   2            PcdSetTmo(106);//allen 10.23//106
 308   2      
 309   2            WriteRC(RegChannelRedundancy,0x03); // RxCRC and TxCRC disable, parity enable
 310   2            ClearBitMask(RegControl,0x08);      // disable crypto 1 unit
 311   2            WriteRC(RegBitFraming,0x07);        // set TxLastBits to 7////0x07
 312   2      
 313   2            ResetInfo(MInfo);
 314   2            MRcvBuffer[0] = req_code;
 315   2            MInfo.nBytesToSend   = 1;
 316   2            status = PcdSingleResponseCmd(PCD_TRANSCEIVE,
 317   2                               MRcvBuffer,
 318   2                               MRcvBuffer,
 319   2                               &MInfo);
 320   2      
 321   2            if (status)      // error occured
 322   2            {
 323   3                      //nByte=ReadRC(RegFIFOLength);
C51 COMPILER V4.01,  MFUCFUNC                                                              19/08/04  14:33:23  PAGE 6   

 324   3                      //Temp=ReadRC(RegFIFOData);
 325   3               *atq = 0;
 326   3      
 327   3            }
 328   2            else
 329   2            {
 330   3               if (MInfo.nBitsReceived != 16) // 2 bytes expected
 331   3               {
 332   4                  *atq = 0;
 333   4      
 334   4                  //nByte=ReadRC(RegFIFOLength);
 335   4                  //Temp=ReadRC(RegFIFOData);
 336   4                  //Temp1=ReadRC(RegFIFOData);
 337   4                  status = MI_BITCOUNTERR;
 338   4               }
 339   3               else
 340   3               {
 341   4                  status = MI_OK;
 342   4                  memcpy(atq,MRcvBuffer,2);
 343   4               }
 344   3            }
 345   2         }
 346   1         return status;
 347   1      }
 348          
 349          ///////////////////////////////////////////////////////////////////////
 350          //          M I F A R E    A N T I C O L L I S I O N
 351          // for standard select
 352          ///////////////////////////////////////////////////////////////////////
 353          char Mf500PiccAnticoll (unsigned char   bcnt,
 354                               unsigned char   *snr)
 355          {
 356   1         return Mf500PiccCascAnticoll(0x93,bcnt,snr); // first cascade level
 357   1      }
 358          
 359          ///////////////////////////////////////////////////////////////////////
 360          //          M I F A R E    A N T I C O L L I S I O N
 361          // for extended serial numbers
 362          ///////////////////////////////////////////////////////////////////////
 363          char Mf500PiccCascAnticoll (unsigned char   select_code,
 364                                   unsigned char   bcnt,
 365                                   unsigned char    *snr)
 366          {
 367   1         char    status = MI_OK;
 368   1         char    snr_in[4];         // copy of the input parameter snr
 369   1         char    nbytes = 0;        // how many bytes received
 370   1         char    nbits = 0;         // how many bits received
 371   1         char    complete = 0;      // complete snr recived
 372   1         char    i        = 0;
 373   1         char    byteOffset = 0;
 374   1         unsigned char   snr_crc;   // check byte calculation
 375   1         unsigned char   snr_check;
 376   1         unsigned char   dummyShift1;       // dummy byte for snr shift
 377   1         unsigned char   dummyShift2;       // dummy byte for snr shift
 378   1      
 379   1         //************* Initialisierung ******************************
 380   1         if ((status = Mf500PcdSetDefaultAttrib()) == MI_OK)
 381   1         {
 382   2            PcdSetTmo(106);
 383   2      
 384   2            memcpy(snr_in,snr,4);
 385   2      
 386   2            WriteRC(RegDecoderControl,0x28); // ZeroAfterColl aktivieren
 387   2            ClearBitMask(RegControl,0x08);    // disable crypto 1 unit
 388   2      
 389   2            //************** Anticollision Loop ***************************
C51 COMPILER V4.01,  MFUCFUNC                                                              19/08/04  14:33:23  PAGE 7   

 390   2            complete=0;
 391   2            while (!complete && (status == MI_OK) )
 392   2            {
 393   3               ResetInfo(MInfo);
 394   3               WriteRC(RegChannelRedundancy,0x03); // RxCRC and TxCRC disable, parity enable
 395   3               nbits = bcnt % 8;   // remaining number of bits
 396   3               if (nbits)
 397   3               {
 398   4                      //Temp=nbits<<4|nbits;
 399   4                      //WriteRC(RegBitFraming,Temp);
 400   4                  WriteRC(RegBitFraming,nbits << 4 | nbits); // TxLastBits/RxAlign auf nb_bi
 401   4                  nbytes = bcnt / 8 + 1;
 402   4                  // number of bytes known
 403   4      
 404   4                  // in order to solve an inconsistancy in the anticollision sequence
 405   4                  // (will be solved soon), the case of 7 bits has to be treated in a
 406   4                  // separate way
 407   4                  if (nbits == 7 )
 408   4                  {
 409   5                     MInfo.cmd = PICC_ANTICOLL1;   // pass command flag to ISR
 410   5                     WriteRC(RegBitFraming,nbits); // reset RxAlign to zero
 411   5                  }
 412   4               }
 413   3               else
 414   3               {
 415   4                  nbytes = bcnt / 8;
 416   4               }
 417   3      
 418   3               MRcvBuffer[0] = select_code;
 419   3               MRcvBuffer[1] = 0x20 + ((bcnt/8) << 4) + nbits; //number of bytes send
 420   3      
 421   3               for (i = 0; i < nbytes; i++)  // Sende Buffer beschreiben
 422   3               {
 423   4                  MRcvBuffer[i + 2] = snr_in[i];
 424   4               }
 425   3               MInfo.nBytesToSend   = 2 + nbytes;
 426   3      
 427   3               status = PcdSingleResponseCmd(PCD_TRANSCEIVE,
 428   3                                  MRcvBuffer,
 429   3                                  MRcvBuffer,
 430   3                                  &MInfo);
 431   3      
 432   3                // in order to solve an inconsistancy in the anticollision sequence
 433   3                // (will be solved soon), the case of 7 bits has to be treated in a
 434   3                // separate way
 435   3               if (nbits == 7)
 436   3               {
 437   4                  // reorder received bits
 438   4                  dummyShift1 = 0x00;
 439   4                  for (i = 0; i < MInfo.nBytesReceived; i++)
 440   4                  {
 441   5                      dummyShift2 = MRcvBuffer[i];
 442   5                      MRcvBuffer[i] = (dummyShift1 >> (i+1)) | (MRcvBuffer[i] << (7-i));
 443   5                      dummyShift1 = dummyShift2;
 444   5                  }
 445   4                  MInfo.nBitsReceived -= MInfo.nBytesReceived; // subtract received parity bits
 446   4                  // recalculation of collision position
 447   4                  if ( MInfo.collPos ) MInfo.collPos += 7 - (MInfo.collPos + 6) / 9;
 448   4               }
 449   3      
 450   3               if ( status == MI_OK || status == MI_COLLERR)    // no other occured
 451   3               {
 452   4                  // R e s p o n s e   P r o c e s s i n g
 453   4                  if ( MInfo.nBitsReceived != (40 - bcnt) ) // not 5 bytes answered
 454   4                  {
 455   5                     status = MI_BITCOUNTERR;
C51 COMPILER V4.01,  MFUCFUNC                                                              19/08/04  14:33:23  PAGE 8   

 456   5                  }
 457   4                  else
 458   4                  {
 459   5                     byteOffset = 0;
 460   5                     if ( nbits != 0 )           // last byte was not complete
 461   5                     {

⌨️ 快捷键说明

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