标题:
关于RC522用单片机IO模拟spi协议收发数据的问题http://www.51hei.com/bbs/forum.ph...
[打印本页]
作者:
大魔王小张
时间:
2020-3-12 09:25
标题:
关于RC522用单片机IO模拟spi协议收发数据的问题http://www.51hei.com/bbs/forum.ph...
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,这是咋回事啊?
作者:
nbmbnn
时间:
2020-3-16 16:22
我也碰到这种情况,其它协议都没问题
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1