教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

基于单片机的RFID读写器设计(12)

来源:网络收集 时间:2026-08-25
导读: WriteRawRC(reg, tmp // clear bit mask } ///////////////////////////////////////////////////////////////////// //功 能:通过RC522和ISO14443卡通讯 //参数说明:Command[IN]:RC522命令字 // pInData[IN]:通

WriteRawRC(reg, tmp & ~mask); // clear bit mask }

///////////////////////////////////////////////////////////////////// //功 能:通过RC522和ISO14443卡通讯 //参数说明:Command[IN]:RC522命令字

// pInData[IN]:通过RC522发送到卡片的数据 // InLenByte[IN]:发送数据的字节长度 // pOutData[OUT]:接收到的卡片返回数据 // *pOutLenBit[OUT]:返回数据的位长度

///////////////////////////////////////////////////////////////////// char PcdComMF522(unsigned char data Command, unsigned char *pInData,

unsigned char data InLenByte, unsigned char *pOutData, unsigned int *pOutLenBit) {

char data status = MI_ERR;

unsigned char data irqEn = 0x00; unsigned char data waitFor = 0x00; unsigned char data lastBits; unsigned char data n; unsigned int data i; switch (Command) {

case PCD_AUTHENT: irqEn = 0x12; waitFor = 0x10; break;

case PCD_TRANSCEIVE: irqEn = 0x77; waitFor = 0x30; break; default: break; }

WriteRawRC(ComIEnReg,irqEn|0x80); ClearBitMask(ComIrqReg,0x80); WriteRawRC(CommandReg,PCD_IDLE); SetBitMask(FIFOLevelReg,0x80);

for (i=0; i

{ WriteRawRC(FIFODataReg, pInData[i]); }

WriteRawRC(CommandReg, Command);

if (Command == PCD_TRANSCEIVE)

{ SetBitMask(BitFramingReg,0x80); }

//i = 600;//根据时钟频率调整,操作M1卡最大等待时间25ms i = 2000; do {

n = ReadRawRC(ComIrqReg); i--; }

while ((i!=0) && !(n&0x01) && !(n&waitFor)); ClearBitMask(BitFramingReg,0x80);

if (i!=0) {

if(!(ReadRawRC(ErrorReg)&0x1B)) {

status = MI_OK;

if (n & irqEn & 0x01)

{ status = MI_NOTAGERR; } if (Command == PCD_TRANSCEIVE) {

n = ReadRawRC(FIFOLevelReg);

lastBits = ReadRawRC(ControlReg) & 0x07; if (lastBits)

{ *pOutLenBit = (n-1)*8 + lastBits; } else

{ *pOutLenBit = n*8; } if (n == 0) { n = 1; } if (n > MAXRLEN) { n = MAXRLEN; } for (i=0; i

{ pOutData[i] = ReadRawRC(FIFODataReg); } } } else

{ status = MI_ERR; } }

SetBitMask(ControlReg,0x80); // stop timer now WriteRawRC(CommandReg,PCD_IDLE); return status; }

///////////////////////////////////////////////////////////////////// //开启天线

//每次启动或关闭天险发射之间应至少有1ms的间隔

///////////////////////////////////////////////////////////////////// void PcdAntennaOn(void) {

unsigned char data i;

i = ReadRawRC(TxControlReg); if (!(i & 0x03)) {

SetBitMask(TxControlReg, 0x03); } }

///////////////////////////////////////////////////////////////////// //关闭天线

///////////////////////////////////////////////////////////////////// void PcdAntennaOff(void) {

ClearBitMask(TxControlReg, 0x03); }

///////////////////////////////////////////////////////////////////// //功 能:扣款和充值

//参数说明: dd_mode[IN]:命令字 // 0xC0 = 扣款 // 0xC1 = 充值 // addr[IN]:钱包地址

// pValue[IN]:4字节增(减)值,低位在前 //返 回: 成功返回MI_OK

///////////////////////////////////////////////////////////////////// /*char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue) {

char status;

unsigned int unLen;

unsigned char ucComMF522Buf[MAXRLEN]; //unsigned char i;

ucComMF522Buf[0] = dd_mode; ucComMF522Buf[1] = addr;

CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);

status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);

if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A)) { status = MI_ERR; }

if (status == MI_OK) {

memcpy(ucComMF522Buf, pValue, 4); //for (i=0; i<16; i++)

//{ ucComMF522Buf[i] = *(pValue+i); }

CalulateCRC(ucComMF522Buf,4,&ucComMF522Buf[4]); unLen = 0; status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,6,ucComMF522Buf,&unLen); if (status != MI_ERR) { status = MI_OK; } }

if (status == MI_OK) {

ucComMF522Buf[0] = PICC_TRANSFER; ucComMF522Buf[1] = addr;

CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);

status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);

if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A)) { status = MI_ERR; } }

return status; }*/

///////////////////////////////////////////////////////////////////// //功 能:备份钱包

//参数说明: sourceaddr[IN]:源地址 // goaladdr[IN]:目标地址 //返 回: 成功返回MI_OK

/////////////////////////////////////////////////////////////////////

/*char PcdBakValue(unsigned char sourceaddr, unsigned char goaladdr) {

char status;

unsigned int unLen;

unsigned char ucComMF522Buf[MAXRLEN];

ucComMF522Buf[0] = PICC_RESTORE; ucComMF522Buf[1] = sourceaddr;

CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);

status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,u …… 此处隐藏:2526字,全部文档内容请下载后查看。喜欢就下载吧 ……

基于单片机的RFID读写器设计(12).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/606339.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)