我的程序:
void main(void)
{
InitializeSystem();
Rc632Ready();
PcdAntennaOff();
DelayMs(10);
PcdAntennaOn();
PcdConfigISOType( 'B' );
while(1)
{
if(M531PiccRequestB(PICC_REQBSTD,0,0,g_cReceBuf)==MI_OK)
{
P2 &=0xe7; //ºìÂÌɫָʾµÆÁÁ
}
}
}
void InitializeSystem(void)
{
//IO¿Ú³õʼ»¯
P0 = 0xff;
P1 = 0xff;
P2 = 0xff;
P3 = 0xff;
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD &= 0x0F;
TMOD = 0x21; //TMOD: timer 1, mode 2, 8-bit reload
PCON = 0x80;
TH1 = 0xFd; //Baud:9600 fosc=11.0592MHz
TL1 = TH1;
TR1 = 1; // timer 1 run
ES = 0;
EA = 0;
IE |= 0x90;
}
/////////////////////////////////////////////////////////////////////
//³õʼ»¯RC632
/////////////////////////////////////////////////////////////////////
void Rc632Ready(void)
{
char status;
DelayMs(100);
DelayMs(100);
DelayMs(100);
DelayMs(100);
DelayMs(100);
DelayMs(100);
DelayMs(100);
status = PcdReset();
if(status != MI_OK)
{
DelayMs(10);
status = PcdReset();
}
if(status != MI_OK)
{
DelayMs(10);
status = PcdReset();
}
if(status == MI_OK)
{
//ºìɫָʾµÆÁÁ£¬±íʾRC632¸´Î»³É¹¦
P2 &= 0xef;
}
}
//REQUEST B
//////////////////////////////////////////////////////////////////////
char M531PiccRequestB(unsigned char req_code,
unsigned char AFI,
unsigned char N,
unsigned char *ATQB)
{
char status;
struct TranSciveBuffer MfComData;
struct TranSciveBuffer *pi;
pi=&MfComData;
ClearBitMask(RegControl,0x08); // disable crypto 1 unit
SetBitMask(RegTxControl,0x03); // Tx2RF-En, Tx1RF-En enable
PcdSetTmo(5);
MfComData.MfCommand = PCD_TRANSCEIVE;
MfComData.MfLength = 3;
MfComData.MfData[0] = ISO14443B_ANTICOLLISION; // APf code
MfComData.MfData[1] = AFI; //
MfComData.MfData[2] = ((req_code<<3)&0x08) | (N&0x07); // PARAM
status = PcdComTransceive(pi);
if (status!=MI_OK && status!=MI_NOTAGERR)
{
status = MI_COLLERR; }
if (MfComData.MfLength != 96)
{
//P2 &= 0xf7;
status = MI_COM_ERR; /////程序就跑到这里
}
if (status == MI_OK)
{
memcpy(ATQB, &MfComData.MfData[0], 16);
PcdSetTmo(ATQB[11]>>4);
}
return status;
}
|