通過串口通信實現對電子標簽的讀寫,實現對讀寫卡編號的充值。
電子標簽又稱射頻視頻、應答器或射頻卡。電子標簽是射頻識別真正的數據載體,從技術角度來說,射頻識別的核心是電子標簽,讀寫器是根據電子標簽的性能而設計的。
電子標簽由標簽專用芯片和標簽天線組成,而芯片用于存儲物品的數據,電子標簽的芯片很小,厚度一般不超過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黑下載附件…………
復制代碼