接口RFID到8051。

射频识别(RFID)是一种利用电磁波传输数据以识别附在物体上的标签的方法。射频识别系统由发送器(标签)和读取器组成。标签用唯一的代码进行加密,读取器扫描该代码进行识别。标签通常有两种类型:主动和被动。主动标签上装有电池,它定期或在靠近阅读器的地方传输独特的代码。无源标签是利用阅读器传送的信号的电磁感应来供电的。RFID的典型应用包括门禁系统、身份证、人的识别、动物的识别、支付系统、给书籍贴标签、替换条形码、给商店中的商品贴标签等。RFID标签有不同的形状,但最常见的形状是卡片的形式。RFID阅读器在市场上以模块的形式提供所有支持硬件。本文是关于RFID与8051单片机接口的研究。 The images of a typical RFID card and reader are shown below.

射频识别卡

RFID卡有不同的尺寸和形状,最常用的类型如图所示。上面还显示了一个典型的RFID阅读器模块的图像。基本上它包含一个用于存储唯一ID码的半导体存储器、调制电路和一个线圈。线圈在读卡器附近以电磁感应的方式作为电源,同时也是传播ID码的天线。调制电路将唯一的编码调制成发送的波。阅读器基本上包括一个线圈和一个电子电路。线圈作为卡的励磁器,也作为天线接收卡传播的信号。电子电路解调这个信号,并把它转换成适合于下一阶段(微控制器)的形式。RFID模块与8051单片机的接口电路图如下图所示。

RFID与8051的接口电路图。

接口RFID模块到8051

RFID模块与8051接口的全电路图如图所示。射频识别卡中的唯一标识码由电路读取并显示在16×2液晶显示器上。RFID模块的Tx引脚连接单片机的3.5端口。微控制器通过这个通道从RFID模块接收数据。开关S1、电容C1、电阻R1构成复位电路。电容C2, C3和晶体X1与复位电路相关。

程序。

RS EQU P2.7 / /等同于P2.7 RS P2.6 / / RW装备相当于P2.6 P2.5 / / RW E装备相当于P2.5 E ORG 000 h / /起源MOV TMOD # 00100001 b / / Timer1 = Mode2计时器& Timer0计时器MOV TH1 =模型,# 253 d / /加载TH1 253 d(9600波特)MOV SCON, # 50 h / /串口设置为模型和接收机使SETB TR1 / /开始Timer1主要:驱使着力力/ /电话子程序ACALL LINE2 //调用TEXT1子程序ACALL LINE2 //调用LINE2子程序ACALL TEXT2 //调用TEXT2子程序ACALL READ //调用READ子程序CLR REN //禁用串行数据接收ACALL LINE2 //调用LINE2子程序ACALL WRITE //调用WRITE子程序ACALL DELAY1 //调用DELAY1子程序SETB REN //启用串行数据接收SJMP MAIN //跳回MAIN标签DELAY1:MOV R3,#46D //加载R3与46D back:MOV TH0,#00000000B //加载TH0与所有0的MOV TL0,#00000000B //加载TL0与所有0的SETB TR0 //启动定时器0 HERE1:JNB TF0, HERE1 / /循环直到TFO国旗1 CLR TR0 / /停止TR1 CLR TF0 / /清除TF0国旗DJNZ R3,返回/ /迭代循环46次3 s延迟RET / /返回的子例程:MOV R0, # 12 d / /加载R0 12 d MOV R1, # 160 d / /加载R1与160 d等:JNB RI, / /循环在这里等到国际扶轮标志设置MOV, SBUF / /移动SBUF MOV @R1, / /移动位置指出,R1 CLR RI / /清除国际扶轮标志DJNZ R0,等待/ /迭代循环12次RET / /从子例程返回写:MOV R2, # 12 d / /加载与12 d MOV R1, R2 # 160与160 d d / /加载R1 BACK1: MOV, @R1 / /加载数据指出由R1驱使着显示/ /调用显示子程序公司R1 / / incremets R1 DJNZ R2, BACK1 / /迭代循环160次RET //从子程序TEXT1返回:MOV, # 52 h / /加载一个ascii的“R”驱使着显示/ /调用显示子程序MOV, # 46 h / /加载一个ascii的“F”驱使着显示/ /调用显示子程序MOV, # 49 h / /加载一个ascii的“我”驱使着显示/ /调用显示子程序MOV, # 44 h / /加载一个ascii的“D”驱使着显示/ /调用显示子程序MOV, # 20 h / /加载ascii的“空间”驱使着显示/ /调用显示子程序MOV, # 52 h / /加载一个ascii的“R”驱使着显示/ /调用显示子程序MOV, # 45 h / /加载一个ascii的“E”驱使着显示/ /调用显示子程序MOV, # 41 h / /加载一个ascii的“A”驱使着显示/ /调用显示子程序MOV, # 44 h / /加载一个ascii的“D”驱使着//calls DISPLAY subroutine MOV A,#45H //loads A with ascii of "E" ACALL DISPLAY //calls DISPLAY subroutine MOV A,#52H //loads A with ascii of "R" ACALL DISPLAY //calls DISPLAY subroutine RET //returns from subroutine TEXT2: MOV A,#53H //loads A with ascii of "S" ACALL DISPLAY //calls DISPLAY subroutine MOV A,#77H //loads A with ascii of "w" ACALL DISPLAY //calls DISPLAY subroutine MOV A,#69H //loads A with ascii of "i" ACALL DISPLAY //calls DISPLAY subroutine MOV A,#70H //loads A with ascii of "p" ACALL DISPLAY //calls DISPLAY subroutine MOV A,#65H //loads A with ascii of "e" ACALL DISPLAY //calls DISPLAY subroutine MOV A,#20H //loads A with ascii of "space" ACALL DISPLAY //calls DISPLAY subroutine MOV A,#63H //loads A with ascii of "c" ACALL DISPLAY //calls DISPLAY subroutine MOV A,#61H //loads A with ascii of "a" ACALL DISPLAY //calls DISPLAY subroutine MOV A,#72H //loads A with ascii of "r" ACALL DISPLAY //calls DISPLAY subroutine MOV A,#64H //loads A with ascii of "d" ACALL DISPLAY //calls DISPLAY subroutine MOV A,#2EH //loads A with ascii of "." ACALL DISPLAY //calls DISPLAY subroutine MOV A,#2EH //loads A with ascii of "." ACALL DISPLAY //calls DISPLAY subroutine RET //return from subroutine DINT:MOV A,#0FH //display ON cursor blinking ON ACALL CMD //calls CMD subroutine MOV A,#01H //clear display screen ACALL CMD //calls CMD subroutine MOV A,#06H //increment cursor ACALL CMD //calls CMD subroutine MOV A,#83H //cursor line 1 position 3 ACALL CMD //calls CMD subroutine MOV A,#3CH //activate 2nd line ACALL CMD //calls CMD subroutine RET //return from subroutine LINE2:MOV A,#0C0H //force cursor to line 2 position 1 ACALL CMD //calls CMD subroutine RET //return from subroutine CMD: MOV P0,A //moves content of A to Port 0 CLR RS //clears register select pin CLR RW //clears read/write pin SETB E //sets enable pin CLR E //clears enable pin ACALL DELAY //calls DELAY subroutine RET //return from subroutine DISPLAY:MOV P0,A //moves content of A to Port 0 SETB RS //sets register select pin CLR RW //clears read/write pin SETB E //sets enable pin CLR E //clears enable pin ACALL DELAY //calls DELAY subroutine RET //return from subroutine DELAY: CLR E //clears enable pin CLR RS //clears register select pin SETB RW //clears read/write pin MOV P0,#0FFh //moves all 0's to Port 0 SETB E //sets enable pin MOV A,P0 //moves Port 0 to A JB ACC.7,DELAY //jumps back to label DELAY if ACC.7 is set CLR E //clears enable pin CLR RW //clears read/write pin RET //return from subroutine END //end statement

关于这个项目。

上面是RFID与8051接口的程序,它可以简单地分为四个部分。配置串口通信,读取RFID卡,从内存位置取出并显示在LCD上。

配置串口通信。

第一部分设置波特率和串口通信方式。波特率是指在传输线上每秒产生的脉冲数,或者简单地说,它是指两个系统之间数据交换的速度。这里需要的波特率是9600,它是使用Timer1设置的。为此Timer1在Mode2中配置,TH1 (Timer1高寄存器)加载253D。对于特定波特率,必须加载到TH1中的值可以使用以下公式确定;

TH1 = 256 -((晶体/ 384)/波特)。

这里使用的晶体是11.052 MHz,所需波特率是9600。把这些值代入上述方程,我们得到TH1=256 - ((11.0592MHz / 384) /Baud)= 253。在SCON寄存器上加载50H,用于设置串口模式为Mode1,并使能串口接收器。所有上述程序都是在8051单片机中实现串行通信的最低要求。

读取RFID卡。

下一步是读取RFID卡。RFID阅读器周期性地发射电磁信号。当RFID卡在读卡器附近时,RFID卡会接收读卡器发出的信号,并以调制的无线电信号的形式传输唯一的标识码。阅读器拍摄无线电波,解调它,将它转换成可识别的形式,并在其Tx引脚上串行输出。简单地说,当RFID卡靠近时,阅读器就会连续地发出唯一的ID码。

通常RFID代码由12个字符组成,当阅读器传输它时,微控制器必须选取它。这是通过检查SCON寄存器中的RI标志的状态来完成的。发送到单片机的数据由SBUF寄存器接收,这个过程是自动进行的。每当SBUF接收到一个完整的数据块时,RI值就会被调高。因此,当RI变高时,SBUF中的字节被移动到一个寄存器,然后它被移动到寄存器R1所指向的内存位置。初始内存位置(160D)预加载到R1中。然后增加R1,清除RI标志,整个步骤重复12次,以接收全部12个字符。

获取并显示唯一的ID代码。

接下来的部分是从存储器中获取单个字符并将其显示在LCD上。对于这个地址的内存位置的第一个字符被加载到寄存器R1,然后它被移动到累积器(A)使用代码MOV A,@R1。然后调用DISPLAY子程序将当前字符在A上显示到LCD显示屏上。整个步骤重复12次,以获取和显示唯一RFID代码的所有12个字符。

电源。

下面显示了一个简单的5V/1A稳压器电源,可用于为该电路供电。该电源是基于6V变压器,全波桥式整流器和7805稳压器。

Rfid阅读器电源笔记。

在这个电路中,晶体X1的值是非常关键的。它的值必须精确为11.0952或其整数倍数。除此之外的任何值都会给出错误的结果。

作者

1评论

  1. jaya

    长官,我们需要气候学着陆电路…

Baidu