标题: RC522模块原理图与PCB图,包括51单片机和430单片机测试程序 [打印本页]

作者: happy112    时间: 2016-6-10 07:38
标题: RC522模块原理图与PCB图,包括51单片机和430单片机测试程序






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, 下载次数: 214) SL016.rar (10.92 KB, 下载次数: 254) SL106.rar (3.11 KB, 下载次数: 160) 源代码.zip (66.11 KB, 下载次数: 129)




作者: robinxiong    时间: 2016-7-19 14:05
供应13.56M非接芯片,兼容CV520,RC522,RC523,FM17520,FM17522.具有绝对成本优势。有意者可加QQ458231727
作者: Tliang    时间: 2016-8-5 08:35
图好小
作者: 一线光辉    时间: 2016-8-9 09:49
楼主522和51通信能不能只接TX,RX,不接DTRQ,MX呢?
作者: zg1519126168    时间: 2016-11-16 22:29
不能用
作者: lehigh    时间: 2016-12-1 22:36
感谢分享,费用有用
作者: 605891789    时间: 2017-5-6 15:13
很好的资料,谢谢分享

作者: clementa    时间: 2017-5-10 18:45
没发现原理图,,,??
作者: armauk    时间: 2017-5-29 17:57
资料不错
作者: Lgsa88    时间: 2017-6-21 18:29
正找呢   可是没有黑币啊
作者: Lgsa88    时间: 2017-6-21 18:30
新手发不了贴?
作者: psven    时间: 2017-7-11 14:31
不错,学习了。
作者: djk0125    时间: 2017-9-13 14:05
研究研究!拿来主义!3Q啦
作者: hcrdi    时间: 2017-9-19 21:47
不错,学习了。
作者: firegod01cn    时间: 2017-9-26 18:24
多谢 好东西
作者: lishaoyu2012    时间: 2017-10-18 14:06
好东西 收藏收藏
作者: a125327964    时间: 2017-11-15 10:43
这么小的图,看得到么?
作者: fanglei2583    时间: 2017-11-24 22:43
好东西 收藏收藏
作者: guoxiao69    时间: 2018-4-1 21:58
非常感谢楼主的无私分享精神。
作者: pengzhangjun    时间: 2018-6-6 15:34
学习了
作者: wwwwheihei    时间: 2018-6-7 15:50
帖子不错不过没有黑比
作者: wwwwheihei    时间: 2018-6-7 16:39
希望发我qq邮箱一份,2906905479@qq.com
作者: mengtao689    时间: 2018-6-8 10:43
赞一个~~~
作者: hai1980    时间: 2018-6-12 14:08
刚好用上
作者: hai1980    时间: 2018-6-12 14:08
谢谢分享

作者: dd774975175    时间: 2018-7-17 17:59
没把参数放出来
作者: hbsun2007    时间: 2018-8-10 21:51
谢谢楼主贡献
作者: d379751428    时间: 2018-8-11 20:51
非常感谢  、正愁PCB天线怎么画
作者: LUXIAN    时间: 2018-8-29 11:22
不错,学习了。
作者: 375582624    时间: 2018-8-29 11:42

不错,学习了。
作者: luodato    时间: 2018-11-21 11:22
很有帮助
作者: keyvan    时间: 2018-12-12 17:46
谢谢楼主分享好东西!
作者: mitosis    时间: 2019-2-17 17:28
谢谢分享!
作者: X3814072    时间: 2019-3-25 09:30
研究一下,再来回复
作者: zhuhanliang    时间: 2019-5-11 13:11
参考                     
作者: xiong2088    时间: 2019-7-23 10:31
不错,很有用。
作者: gugou    时间: 2019-9-2 14:59
谢谢分享
作者: okwe    时间: 2019-12-19 13:43
好东西 收藏收藏
作者: Robust_Gao    时间: 2020-3-1 22:48
不错挺好的
作者: 漫影    时间: 2020-5-26 14:02
不错不错,学习了!
作者: onono    时间: 2020-5-29 13:38
最近正准备调这个,只是天线还不会画。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1