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

📄 m500auc.lst

📁 mifare 232读卡源程序用kei uvision打开
💻 LST
📖 第 1 页 / 共 3 页
字号:
 289   1          MInfo.nBytesToSend = 2;
 290   1          status = M500PcdCmd(PCD_TRANSCEIVE,
 291   1                             SerBuffer,
 292   1                             &MInfo);   
 293   1          if (status)
 294   1          {
 295   2              // timeout error ==> no NAK received ==> OK
 296   2              if (status == MI_NOTAGERR || status == MI_ACCESSTIMEOUT)
 297   2              {
 298   3                  status = MI_OK;
 299   3              }
 300   2          }
 301   1          //reset command register - no response from tag
 302   1          WriteIO(RegCommand,PCD_IDLE);
 303   1          return status; 
C51 COMPILER V7.50   M500AUC                                                               06/14/2005 11:34:17 PAGE 6   

 304   1      }
 305          
 306          ///////////////////////////////////////////////////////////////////////
 307          // Reset the MF RC500 
 308          ///////////////////////////////////////////////////////////////////////
 309          char M500PcdReset(void)
 310          {
 311   1          char idata status = MI_OK;
 312   1          unsigned int idata timecnt=0;
 313   1          
 314   1          RC500RST = 0;  
 315   1          delay_1ms(25); 
 316   1          RC500RST = 1;  
 317   1          delay_50us(200); 
 318   1          RC500RST = 0;  
 319   1          delay_50us(50);
 320   1          timecnt=1000;
 321   1          while ((ReadIO(RegCommand) & 0x3F) && timecnt--);
 322   1          if(!timecnt)
 323   1          {
 324   2              status = MI_RESETERR;
 325   2          }
 326   1          if (status == MI_OK)
 327   1          {
 328   2              //WriteIO(RegPage,0x80);
 329   2              if (ReadIO(RegCommand) != 0x00)
 330   2              {                           
 331   3                  status = MI_INTERFACEERR;
 332   3              }
 333   2          }
 334   1          return status;
 335   1      }
 336          
 337          ///////////////////////////////////////////////////////////////////////
 338          // Configures the MF RC500
 339          ///////////////////////////////////////////////////////////////////////
 340          char M500PcdConfig(void)
 341          {
 342   1          char idata status;
 343   1      
 344   1          if ((status = M500PcdReset()) == MI_OK)
 345   1          {
 346   2              WriteIO(RegClockQControl,0x00);
 347   2              WriteIO(RegClockQControl,0x40);
 348   2              delay_50us(2);  
 349   2              ClearBitMask(RegClockQControl,0x40);
 350   2              WriteIO(RegBitPhase,0xAD);      
 351   2              WriteIO(RegRxThreshold,0xFF);   
 352   2              WriteIO(RegRxControl2,0x01);
 353   2              WriteIO(RegFIFOLevel,0x1A);
 354   2              WriteIO(RegTimerControl,0x02);
 355   2              WriteIO(RegIRqPinConfig,0x03); 
 356   2              M500PcdRfReset(1);               
 357   2          }
 358   1          return status;
 359   1      }
 360          
 361          ///////////////////////////////////////////////////////////////////////
 362          // Select Command defined in ISO14443(MIFARE)
 363          ///////////////////////////////////////////////////////////////////////
 364          char M500PcdMfOutSelect(unsigned char type)
 365          {
C51 COMPILER V7.50   M500AUC                                                               06/14/2005 11:34:17 PAGE 7   

 366   1          WriteIO(RegMfOutSelect,type&0x7);
 367   1          return MI_OK;
 368   1      }
 369          
 370          ///////////////////////////////////////////////////////////////////////
 371          // Request Command defined in ISO14443(MIFARE)
 372          // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)    
 373          // 寻卡,防冲突,选择卡    返回卡类型(2 bytes)+ 卡系列号(4 bytes)
 374          ///////////////////////////////////////////////////////////////////////
 375          char M500PiccCommonRequest(unsigned char req_code,unsigned char *atq)
 376          {
 377   1          char idata status = MI_OK;
 378   1              
 379   1          M500PcdSetTmo(3);
 380   1          WriteIO(RegChannelRedundancy,0x03);
 381   1          ClearBitMask(RegControl,0x08);
 382   1          WriteIO(RegBitFraming,0x07);     
 383   1          SetBitMask(RegTxControl,0x03);     
 384   1          ResetInfo(MInfo);
 385   1          SerBuffer[0] = req_code;
 386   1          MInfo.nBytesToSend = 1;   
 387   1          
 388   1          status = M500PcdCmd(PCD_TRANSCEIVE,SerBuffer,&MInfo);
 389   1          if (status)     
 390   1          {
 391   2              *atq = 0;
 392   2          } 
 393   1          else 
 394   1          {
 395   2              if (MInfo.nBitsReceived != 16) 
 396   2              {
 397   3                  *atq = 0;
 398   3                  status = MI_BITCOUNTERR;
 399   3              } 
 400   2              else 
 401   2              {
 402   3                  status = MI_OK;
 403   3                  memcpy(atq,SerBuffer,2);
 404   3              }
 405   2          }
 406   1          return status; 
 407   1      }
 408          
 409          ///////////////////////////////////////////////////////////////////
 410          // Cascaded Anti-Collision Command defined in ISO14443(MIFARE)
 411          // 防冲突 读卡的系列号 MLastSelectedSnr
 412          ///////////////////////////////////////////////////////////////////
 413          char M500PiccCascAnticoll (unsigned char bcnt,unsigned char *snr)       
 414          {
 415   1          char idata status = MI_OK;
 416   1          char idata snr_in[5];//snr_in[4];    
 417   1          char idata nbytes = 0;
 418   1          char idata nbits = 0;
 419   1          char idata complete = 0;
 420   1          char idata i        = 0;
 421   1          char idata byteOffset = 0;
 422   1          unsigned char dummyShift1;       
 423   1          unsigned char dummyShift2;      
 424   1          
 425   1          M500PcdSetTmo(106);
 426   1          memcpy(snr_in,snr,5);//memcpy(snr_in,snr,4);   
 427   1         
C51 COMPILER V7.50   M500AUC                                                               06/14/2005 11:34:17 PAGE 8   

 428   1          WriteIO(RegDecoderControl,0x28); 
 429   1          ClearBitMask(RegControl,0x08);   
 430   1          complete = 0;
 431   1          while (!complete && (status == MI_OK) )
 432   1          {
 433   2              ResetInfo(MInfo);           
 434   2              WriteIO(RegChannelRedundancy,0x03);
 435   2              nbits = bcnt % 8;  
 436   2              if(nbits)
 437   2              {
 438   3                  WriteIO(RegBitFraming,nbits << 4| nbits); 
 439   3                  nbytes = bcnt / 8 + 1;   
 440   3                  if (nbits == 7)
 441   3                  {
 442   4                      MInfo.cmd = PICC_ANTICOLL1;  
 443   4                      WriteIO(RegBitFraming,nbits); 
 444   4                  }
 445   3              }  
 446   2              else
 447   2              {
 448   3                  nbytes = bcnt / 8;
 449   3              }
 450   2              SerBuffer[0] = 0x93;
 451   2              SerBuffer[1] = 0x20 + ((bcnt/8) << 4) + nbits;
 452   2                     
 453   2              for (i = 0; i < nbytes; i++)  
 454   2              {
 455   3                  SerBuffer[i + 2] = snr_in[i];
 456   3              }
 457   2              MInfo.nBytesToSend   = 2 + nbytes;   
 458   2       
 459   2              status = M500PcdCmd(PCD_TRANSCEIVE,SerBuffer,&MInfo);
 460   2              if (nbits == 7)
 461   2              {
 462   3                  dummyShift1 = 0x00;
 463   3                  for (i = 0; i < MInfo.nBytesReceived; i++)
 464   3                  {
 465   4                      dummyShift2 = SerBuffer[i];
 466   4                      SerBuffer[i] = (dummyShift1 >> (i+1)) | (SerBuffer[i] << (7-i));
 467   4                      dummyShift1 = dummyShift2;
 468   4                  }
 469   3                  MInfo.nBitsReceived -= MInfo.nBytesReceived;       
 470   3                  if ( MInfo.collPos ) MInfo.collPos += 7 - (MInfo.collPos + 6) / 9;
 471   3              }
 472   2              if ( status == MI_OK || status == MI_COLLERR)    
 473   2              {
 474   3                  if ( MInfo.nBitsReceived != (40 - bcnt) )
 475   3                  {
 476   4                      status = MI_BITCOUNTERR; 
 477   4                  } 
 478   3                  else 
 479   3                  {
 480   4                      byteOffset = 0;
 481   4                      if( nbits != 0 ) 
 482   4                      {
 483   5                          snr_in[nbytes - 1] = snr_in[nbytes - 1] | SerBuffer[0];
 484   5                          byteOffset = 1;
 485   5                      }
 486   4      
 487   4                      for ( i =0; i < (4 - nbytes); i++)     
 488   4                      {
 489   5                          snr_in[nbytes + i] = SerBuffer[i + byteOffset];
C51 COMPILER V7.50   M500AUC                                                               06/14/2005 11:34:17 PAGE 9   

 490   5                      }
 491   4        
 492   4                      if (status != MI_COLLERR ) 
 493   4                      {
 494   5                          dummyShift2 = snr_in[0] ^ snr_in[1] ^ snr_in[2] ^ snr_in[3];
 495   5                          dummyShift1 = SerBuffer[MInfo.nBytesReceived - 1];
 496   5                          if (dummyShift2 != dummyShift1)
 497   5                          {
 498   6                              status = MI_SERNRERR;
 499   6                          } 
 500   5                          else   
 501   5                          {
 502   6                              complete = 1;
 503   6                          }
 504   5                      }
 505   4                      else                 
 506   4                      {
 507   5                          bcnt = bcnt + MInfo.collPos - nbits;
 508   5                          status = MI_OK;
 509   5                      }
 510   4                  }
 511   3              }
 512   2          }
 513   1          if (status == MI_OK)
 514   1          {
 515   2                      snr_in[4]=dummyShift1;
 516   2              memcpy(snr,snr_in,5);
 517   2          }
 518   1          else
 519   1          {
 520   2              memcpy(snr,"00000",5);
 521   2          }
 522   1          ClearBitMask(RegDecoderControl,0x20); 
 523   1         
 524   1          return status;  
 525   1      }
 526          
 527          ///////////////////////////////////////////////////////////////////////
 528          // Reset Rf Card
 529          ///////////////////////////////////////////////////////////////////////
 530          char M500PcdRfReset(unsigned char ms)
 531          {
 532   1          char idata status = MI_OK;
 533   1              
 534   1          if(ms)
 535   1          {
 536   2              ClearBitMask(RegTxControl,0x03); 
 537   2              delay_1ms(2);                
 538   2              SetBitMask(RegTxControl,0x03); 
 539   2          }
 540   1          else
 541   1          {
 542   2              ClearBitMask(RegTxControl,0x03);  
 543   2          }
 544   1          return status;
 545   1      }
 546          
 547          #pragma noaregs
 548          
 549          ///////////////////////////////////////////////////////////////////////
 550          // Delay 50us
 551          ///////////////////////////////////////////////////////////////////////
C51 COMPILER V7.50   M500AUC                                                               06/14/2005 11:34:17 PAGE 10  

 552          void delay_50us(unsigned char _50us)
 553          {
 554   1          while(_50us--)
 555   1              {
 556   2                  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 557   2                  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 558   2                  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 559   2                  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 560   2                  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 561   2                  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 562   2                  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 563   2                  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 564   2          }
 565   1      }
 566          
 567          ///////////////////////////////////////////////////////////////////////
 568          // Delay 1ms
 569          ///////////////////////////////////////////////////////////////////////
 570          void delay_1ms(unsigned char _1ms)
 571          {
 572   1      #ifndef NO_TIMER2
                  RCAP2LH = RCAP2_1ms;
                  T2LH    = RCAP2_1ms;
              
                  TR2 = TRUE;
                  while (_1ms--)
                  {
                          while (!TF2);
                          TF2 = FALSE;
                  }
                  TR2 = FALSE;
              #else

⌨️ 快捷键说明

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