找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7046|回复: 0
打印 上一主题 下一主题
收起左侧

msp430和51单片机rc522射频卡读写卡程序及原理图

[复制链接]
跳转到指定楼层
楼主
51单片机和msp430单片机读写射频卡程序的原理图和例程都有



文档包含:
ISO14443\
ISO14443-2.pdf
ISO14443-3.pdf
ISO14443-4.pdf
Mifare卡片资料\
Design of MF RC500 Matching Circuits and Antennas.PDF
M01811.PDF
M112120_FSpec_RC522_20050801.pdf
MF1 S50.pdf

51单片机源程序如下:
  1. #include "lpcreg.h"
  2. #include "main.h"
  3. #include "mfrc522.h"

  4. unsigned char code data1[16] = {0x12,0x34,0x56,0x78,0xED,0xCB,0xA9,0x87,0x12,0x34,0x56,0x78,0x01,0xFE,0x01,0xFE};
  5. //M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令
  6. //4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反
  7. unsigned char code data2[4]  = {0x12,0,0,0};
  8. unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};


  9. unsigned char g_ucTempbuf[20];                        

  10. void main( )
  11. {   
  12.      unsigned char status;
  13.      InitializeSystem( );
  14.      PcdReset();
  15.      PcdAntennaOff(); //关闭天线
  16.      PcdAntennaOn();  //开启天线
  17.      while ( 1 )
  18.      {   
  19.          status = PcdRequest(PICC_REQALL, g_ucTempbuf);       #define PICC_REQIDL 0x26    //寻天线区内未进入休眠状态
  20. ////////////////////////////////////////////////////////////////////////////////
  21.          if (status != MI_OK)
  22.          {
  23.               LED_GREEN = 1;
  24.               continue;
  25.          }
  26. /////////////////////////////////////////////////////////////////////
  27.          LED_GREEN = 0;
  28.          status = PcdAnticoll(g_ucTempbuf);
  29. //////////////////////////////////////////////////////////////////////
  30.          if (status != MI_OK)
  31.          {
  32.              continue;   
  33.          }
  34. /////////////////////////////////////////////////////////////////////
  35.          status = PcdSelect(g_ucTempbuf);
  36.          if (status != MI_OK)
  37.          {   
  38.             continue;   
  39.          }
  40. ////////////////////////////////////////////////////////////////////////////         
  41.          status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);
  42.          if (status != MI_OK)
  43.          {   
  44.              continue;   
  45.          }
  46. /////////////////////////////////////////////////////////////////////////////         
  47.          status = PcdWrite(1, data1);
  48.          if (status != MI_OK)
  49.          {   
  50.             continue;   
  51.          }
  52. /////////////////////////////////////////////////////////////////////////////////         
  53.          status = PcdValue(PICC_DECREMENT,1,data2);
  54.          if (status != MI_OK)
  55.          {   
  56.            continue;   
  57.          }
  58. /////////////////////////////////////////////////////////////////////////////////         
  59.          status = PcdBakValue(1, 2);
  60.          if (status != MI_OK)
  61.          {   
  62.              continue;   
  63.          }
  64. /////////////////////////////////////////////////////////////////////////////         
  65.          status = PcdRead(2, g_ucTempbuf);
  66.          if (status != MI_OK)
  67.          {   
  68.             continue;   
  69.          }
  70.           PcdHalt();   //命令卡片进入休眠状态
  71.     }
  72. }


  73. /////////////////////////////////////////////////////////////////////
  74. //系统初始化
  75. /////////////////////////////////////////////////////////////////////
  76. void InitializeSystem()
  77. {
  78.     P0M1 = 0x0; P0M2 = 0x0;
  79.     P1M1 = 0x0;        P1M2 = 0x0;                     
  80.     P3M1 = 0x0; P3M2 = 0xFF;
  81.     P0 = 0xFF; P1 = 0xFF; P3 = 0xFF;
  82. }
  83. /////////////////////////////////////////////////////////////////////
  84. //功    能:复位RC522
  85. //返    回: 成功返回MI_OK
  86. /////////////////////////////////////////////////////////////////////
  87. char PcdReset(void)
  88. {
  89.     MF522_RST=1;
  90.     _nop_();
  91.     MF522_RST=0;
  92.     _nop_();
  93.     MF522_RST=1;
  94.      _nop_();
  95.     WriteRawRC(CommandReg,PCD_RESETPHASE);
  96.     _nop_();
  97.    
  98.     WriteRawRC(ModeReg,0x3D);            //和Mifare卡通讯,CRC初始值0x6363
  99.     WriteRawRC(TReloadRegL,30);           
  100.     WriteRawRC(TReloadRegH,0);
  101.     WriteRawRC(TModeReg,0x8D);
  102.     WriteRawRC(TPrescalerReg,0x3E);
  103.    
  104.     return MI_OK;
  105. }
  106. /////////////////////////////////////////////////////////////////////
  107. //功    能:写RC632寄存器
  108. //参数说明:Address[IN]:寄存器地址
  109. //          value[IN]:写入的值
  110. /////////////////////////////////////////////////////////////////////
  111. void WriteRawRC(unsigned char Address, unsigned char value)
  112. {  
  113.     unsigned char i, ucAddr;

  114.     MF522_SCK = 0;
  115.     MF522_NSS = 0;
  116.     ucAddr = ((Address<<1)&0x7E);

  117.     for(i=8;i>0;i--)
  118.     {
  119.         MF522_SI = ((ucAddr&0x80)==0x80);
  120.         MF522_SCK = 1;
  121.         ucAddr <<= 1;
  122.         MF522_SCK = 0;
  123.     }

  124.     for(i=8;i>0;i--)
  125.     {
  126.         MF522_SI = ((value&0x80)==0x80);
  127.         MF522_SCK = 1;
  128.         value <<= 1;
  129.         MF522_SCK = 0;
  130.     }
  131.     MF522_NSS = 1;
  132.     MF522_SCK = 1;
  133. }
  134. /////////////////////////////////////////////////////////////////////
  135. //功    能:读RC632寄存器
  136. //参数说明:Address[IN]:寄存器地址
  137. //返    回:读出的值
  138. /////////////////////////////////////////////////////////////////////
  139. unsigned char ReadRawRC(unsigned char Address)
  140. {
  141.      unsigned char i, ucAddr;
  142.      unsigned char ucResult=0;

  143.      MF522_SCK = 0;
  144.      MF522_NSS = 0;
  145.      ucAddr = ((Address<<1)&0x7E)|0x80;

  146.      for(i=8;i>0;i--)
  147.      {
  148.          MF522_SI = ((ucAddr&0x80)==0x80);
  149. ……………………

  150. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
51单片机rc522 射频的程序和与电路图.rar (2.66 MB, 下载次数: 92)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表