通過串口通信實(shí)現(xiàn)對電子標(biāo)簽的讀寫,實(shí)現(xiàn)對讀寫卡編號的充值。
電子標(biāo)簽又稱射頻視頻、應(yīng)答器或射頻卡。電子標(biāo)簽是射頻識別真正的數(shù)據(jù)載體,從技術(shù)角度來說,射頻識別的核心是電子標(biāo)簽,讀寫器是根據(jù)電子標(biāo)簽的性能而設(shè)計(jì)的。
電子標(biāo)簽由標(biāo)簽專用芯片和標(biāo)簽天線組成,而芯片用于存儲物品的數(shù)據(jù),電子標(biāo)簽的芯片很小,厚度一般不超過0.35mm;芯片具有一定的存儲容量,可以存儲被識別物體的相關(guān)信息。電子標(biāo)簽對標(biāo)簽接收的信號進(jìn)行調(diào)解、解碼等各種處理,并把標(biāo)簽需要返回的信號進(jìn)行編碼、調(diào)解等各種處理。
電子標(biāo)簽與讀寫器間通過電磁波進(jìn)行通信。當(dāng)電子標(biāo)簽進(jìn)入讀寫器的工作區(qū)域后,受到讀寫器發(fā)出射頻信號的激勵,標(biāo)簽進(jìn)入工作狀態(tài)。
讀寫器又稱為閱讀器或詢問器,是讀取和寫入電子標(biāo)簽內(nèi)存信息的設(shè)備。讀寫器是一種數(shù)據(jù)采集設(shè)備,其基本作用就是作為數(shù)據(jù)交換的一環(huán)將前端電子標(biāo)簽所包含的信息,傳遞給后端的計(jì)算機(jī)網(wǎng)絡(luò)。
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)//驗(yàn)證卡片密碼
char PcdRead(unsigned char addr,unsigned char *pData)
//讀取M1卡一塊數(shù)據(jù)
char PcdWrite(unsigned char addr,unsigned char *pData)
//寫數(shù)據(jù)到M1卡一塊
char PcdHalt(void)//命令卡片進(jìn)入休眠狀態(tài)
char PcdReset(void)//復(fù)位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()//關(guān)閉天線
這個程序中“.h”文件的內(nèi)容是定義函數(shù)變量及所需函數(shù)原型,“.c”文件主要功能是對“.h”文件中聲明的外部函數(shù)進(jìn)行具體的實(shí)現(xiàn),對具體實(shí)現(xiàn)方式?jīng)]有特殊規(guī)定,只要實(shí)現(xiàn)其函數(shù)的功能即可。
串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時用另一根線接收數(shù)據(jù)。它很簡單并且能夠?qū)崿F(xiàn)遠(yuǎn)距離通信。由于 串口 通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時在另一根線上接收數(shù)據(jù)。其他線用于握手,但不是必須的。 串口 通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。對于兩個進(jìn)行 通信的端口,這些參數(shù)必須匹配。
STC89C52RC單片機(jī)內(nèi)部集成有一個可編程的全雙工的異步通信串行口,可以作為通用異步接收/發(fā)送器(UART),也可作為同步移位寄存器使用。
2個數(shù)據(jù)緩沖器SBUF在物理上是相互獨(dú)立的,一個用于發(fā)送數(shù)據(jù)、另一個用于接收數(shù)據(jù)。2個SBUF共用一個地址(99H),通過讀寫指令區(qū)別是對哪個SUBF的操作。
發(fā)送控制器的作用是在門電路和定時器T1的配合下,將發(fā)送緩沖器SBUF中的并行數(shù)據(jù)轉(zhuǎn)為串行數(shù)據(jù),并自動添加起始位、可編程位、停止位。這一過程結(jié)束后自動使發(fā)送中斷請求標(biāo)志位TI置1,用以通知CPU已將發(fā)送緩存器SBUF發(fā)中的數(shù)據(jù)輸出到了TXD引腳。
- void send_byte( INT8U SendData )
- {
- ES = 0;
- TI = 0;//TI:發(fā)送中斷標(biāo)志位
- SBUF = SendData;
- while( TI == 0 ); //等待發(fā)送完成
- TI = 0; //清TI標(biāo)志位
- ES = 1; //使能打開
- }
- INT8U rec_byte(void)//接收函數(shù)//當(dāng)TI=1,或RI=1,或TI、RI同時為1時,串行口向CPU提出中斷申請。
- {
- INT8U receive;
- ES = 0;
- RI = 0;//RI:接收中斷標(biāo)志位
- while( RI == 0 );//中斷請求標(biāo)志位清0 (RI=0)//當(dāng)RI=0時要等RI變?yōu)?;
- RI = 0;
- ES = 1; //使能打開
- receive=SBUF;
- return receive;
- }
- void init_uart(void)//串口初始化
- {
- SCON = 0x50;//串口工作在方式1,允許接收,清中斷標(biāo)志
- ES=1;
- }
- void init_timer(void) //20ms
- {
- TMOD = 0X21;//TMOD定時寄存器
- ET1 = 1;
- TH1 = 256 - FOSC / 12 / 32 / BAUD;//8位, 定時器
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼