51单片机与RC500射频 作者: 时间:2016-11-26 来源:网络 收藏 char PcdRequest(uchar req_code){char status;idata struct TranSciveBuffer MfComData;struct TranSciveBuffer *pi;pi=&MfComData;PcdSetTmo(106);PcdAntennaOn();WriteRC(RegChannelRedundancy,0x03);ClearBitMask(RegControl,0x08);//Crypto1on=0WriteRC(RegBitFraming,0x07);MfComData.MfCommand=PCD_TRANSCEIVE;MfComData.MfLength=1;MfComData.MfData[0]=req_code;status=PcdComTransceive(pi);if(!status){if(MfComData.MfLength!=0x10){status=MI_BITCOUNTERR;}}return status;}uchar PiccCascAnticoll(uchar *snr)//这个指针变量没有用,但少了就会报错{uchar i;uchar snr_check=0;char status=MI_OK;idata struct TranSciveBuffer MfComData;struct TranSciveBuffer *pi;pi=&MfComData;PcdAntennaOn();PcdSetTmo(106);//设置定时器WriteRC(RegDecoderControl,0x28);//设置碰撞后接收的所有位都用0表示ClearBitMask(RegControl,0x08);//Crypto1=0WriteRC(RegChannelRedundancy,0x03);//使能奇校验MfComData.MfCommand=PCD_TRANSCEIVE;//发送接收命令MfComData.MfLength=2;//发送两个字节MfComData.MfData[0]=PICC_ANTICOLL1;//PICC_ANTICOLL1=93H,PiCC反碰撞指令MfComData.MfData[1]=0x20;//反碰撞还需要在发送一个20H,即想picc发送两个字节status=PcdComTransceive(pi);//PcdComTransceive函数将Mfdate中的数据发送给Piccif(!status)//表示执行命令没出错{for(i=0;i<4;i++)//执行命令后返回的前4个字节{snr_check^=MfComData.MfData[i];//接收到的前四个字节按位异或存入snr_check中}if(snr_check!=MfComData.MfData[i])//判断所接收序列号是否正确{status=MI_SERNRERR;//接收到的5个字节出错}else{for(i=0;i<5;i++){*(snr+i)=MfComData.MfData[i];}}}ClearBitMask(RegDecoderControl,0x20);return status;}char PcdSelect(uchar *snr,uchar *sar){uchar i;char status;uchar snr_check=0;idata struct TranSciveBuffer{uchar MfCommand;uchar MfLength;