»ùÓÚRFIDµÄÃŽû¿ØÖÆϵͳÑо¿Éè¼Æ£¨Áõɺ£©

·¢²¼Ê±¼ä : ÐÇÆÚÁù ÎÄÕ»ùÓÚRFIDµÄÃŽû¿ØÖÆϵͳÑо¿Éè¼Æ£¨Áõɺ£©¸üÐÂÍê±Ï¿ªÊ¼ÔĶÁ

ºþÄÏÈËÎĿƼ¼Ñ§Ôº±ÏÒµÂÛÎÄ£¨Éè¼Æ£©

}

¸½ ¼2

unsignedeharMf5OOCaseAniieoll(unsigned char selectcode£¬unsigned char bcnt unsigned char*snr)

{

Unsigned char complete; Unsigned char status; complete=0; status=MI_OK;

while((complete=0)&&(status=MI_OK)) {

nBytesReceived=0;

/*½ûÖ¹RxCRCºÍTxCRC£¬Ð£ÑéʹÄÜ*/ regwrite(RegChannelRedundancy£¬ox03): nbits=bent%8;//λ¸öÊý if(nbits) {

regwrite(RegBitFraming£¬nbits<<4nbits); nbytes=ben/8+1://×Ö½Ú¸öÊý } else

nbytes=bcnt/8; for(i=0;i

NVB=0x20+(bcnt/8)<<4)+nbits;//Òª·¢Ë͵Ä×Ö½ÚÊý regwrite(ReglntemiptEn£¬ox7F;//½ûÖ¹ËùÓÐÖÐ¶Ï regwrite(ReglntemipRq£¬ox7F);//¸´Î»requestÖжÏ

regwrite(Regcommand£¬PCD IDLE);//ÖÐÖ¹¿ÉÄÜÕýÔÚÔËÐеijÌÐò regwrite(RegControl£¬regread(Regcontrol)}ox0l);//Çå¿ÕFIFO regwrite(RegFIFOData,ox93);//дÈëSELÃüÁî´úÂë regwrite(RegFIFOData£¬NVB);//дÈëNVBÃüÁî´úÂë for(i=0:i

regwrite(RegInterruptEn£¬ox84);//TimerIRqºÍIdleIRqʹÄÜ regwrite(RegCommand£¬pcD_CRANscEIVE)://ÃüÁʼִÐÐ mrc500_cnt==0x00;

while((!(regreed(RegPrimaryStatus)&ox08))&&(mre500secnt<200)) mre500escnt+=1;//³¬Ê±»òÃüÁî½áÊøÅÐ¶Ï if(mrc500_cnt>=200)//³¬Ê±Ê±µÄ´¦Àí {

regwrite(RegCommand£¬PCD_DLE);//ÖÐÖ¹³ÌÐò status=MI_ACCESSTIMEOUT: return status; }

36

ºþÄÏÈËÎĿƼ¼Ñ§Ôº±ÏÒµÂÛÎÄ£¨Éè¼Æ£©

status=regread(RegErrorFlag)&ox07;//¶ÁÈ¡´íÎó±êÖ¾ //´íÎóÅÐ¶Ï if(status) {

If(status&oxol)

status=MI_COLERR;//ÅжÏΪ³åÍ»¼ì²â´íÎó if(status&ox02)

status=MI_PARITYERR;//ÅжÏΪУÑé´íÎó if(status&0x04)

status=MI_FRAMINGERR;//ÅжÏΪ֡´íÎó

nBytesReceived=regread(RegFIFOLength)://¶ÁÈ¡Êý¾Ý³¤¶È for (i=0:i

coll_data[i]=regread(RegFIFOData);

if(regread(RegFIFOLength)>=ox04)//ÅжϽÓÊÕµÄÊý¾Ý³¤¶ÈÊÇ·ñÕýÈ· {for(status=0:status<4;status++)

snr_nr[status]=regread(RegFIFOData); status=MI_OK; } ??

if(status=MI_OK) {

memcpy(snr£¬snr_in£¬4);//±£´æsnr ?? } else

memcpy(snr£¬¡±0000¡±,4); /*³åÍ»½ûÖ¹ºóÖÃ0*/

regwrite(RegDecderControl£¬regread(RegDecoderControl)&(}ox20)); regwrite(RegCommand£¬PCDwe IDLE)://ÖÐÖ¹³ÌÐò retomStatus; }

¸½ ¼3

Unsigned char Mf500CaseSelect(unsigned char select code£¬unsigned char*snr£¬unsigned char*sak)

{??

regwdte(RegInterruptEn£¬ox7F)://½ûÖ¹ËùÓÐÖÐ¶Ï regwrite(RegInterruptRq£¬ox7F)://¸´Î»requestÖжÏ

regwrite(RegCommand£¬PCD_DLE);//ÖÐÖ¹¿ÉÄÜÕýÔÚÔËÐеÄÆäËü³ÌÐò regwrite(RegControl£¬regread(RegControl)|oxol);//Çå¿ÕFIFO regwrite(RegFIFOData£¬ox93);//дÈëSELÃüÁî´úÂë regwrite(RegFIFOData£¬ox70);//дÈëNVBÃüÁî´úÂë for(satus=0;status<4;status++)

regwrite(RegFIFOData,snr[status]);//дsnrµ½FIFO

37

ºþÄÏÈËÎĿƼ¼Ñ§Ôº±ÏÒµÂÛÎÄ£¨Éè¼Æ£©

status=snr[0]^snr[l]^snr[2]^snr[3];//¼ÆËãBCC

regwrite(RegFIFOData£¬status);//½«BCCдÈëFIFO

regwrite(ReglnterruptEn£¬oxA4)://ʹÄÜTimerIRqºÍIdleIRq regwrite(RegCommand£¬PCD TRANSCEIVE);//ÃüÁʼִÐÐ mrc500_cnt=0x00:

while((!(regread(RegPrimaryStatus)&0x08))&&(mre500_cnt<100)) mrc500_cnt+=l;//³¬Ê±»òÃüÁî½áÊøÅÐ¶Ï if(mrc 500_cnt>=100)//³¬Ê±Ê±µÄ´¦Àí {

regwrite(RegCommand£¬PEDIDLE)://³¬Ê±Ê±ÖÐÖ¹³ÌÐò status=MI_ACCESSTIMEOUT;//Öó¬Ê±±êÖ¾ return status; }

status=regread(RegErrorFlag)&ox07;//δ³¬Ê±Ê±¶ÁÈ¡´íÎó±êÖ¾ if (status) {

if(status&oxol)

status¡°MI_COLLERR;//ÅжÏΪ³åÍ»¼ì²â´íÎó if(status&0x02)

status=MI_PARITYERR;//ÅжÏΪУÑé´íÎó if(status&0x04)

status=MI_FRAMINGERR;//ÅжÏΪ֡´íÎó }else

If (regread(RegFIFOLength)==oxol) {//ÅжϽÓÊÕÊý¾Ý³¤¶ÈÊÇ·ñÕýÈ· if(regread(RegFIFOData)&0x04)

status=MI_SAKERR;//ÅжÏΪSAK´íÎó else status=MI_OK:

}else status=MI BITCOUNTERR;//Êý¾Ý³¤¶È²»·ûºÏÔòΪ¼ÆÊý´íÎó regwrite(RegCommand£¬PCD_IDLE)://³ÌÐòÖÕÖ¹ return status; }

¸½ ¼4

unsignedeharMf500Read(unsigned char block_add£¬unsigned char value[]) {

restart_Watch_Dog;//¸´Î»¿´ÃŹ·

regwrite(RegInterruptEn£¬ox7F);//½ûÖ¹ËùÓÐÖÐ¶Ï regwrite(RegInterruptRq£¬ox7F)://¸´Î»requestÖжÏ

rewrite(Regcommand£¬PCDweIDLE)://ÖÐÖ¹¿ÉÄÜÕýÔÚÔËÐеÄÆäËü³ÌÐò regwrite(RegControl£¬regread(RegControl)!ox0l);//Çå¿ÕFIFO regwrite(RegFIFOData£¬PICCee_READ)://дÈëreadÃüÁî regwrite(RegFIFOData£¬block_add);//дÈëblock_add²ÎÊý regwrite(RegInterruptEn£¬ox84)://ʹÄÜIdleIRqÖжÏ

38

ºþÄÏÈËÎĿƼ¼Ñ§Ôº±ÏÒµÂÛÎÄ£¨Éè¼Æ£©

regwrite(RegCommand£¬PCD_TRANSCEIVE)://дÈëÃüÁî´úÂë mrc500_cnt=0;

while((!(regread(RegPrimaryStatus)&ox08))&&(mrc500_cnt<200)) mrc500_cnt+=l;//³¬Ê±»òÃüÁî½áÊøÅÐ¶Ï if(mrc500_cnt>=200) {

regwrite(RegCommand£¬PCD IDLE)://³¬Ê±Ê±µÄ´¦Àí status=MI_CCESSTIMEOUT; return status; }

status=regread(RegErrorFlag)&ox0e;//¶ÁÈ¡´íÎó±êÖ¾ if(status) {

if(status&ox02)

status=MI_ACCESSTYERR;//ÅжÏΪУÑé´íÎó if(status&ox04)

status=MI_FRAMINGERR;//ÅжÏΪ֡´íÎó if(status&ox08)

status=MI_CRCERR;//ÅжÏΪCRC´íÎó } else {

if(regread(RegFIFOLength)==ox10)//ÅжÏËù½ÓÊÕµ½µÄÊý¾Ý³¤¶ÈÊÇ·ñÕýÈ·ÖÝÊý¾Ý³¤¶ÈÕýȷʱµÄ´¦Àí

for(status=0;status<16;status++)

value[status]=regread(RegFIFOData);//¶ÁÈ¡Ò»¸öÉÈÇøÖеÄ1¸öÊý¾Ý¿é statu=MI_OK; } else

status=MI_BITCOUNTERR;//ÖÃÊý¾Ý³¤¶È³ö´í±êÖ¾ }

regwrite(RegCommand£¬PCD_IDLE)://³ÌÐòÖÕÖ¹ return status; }

39

ÁªÏµºÏͬ·¶ÎÄ¿Í·þ£ºxxxxx#qq.com(#Ì滻Ϊ@)