找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于RC522用单片机IO模拟spi协议收发数据的问题http://www.51hei.com/bbs/forum.ph...

[复制链接]
跳转到指定楼层
楼主
ID:683881 发表于 2020-3-12 09:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void MFWriteReg(uchar reg,uchar dat)//向某个寄存器写数据
{
uchar i,addr;
MF_SCK=0;
MF_CS=0;
addr=((reg<<1)&0x7e);//写寄存时地址最高位为0,地址格式为0xxxxxxx0
  for(i=0;i<8;i++)
  {
   MF_MOSI=((addr&0x80)==0x80);//从高位开始写
   MF_SCK=1;
   addr<<=1;
   MF_SCK=0;//下降沿写一位
  }
for(i=0;i<8;i++)
  {
   MF_MOSI=((dat&0x80)==0x80);
   MF_SCK=1;
   dat<<=1;
   MF_SCK=0;   
  }
MF_CS=1;
MF_SCK=1;
}
uchar MFReadReg(uchar reg)//从某个寄存器读数据
{
uchar i,addr;
uchar dat=0;
MF_SCK=0;
MF_CS=0;
addr=((reg<<1)&0x7E) | 0x80;//读寄存器时地址最高位为1,地址格式为1xxxxxxx0
  for(i=0;i<8;i++)
  {
   MF_MOSI=((addr&0x80)==0x80);
   MF_SCK=1;
   addr<<=1;
   MF_SCK=0;
  }
for(i=0;i<8;i++)
  {
   MF_SCK=1;
   dat<<=1;
   dat|=(bit)MF_MISO;
   MF_SCK=0;
  }
MF_CS=1;
MF_SCK=1;
return dat;
}
/////////////以上是我的读写寄存器函数////////////////

void MFInit()//MFRC522初始化
{
MF_RST=1;//复位口上电,允许复位
MFReset();
MFWriteReg(TModeReg,0x8d);//定时器自启动,定时器递减到0时TimerIRq置位,0~3位为TPreScaler高4位
MFWriteReg(TPrescalerReg,0x3e);//预分频器设定,0~7位为TPreScaler低8位,f(Timer) = 6.78MHz/TPreScaler
MFWriteReg(TReloadRegL,0x1e);//计数器重装值
MFWriteReg(TReloadRegH,0x00);
MFWriteReg(TxAutoReg,0x40);//100%应答
MFWriteReg(ModeReg,0x3D);//CRC预置值0x6363 SIGIN高电平有效
MFAntennaOn();
}
///////以上是初始化函数//////
void ICManagement()//IC卡管理
{
uchar state;
MFInit();
while(KeyValue==15)
{
   OledClear();
   OledShowSentence(8,3,"      IC-TEST ");
   while(1)
   {
    state=MFReadReg(TReloadRegL);
    Delay1ms(500);
   UartSentByte(state);
   }
}
}

调用函数后对“TReloadRegL”寄存器进行读取,但是读取回来的都是0xFF,这是咋回事啊?

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

使用道具 举报

沙发
ID:605302 发表于 2020-3-16 16:22 | 只看该作者
我也碰到这种情况,其它协议都没问题
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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