MF RC522 射频识别参考程序注释(3)

2019-04-16 17:16

By 曙光单片机科技 RC522程序读书笔记 详细注释

unsigned char data ucAddr; CLR_SPI_CS;

ucAddr = ((Address<<1)&0x7E);//变化成有效的地址形式,最低为为0,最高位为1时候是,写入MFRC522数据 SPIWriteByte(ucAddr); SPIWriteByte(value); SET_SPI_CS; }

///////////////////////////////////////////////////////////////////// //功 能:置RC522寄存器位 //参数说明:reg[IN]:寄存器地址 // mask[IN]:置位值

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

void SetBitMask(unsigned char data reg,unsigned char data mask) {

char data tmp = 0x0; tmp = ReadRawRC(reg);

WriteRawRC(reg,tmp | mask); // set bit mask }

///////////////////////////////////////////////////////////////////// //功 能:清RC522寄存器位 //参数说明:reg[IN]:寄存器地址 // mask[IN]:清位值

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

void ClearBitMask(unsigned char data reg,unsigned char data mask) {

char data tmp = 0x0; tmp = ReadRawRC(reg);

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,

By 曙光单片机科技 RC522程序读书笔记 详细注释

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);//清除FIFO中的读写指针

for (i=0; i

{ WriteRawRC(FIFODataReg, pInData[i]); }//写寻卡命令 WriteRawRC(CommandReg, Command);//发送并接收数据

if (Command == PCD_TRANSCEIVE)

{ SetBitMask(BitFramingReg,0x80); }//相当于启动发送STARTSENG

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

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

By 曙光单片机科技 RC522程序读书笔记 详细注释

while ((i!=0) && !(n&0x01) && !(n&waitFor));

ClearBitMask(BitFramingReg,0x80);//相当于清除发送STARTSENG

if (i!=0)//定时时间到,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;

By 曙光单片机科技 RC522程序读书笔记 详细注释

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

SetBitMask(TxControlReg, 0x03); //tx12RFEN==11; ,打开发射管脚 } }

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

///////////////////////////////////////////////////////////////////// void PcdAntennaOff(void) { ClearBitMask(TxControlReg, 0x03); //tx12RFEN==00; ,禁止发射管脚 }

强烈推荐RC522配套模块:http://item.taobao.com/item.htm?id=16201295310

详细介绍:SG-RC522射频读卡模块是在传统射频设计基础之上升级的产品,既实现了基本IC卡的数据读写功能,突出的优点就是天线设计更专业,天线的宽度,拐角弧度处理的更加自然,所以感应性能非常卓越!!资深PCB设计专家走线布局,模块整体美观大

By 曙光单片机科技 RC522程序读书笔记 详细注释

方,同时还有独特的LED指示灯,模块3.3V供电,适用于所有单片机只要您有空闲的IO口就可以,不需要电平转换,非常人性化设计。相比其他公司的射频模块SG-RC522最突出的优点是一方面,实验项目更加丰富,更适合学习和项目开发应用。 接口方式:

江苏曙光单片机科技


MF RC522 射频识别参考程序注释(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016年用经济学智慧解读中国尔雅考试满分答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: