找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 25453|回复: 40
收起左侧

RC522模块原理图与PCB图,包括51单片机和430单片机测试程序

  [复制链接]
ID:124161 发表于 2016-6-10 07:38 | 显示全部楼层 |阅读模式


0.png

0.png

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.          MF522_SCK = 1;
  150.          ucAddr <<= 1;
  151.          MF522_SCK = 0;
  152.      }

  153.      for(i=8;i>0;i--)
  154.      {
  155.          MF522_SCK = 1;
  156.          ucResult <<= 1;
  157.          ucResult|=(bit)MF522_SO;
  158.          MF522_SCK = 0;
  159.      }

  160.      MF522_NSS = 1;
  161.      MF522_SCK = 1;
  162.      return ucResult;
  163. }
  164.    
  165.   
复制代码
430单片机测试程序:
  1. #include  <msp430x41x.h>
  2. #include "main.h"
  3. #include "mfrc522.h"

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

  13. void main(void)
  14. {
  15.      unsigned char status;
  16.      InitializeSystem();
  17.      PcdReset();
  18.      PcdAntennaOff();
  19.      PcdAntennaOn();  
  20.      while ( 1 )
  21.      {   
  22.          status = PcdRequest(PICC_REQALL, g_ucTempbuf);
  23.          if (status != MI_OK)
  24.          {   
  25.              LED_GREEN_OFF;
  26.              continue;
  27.          }
  28.          LED_GREEN_ON;     //检测到有卡存在
  29.          
  30.          status = PcdAnticoll(g_ucTempbuf);
  31.          if (status != MI_OK)
  32.          {    continue;    }
  33.          
  34.          status = PcdSelect(g_ucTempbuf);
  35.          if (status != MI_OK)
  36.          {    continue;    }
  37.          
  38.          status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);
  39.          if (status != MI_OK)
  40.          {    continue;    }
  41.          
  42.          status = PcdWrite(1, data1);
  43.          if (status != MI_OK)
  44.          {    continue;    }
  45.          
  46.          status = PcdValue(PICC_DECREMENT,1,data2);
  47.          if (status != MI_OK)
  48.          {    continue;    }
  49.          
  50.          status = PcdBakValue(1, 2);
  51.          if (status != MI_OK)
  52.          {    continue;    }
  53.          
  54.          status = PcdRead(2, g_ucTempbuf);
  55.          if (status != MI_OK)
  56.          {    continue;    }
  57.          
  58.          PcdHalt();
  59.     }
  60. }


  61. /////////////////////////////////////////////////////////////////////
  62. //功能:系统初始化
  63. /////////////////////////////////////////////////////////////////////       
  64. void InitializeSystem(void)
  65. {
  66.     WDTCTL = WDTPW + WDTHOLD;             //Stop watchdog timer
  67.     _DINT();
  68.      
  69.     P1DIR = 0xE8;
  70.     P1OUT = 0xFF;
  71.       
  72.     P6DIR = 0x08;
  73.     P6OUT = 0xFF;
  74. }   


复制代码

全部资料(压缩包)下载:
M112120_FSpec_RC522_20050801.pdf (1.3 MB, 下载次数: 205)
回复

使用道具 举报

ID:134242 发表于 2016-7-19 14:05 | 显示全部楼层
供应13.56M非接芯片,兼容CV520,RC522,RC523,FM17520,FM17522.具有绝对成本优势。有意者可加QQ458231727
回复

使用道具 举报

ID:47761 发表于 2016-8-5 08:35 | 显示全部楼层
图好小
回复

使用道具 举报

ID:136328 发表于 2016-8-9 09:49 | 显示全部楼层
楼主522和51通信能不能只接TX,RX,不接DTRQ,MX呢?
回复

使用道具 举报

ID:148358 发表于 2016-11-16 22:29 | 显示全部楼层
不能用
回复

使用道具 举报

ID:110866 发表于 2016-12-1 22:36 | 显示全部楼层
感谢分享,费用有用
回复

使用道具 举报

ID:197324 发表于 2017-5-6 15:13 | 显示全部楼层
很好的资料,谢谢分享
回复

使用道具 举报

ID:199074 发表于 2017-5-10 18:45 | 显示全部楼层
没发现原理图,,,??
回复

使用道具 举报

ID:59768 发表于 2017-5-29 17:57 | 显示全部楼层
资料不错
回复

使用道具 举报

ID:213446 发表于 2017-6-21 18:29 | 显示全部楼层
正找呢   可是没有黑币啊
回复

使用道具 举报

ID:213446 发表于 2017-6-21 18:30 | 显示全部楼层
新手发不了贴?
回复

使用道具 举报

ID:107454 发表于 2017-7-11 14:31 | 显示全部楼层
不错,学习了。
回复

使用道具 举报

ID:91469 发表于 2017-9-13 14:05 | 显示全部楼层
研究研究!拿来主义!3Q啦
回复

使用道具 举报

ID:229568 发表于 2017-9-19 21:47 | 显示全部楼层
不错,学习了。
回复

使用道具 举报

ID:226872 发表于 2017-9-26 18:24 | 显示全部楼层
多谢 好东西
回复

使用道具 举报

ID:239125 发表于 2017-10-18 14:06 | 显示全部楼层
好东西 收藏收藏
回复

使用道具 举报

ID:249599 发表于 2017-11-15 10:43 | 显示全部楼层
这么小的图,看得到么?
回复

使用道具 举报

ID:253265 发表于 2017-11-24 22:43 | 显示全部楼层
好东西 收藏收藏
回复

使用道具 举报

ID:300562 发表于 2018-4-1 21:58 | 显示全部楼层
非常感谢楼主的无私分享精神。
回复

使用道具 举报

ID:309180 发表于 2018-6-6 15:34 | 显示全部楼层
学习了
回复

使用道具 举报

ID:64985 发表于 2018-6-7 15:50 | 显示全部楼层
帖子不错不过没有黑比
回复

使用道具 举报

ID:64985 发表于 2018-6-7 16:39 | 显示全部楼层
希望发我qq邮箱一份,2906905479@qq.com
回复

使用道具 举报

ID:309921 发表于 2018-6-8 10:43 | 显示全部楼层
赞一个~~~
回复

使用道具 举报

ID:350231 发表于 2018-6-12 14:08 | 显示全部楼层
刚好用上
回复

使用道具 举报

ID:350231 发表于 2018-6-12 14:08 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:57522 发表于 2018-7-17 17:59 | 显示全部楼层
没把参数放出来
回复

使用道具 举报

ID:69476 发表于 2018-8-10 21:51 | 显示全部楼层
谢谢楼主贡献
回复

使用道具 举报

ID:45845 发表于 2018-8-11 20:51 | 显示全部楼层
非常感谢  、正愁PCB天线怎么画
回复

使用道具 举报

ID:391124 发表于 2018-8-29 11:22 | 显示全部楼层
不错,学习了。
回复

使用道具 举报

ID:391130 发表于 2018-8-29 11:42 | 显示全部楼层

不错,学习了。
回复

使用道具 举报

ID:384212 发表于 2018-11-21 11:22 | 显示全部楼层
很有帮助
回复

使用道具 举报

ID:407570 发表于 2018-12-12 17:46 | 显示全部楼层
谢谢楼主分享好东西!
回复

使用道具 举报

ID:241124 发表于 2019-2-17 17:28 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

ID:240778 发表于 2019-3-25 09:30 | 显示全部楼层
研究一下,再来回复
回复

使用道具 举报

ID:431095 发表于 2019-5-11 13:11 | 显示全部楼层
参考                     
回复

使用道具 举报

ID:48257 发表于 2019-7-23 10:31 | 显示全部楼层
不错,很有用。
回复

使用道具 举报

ID:557149 发表于 2019-9-2 14:59 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:598175 发表于 2019-12-19 13:43 | 显示全部楼层
好东西 收藏收藏
回复

使用道具 举报

ID:322454 发表于 2020-3-1 22:48 | 显示全部楼层
不错挺好的
回复

使用道具 举报

ID:609332 发表于 2020-5-26 14:02 | 显示全部楼层
不错不错,学习了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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