我最近在用MF RC522模块和AT89C52做东西,但是怎么都完成不了第一步操作。我现在就想先把卡号读出来。但是程序一到有关卡的部分就嗝屁了,求大神帮忙!
这是我的主函数程序:
Led用做断点测试
void main( )
{
unsigned char status;
InitializeSystem( );//初始化:单片机所有引脚置1
LED_GREEN = 0;//////
// while(1){}
PcdReset();//重置RC522
PcdAntennaOff();
PcdAntennaOn(); //重启天线
M500PcdConfigISOType( 'A' ); //ISO14443_A
LED_RED = 0;//////
while ( 1 )
{
// PcdAntennaOff();
// status = 23 ;
status = PcdRequest(PICC_REQALL, g_ucTempbuf);
LED_YELLOW=0; //////程序执行到这儿执行不下去了;
if(status != MI_OK)
{
LED_GREEN = 1; //!LED_GREEN;
continue;
}
// LED_GREEN = 0;
status = PcdAnticoll(g_ucTempbuf); //卡号 *pSnr
if (status != MI_OK)
{ continue; }
status = PcdSelect(g_ucTempbuf); //pSnr[IN]:卡片序列号,4字节
if (status != MI_OK)
{ continue; }
status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//A密钥,块地址1,密码,卡片序列号
if (status != MI_OK)
{ continue; }
status = PcdWrite(1, data1); //块地址,写入的数据(16字节)
if (status != MI_OK)
{ continue; }
status = PcdValue(PICC_DECREMENT,1,data2); //增减值(扣款,钱包地址,4字节增减值)
if (status != MI_OK)
{ continue; }
status = PcdBakValue(1, 2); //备份钱包(源地址,目标地址)
if (status != MI_OK)
{ continue; }
status = PcdRead(2, g_ucTempbuf); //块地址,读出数据
if (status != MI_OK)
{ continue; }
PcdHalt();
// PcdAntennaOff();
}
}
每次执行到
status = PcdRequest(PICC_REQALL, g_ucTempbuf);
这条指令的时候就嗝屁了
|