搜索
bottom↓
回复: 2

求指点--我读出来RFID-RC522寄存器值为“0”

[复制链接]

出0入0汤圆

发表于 2014-4-24 15:35:52 | 显示全部楼层 |阅读模式
本帖最后由 and001 于 2014-4-24 15:38 编辑

最近调试一个RFID软件:发现一个问题---就是读出来的值是“0”

我明明是将某个位已经置“1”了可是读出来还是“0”


为了简洁列出 主要函数
主要函数如下:
//初始化函数:
void MC522_Initial(void)
{

     PcdReset();        
   PcdAntennaOff();   
     Delay_us(10000);  
   PcdAntennaOn();     
     Delay_us(10000);  
   M500PcdConfigISOType( 'A' );  


}


/////////////////////////////////////////////////////////////////////
//复位RC522
//成功返回: MI_OK
/////////////////////////////////////////////////////////////////////
char PcdReset(void)
{
    MF522_RST_H()   
    __NOP;
   Delay_us(1);
    MF522_RST_L()
    __NOP;
   Delay_us(1);     MF522_RST_H()
     __NOP;
   Delay_us(1);
    WriteRawRC(CommandReg,PCD_RESETPHASE);      __NOP;
   
    WriteRawRC(ModeReg,0x3D);            
    WriteRawRC(TReloadRegL,30);           
    WriteRawRC(TReloadRegH,0);
    WriteRawRC(TModeReg,0x8D);
    WriteRawRC(TPrescalerReg,0x3E);
    WriteRawRC(TxAutoReg,0x40);     
    return MI_OK;
}

/////////////////////////////////////////////////////////////////////
//开启天线
//每次开启天线或者关闭天线时间间隔大于1mS
/////////////////////////////////////////////////////////////////////
void PcdAntennaOn()
{
    unsigned char i;
    i = ReadRawRC(TxControlReg);
  
  printf("\n 先确认txcontrolreg= %d.     \r\n  ", i );

    if (!(i & 0x03))
    {
        SetBitMask(TxControlReg, 0x03);
   
     i = ReadRawRC(TxControlReg);  //add by chen jian
     printf("\n 再读出txcontrolreg= %d:     \r\n  ", i );   

//问题点:刚写进去第三位为“1”,可是读出来还是“0”

}
}


/////////////////////////////////////////////////////////////////////
//读RC632寄存器的值
//返回读出值
/////////////////////////////////////////////////////////////////////
unsigned char ReadRawRC(unsigned char Address)
{
     unsigned char i, ucAddr;
     unsigned char ucResult=0;

     MF522_SCK_L()
     MF522_NSS_L()
    Delay_us(1);  //add by chen ji an
     ucAddr = Address|0x80; // ucAddr = ((Address<<1)&0x7E)|0x80;  //我自己修改部分,其实后面是没有改的语句也是不行

//特别说明下:我是认为第一个地址左移一次后值改变了,好像有点矛盾,所有自己改了下同时也满足读的时候第一个字节高位为“1”

     for(i=8;i>0;i--)
     {
        // MF522_SI = ((ucAddr&0x80)==0x80);// 从51移植过来的,现在MCU是STM32
         if ((ucAddr&0x80)==0x80)
            MF522_SI_H()  
        else   
           MF522_SI_L()     
        
        
               
         MF522_SCK_H()
     Delay_us(1);  //add by chen ji an
         ucAddr <<= 1;
         MF522_SCK_L()
     Delay_us(1);  //add by chen ji an
     }

     for(i=8;i>0;i--)
     {
         MF522_SCK_H()
      Delay_us(1);  //add by chen ji an
         ucResult <<= 1;
//     ucResult|=MF522_SO; // ucResult|=(bit)MF522_SO; // 从51移植过来的,现在MCU是STM32
     
     if( GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))  ucResult|=0x01;
     else    ucResult&=~0x01;
   
   
   
         MF522_SCK_L()
      Delay_us(1);  

     }

     MF522_NSS_H()
     MF522_SCK_H()
     return ucResult;
}



/////////////////////////////////////////////////////////////////////
//些RC632寄存器
//
/////////////////////////////////////////////////////////////////////
void WriteRawRC(unsigned char Address, unsigned char value)
{  
    unsigned char i, ucAddr;

    MF522_SCK_L()
    MF522_NSS_L()
   Delay_us(1);  //add by chen ji an
    ucAddr = (Address&0x7F);   // ucAddr = ((Address<<1)&0x7E);  //我自己修改部分,其实后面是没有改的语句也是不行

//特别说明下:我是认为第一个地址左移一次后值改变了,好像有点矛盾,所有自己改了下同时也满足写的时候第一个字节高位为“0”
    for(i=8;i>0;i--)
    {
       // MF522_SI = ((ucAddr&0x80)==0x80);  // 从51移植过来的,现在MCU是STM32

         if ((ucAddr&0x80)==0x80)
           MF522_SI_H()  
    else   
           MF522_SI_L()
      
      
      
        MF522_SCK_H()
  
      Delay_us(1);  //add by chen ji an
        ucAddr <<= 1;
        MF522_SCK_L()
      Delay_us(1);  //add by chen ji an
    }

    for(i=8;i>0;i--)
    {
       // MF522_SI = ((value&0x80)==0x80);  // 从51移植过来的,现在MCU是STM32
  if ((value&0x80)==0x80)
           MF522_SI_H()  
    else   
           MF522_SI_L()
   
        MF522_SCK_H()
      Delay_us(1);  //add by chen ji an
        value <<= 1;
        MF522_SCK_L()
      Delay_us(1);  //add by chen ji an
    }
    MF522_NSS_H()
    MF522_SCK_H()
}



请有做过这个的高人帮忙指点!求救。。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2014-4-25 09:15:42 | 显示全部楼层
自己发现的问题并且解决了!

是自己定义的GPIO弄错了脚号,所有读出来的全是“0”,自己的粗心!见笑了!

如果有出现同样的问题,可以和我一起学习!
谢谢大家!

出0入0汤圆

 楼主| 发表于 2014-4-24 15:39:01 | 显示全部楼层
感觉读写不成功
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 06:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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