通过串口通信实现对电子标签的读写,实现对读写卡编号的充值。
电子标签又称射频视频、应答器或射频卡。电子标签是射频识别真正的数据载体,从技术角度来说,射频识别的核心是电子标签,读写器是根据电子标签的性能而设计的。
电子标签由标签专用芯片和标签天线组成,而芯片用于存储物品的数据,电子标签的芯片很小,厚度一般不超过0.35mm;芯片具有一定的存储容量,可以存储被识别物体的相关信息。电子标签对标签接收的信号进行调解、解码等各种处理,并把标签需要返回的信号进行编码、调解等各种处理。
电子标签与读写器间通过电磁波进行通信。当电子标签进入读写器的工作区域后,受到读写器发出射频信号的激励,标签进入工作状态。
读写器又称为阅读器或询问器,是读取和写入电子标签内存信息的设备。读写器是一种数据采集设备,其基本作用就是作为数据交换的一环将前端电子标签所包含的信息,传递给后端的计算机网络。
char PcdRequest(unsigned char req_code,unsigned char *pTagType)//寻卡
char PcdAnticoll(unsigned char *pSnr)//防冲撞
char PcdSelect(unsigned char *pSnr)//选定卡片
charPcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)//验证卡片密码
char PcdRead(unsigned char addr,unsigned char *pData)
//读取M1卡一块数据
char PcdWrite(unsigned char addr,unsigned char *pData)
//写数据到M1卡一块
char PcdHalt(void)//命令卡片进入休眠状态
char PcdReset(void)//复位RC522
unsigned char ReadRawRC(unsigned char Address)//读RC632寄存器
void WriteRawRC(unsigned char Address, unsigned char value)
//写RC632寄存器
void SetBitMask(unsigned char reg,unsigned char mask)
//置RC522寄存器位
void ClearBitMask(unsigned char reg,unsigned char mask)
//清RC522寄存器位
char PcdComMF522(unsigned char Command,unsigned char *pInData,unsigned char InLenByte,unsigned char *pOutData,unsigned int *pOutLenBit)//通过RC522和ISO14443卡通讯
void PcdAntennaOn()//开启天线
void PcdAntennaOff()//关闭天线
这个程序中“.h”文件的内容是定义函数变量及所需函数原型,“.c”文件主要功能是对“.h”文件中声明的外部函数进行具体的实现,对具体实现方式没有特殊规定,只要实现其函数的功能即可。
串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。由于 串口 通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。 串口 通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行 通信的端口,这些参数必须匹配。
STC89C52RC单片机内部集成有一个可编程的全双工的异步通信串行口,可以作为通用异步接收/发送器(UART),也可作为同步移位寄存器使用。
2个数据缓冲器SBUF在物理上是相互独立的,一个用于发送数据、另一个用于接收数据。2个SBUF共用一个地址(99H),通过读写指令区别是对哪个SUBF的操作。
发送控制器的作用是在门电路和定时器T1的配合下,将发送缓冲器SBUF中的并行数据转为串行数据,并自动添加起始位、可编程位、停止位。这一过程结束后自动使发送中断请求标志位TI置1,用以通知CPU已将发送缓存器SBUF发中的数据输出到了TXD引脚。
- void send_byte( INT8U SendData )
- {
- ES = 0;
- TI = 0;//TI:发送中断标志位
- SBUF = SendData;
- while( TI == 0 ); //等待发送完成
- TI = 0; //清TI标志位
- ES = 1; //使能打开
- }
- INT8U rec_byte(void)//接收函数//当TI=1,或RI=1,或TI、RI同时为1时,串行口向CPU提出中断申请。
- {
- INT8U receive;
- ES = 0;
- RI = 0;//RI:接收中断标志位
- while( RI == 0 );//中断请求标志位清0 (RI=0)//当RI=0时要等RI变为1;
- RI = 0;
- ES = 1; //使能打开
- receive=SBUF;
- return receive;
- }
- void init_uart(void)//串口初始化
- {
- SCON = 0x50;//串口工作在方式1,允许接收,清中断标志
- ES=1;
- }
- void init_timer(void) //20ms
- {
- TMOD = 0X21;//TMOD定时寄存器
- ET1 = 1;
- TH1 = 256 - FOSC / 12 / 32 / BAUD;//8位, 定时器
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码