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,這是咋回事啊?
|