找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC15+RC523读卡ID 寻卡直接失败了,找不到问题点在哪里

[复制链接]
跳转到指定楼层
楼主
ID:675145 发表于 2020-1-11 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RC523已经可以正常读写M1卡了,按键控制,OLED显示数据,没有用串口显示但是ID读不出来,第一步寻卡直接失败了,找不到问题点在哪里,知道的大佬能提点一下。以下是代码。
单片机源程序如下:
  1. u8 xdata AAA=0;
  2. u8 xdata pUID[10]={0};
  3. void Pcd_Config(u8 type)//寄存器配置
  4. {
  5.         PcdAntennaOff();
  6.         if ('A' == type)
  7.         {         
  8.                 WriteRawRC(CommandReg,PCD_RESETPHASE);
  9.                 _nop_();
  10.                 WriteRawRC(ModeReg,0x3D);            //和Mifare卡通讯,CRC初始值0x6363
  11.                 WriteRawRC(TReloadRegL,30);           
  12.                 WriteRawRC(TReloadRegH,0);
  13.                 WriteRawRC(TModeReg,0x8D);
  14.                 WriteRawRC(TPrescalerReg,0x3E);
  15.                 WriteRawRC(TxAutoReg,0x40);

  16.                 ClearBitMask(Status2Reg,0x08);
  17.                 WriteRawRC(ModeReg,0x3D);//3F
  18.                 WriteRawRC(RxSelReg,0x86);//84
  19.                 WriteRawRC(RFCfgReg,0x7F);   //4F
  20.                 WriteRawRC(TReloadRegL,30);//tmoLength);// TReloadVal = 'h6a =tmoLength(dec)
  21.                 WriteRawRC(TReloadRegH,0);
  22.                 WriteRawRC(TModeReg,0x8D);
  23.                 WriteRawRC(TPrescalerReg,0x3E);        
  24.         }
  25.         else if ('B' == type)
  26.         {
  27.                 ClearBitMask(Status2Reg, 0x08);
  28.                 WriteRawRC(ControlReg, 0x10);
  29.                 WriteRawRC(ModeReg, 0x3F);                                       // For 0xFFFF crc
  30.                 WriteRawRC(TReloadRegL, 30);
  31.                 WriteRawRC(TReloadRegH, 0);
  32.                 WriteRawRC(TModeReg, 0x8D);
  33.                 WriteRawRC(TPrescalerReg, 0x3E);
  34.                 WriteRawRC(TxAutoReg, 0);        // Force 100ASK = 0
  35.                
  36.                 /**************************************发送部分*****************************/
  37.                 WriteRawRC(GsNReg, 0xFa);   //0xF8  
  38.                 WriteRawRC(CWGsCfgReg, 0x3F);
  39.                 WriteRawRC(ModGsCfgReg, 0x08); //08
  40.                 WriteRawRC(TxModeReg, 0x83);   //03   
  41.                 WriteRawRC(BitFramingReg, 0x00);
  42.                 WriteRawRC(AutoTestReg, 0x00);
  43.                         
  44.                 WriteRawRC(TypeBReg, 0xc0);
  45.                 WriteRawRC(ModWidthReg,0x68);
  46.                 WriteRawRC(DemodReg, 0x5D);
  47.                 WriteRawRC(RFCfgReg, 0x70);  // 0x59 RegRxControl1//73,
  48.                 WriteRawRC(RxModeReg, 0x83);        //03      
  49.                 WriteRawRC(RxThresholdReg, 0x65);//0x75);

  50.                 /**************************************TYPEB特征参数设定*****************************/
  51.                 ClearBitMask(RxSelReg,0x3F);        // TR0
  52.                 SetBitMask(RxSelReg, 0x08);
  53.                 ClearBitMask(TxModeReg, 0x80);       // ?CRC
  54.                 ClearBitMask(RxModeReg, 0x80);
  55.                 ClearBitMask(Status2Reg, 0x08);      // MFCrypto1On =0

  56.         }
  57.         PcdAntennaOn();
  58. }
  59. void typeB_Allot()
  60. {
  61.         u8 status;
  62.         static u16 xdata count=0;
  63.         if(key4x4_Read_Byte==5)
  64.         {
  65.                 count++;
  66.                 if(count>=200)
  67.                 {
  68.                         count=0;
  69.                         switch(key4x4_Read_Byte)
  70.                         {
  71.                                 case 5:        
  72.                                                 status=RCRequestTypeB();
  73.                                                 if(status==MI_OK)
  74.                                                 {
  75.                                                         key4x4_Read_Byte=6;
  76.                                                 }
  77.                                                 else
  78.                                                 {
  79.                                                         AAA=1;
  80.                                                 }
  81.                                                 break;
  82.                                 case 6:        
  83.                                                 status=RCATTRIBTypeB();
  84.                                                 if(status==MI_OK)
  85.                                                 {
  86.                                                         key4x4_Read_Byte=7;
  87.                                                 }
  88.                                                 else
  89.                                                 {
  90.                                                         AAA=2;
  91.                                                 }
  92.                                                 break;
  93.                                 case 7:
  94.                                                 status=RCGetUIDTypeB(pUID);
  95.                                                 if(status==MI_OK)
  96.                                                 {
  97.                                                         key4x4_Read_Byte=8;
  98.                                                 }
  99.                                                 else
  100.                                                 {
  101.                                                         AAA=3;
  102.                                                 }
  103.                                                 break;
  104.                                 case 8:
  105. //                                                PcdHalt();//终止卡的操作,命令卡片进入休眠状态        
  106.                                                 AAA=4;
  107.                                                 key4x4_Read_Byte=0;
  108.                                                 break;
  109.                         }
  110.                 }
  111.         }
  112. }
  113. void OLED_Allot()
  114. {        
  115.         static u16 xdata count=0;
  116.         if(OLED_Modify_Allow)                //允许单片机修改XRAM
  117.         {
  118.                 count++;
  119.                 switch(count)
  120.                 {
  121.                         case 5: OLED_Symbol_Ser(0,0,pUID[0]/16+'0',pUID[0]%16+'0');break;
  122.                         case 10:OLED_Symbol_Ser(0,1,pUID[1]/16+'0',pUID[1]%16+'0');break;
  123.                         case 15:OLED_Symbol_Ser(0,2,pUID[2]/16+'0',pUID[2]%16+'0');break;
  124.                         case 20:OLED_Symbol_Ser(0,3,pUID[3]/16+'0',pUID[3]%16+'0');break;
  125.                         case 25:OLED_Symbol_Ser(0,4,pUID[4]/16+'0',pUID[4]%16+'0');break;
  126.                         case 30:OLED_Symbol_Ser(0,5,pUID[5]/16+'0',pUID[5]%16+'0');break;
  127.                         case 35:OLED_Symbol_Ser(0,6,pUID[6]/16+'0',pUID[6]%16+'0');break;
  128.                         case 40:OLED_Symbol_Ser(0,7,pUID[7]/16+'0',pUID[7]%16+'0');break;
  129.                         case 45:OLED_Symbol_Ser(2,0,pUID[8]/16+'0',pUID[8]%16+'0');break;
  130.                         case 50:OLED_Symbol_Ser(2,2,pUID[9]/16+'0',pUID[9]%16+'0');break;
  131.                         case 55:OLED_Symbol_Ser(2,4,key4x4_Read_Byte+'0',AAA+'0');
  132. //                        case 60:OLED_Symbol_Ser(2,7,Read_Buffer[14]+'0',Read_Buffer[15]+'0');break;        
  133. //                        case 65:OLED_Symbol_Ser(4,3,(AAA-1)/10+'0',(AAA-1)%10+'0');
  134.                                         count=0;break;                        
  135.                 }
  136.                 OLED_Modify_Allow=0;
  137.         }
  138.         else                //不允许修改RAM,只能显示数据到OLED
  139.         {
  140.                 OLED_New_Show_Ser();
  141.         }        
  142. }

  143. void main()
  144. {
  145.         P0M1=0;P0M0=0;
  146.         P1M1=0;P1M0=0;
  147.         P2M1=0;P2M0=0;
  148.         P3M1=0;P3M0=0;
  149.         P4M1=0;P4M0=0;
  150.         P5M1=0;P5M0=0;
  151.         IIC_Init();
  152.         OLED_Init();
  153. //        Pcd_Config('A');
  154.         Pcd_Config('B');
  155.         while(1)
  156.         {
  157.                 OLED_Allot();
  158.                 key_Scan_Drive();
  159.                 typeA_Allot();
  160.                 typeB_Allot();
  161.         }
  162. }
复制代码

RC523测试.rar

142.11 KB, 下载次数: 18

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

使用道具 举报

沙发
ID:404160 发表于 2020-1-13 20:25 | 只看该作者
IC卡与ID卡的类型不同吧?即频率不同125k与13.及兆
回复

使用道具 举报

板凳
ID:675145 发表于 2020-1-14 12:58 | 只看该作者
飞云居士 发表于 2020-1-13 20:25
IC卡与ID卡的类型不同吧?即频率不同125k与13.及兆

诶。。不是ID卡    M1卡能用了,想刷,调试不起来
回复

使用道具 举报

地板
ID:337487 发表于 2022-12-23 10:42 | 只看该作者
正好在调试这个芯片,学习一下。
回复

使用道具 举报

5#
ID:1034262 发表于 2022-12-23 10:56 | 只看该作者
有协议的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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