设计一个高效的算法,从子线的长度20怎么算法为500个中文字符(UTF-8编码)的内容中分析出keywords.txt中包含的关键字。

射频识别(RFID)节点技术设计及应用开发摘要:本文以 STC11F32XE 单片机为核心,设计了一个无线射频识别的读卡器。本设计中,印制在 PCB 板上的磁场耦合天线通过磁场感应收集到 IC 卡上的数据信号(这里是模拟信号) ,然后天线将 收集到的数据信号传回给 TRF7960 无线射频识别芯片,TRF7960 再将此信号进行数据预处理,即模 拟信号的数字化,然后将此数字化后的信号通过串口通信的方式传送给 STC11F32XE 单片机, STC11F32XE 单片机会驱动 12864 液晶,最终将 IC 卡上的数据信息显示在 12864 液晶屏上。 文章详细介绍了 TRF7960 芯片的工作原理和读卡器具体的硬件与软件设计方案、思路及实现方 法。设计中,功能实现的步骤包括寻卡、读卡和中断等,该读卡器可实现对 ISO14443A 类型卡的识 别功能。 关键词:射频识别;非触碰式 IC 卡;读卡器;TRF7960;ISO14443ARadio Frequency Identification (RFID) Technology Node Design and Application DevelopmentAbstract: This paper STC11F32XE microcontroller as the core, a radio frequency identification of the card reader is designed. The design, magnetic field coupling antenna is printed on PCB through the magnetic field induction to collect data on the IC card signal (analog signal here), then the data signal will be collected by the antenna back to the radio frequency identification chip TRF7960, this data signal again be pretreatmented by TRF7960, namely of the analog signal digital, then will the digital signal through serial communication transmitted to the way STC11F32XE microcontroller,12864 LCD Wwill be drived by STC11F32XE microcontroller, will eventually IC card of data on information displayed in 12864 on the LCD panel. The TRF7960 chip works, reader specific hardware and software design solutions, ideas and implementation are detailed in this article. Design features to achieve the steps include seeking cards, readers and interruption, the reader can achieve the type of card ISO14443A recognition. Keywords: Radio freq Non-touch-type IC R TRF7960; ISO14443A1 目 录第 1 章 绪论 ................................................................................................................................................... 4 1.1 射频识别技术的研究和意义 ..................................................................................................... 4 1.2 国内外研究现状和发展 ............................................................................................................. 4 1.3 本论文研究内容......................................................................................................................... 5 第 2 章 无线射频识别系统的基本组成及工作原理 ................................................................................... 6 2.1 RFID 系统基本组成 .................................................................................................................... 6 2.2 无源射频识别技术的基本工作原理 ......................................................................................... 6 2.3 无线射频识别工作的物理学原理 ............................................................................................. 7 2.4 读写器......................................................................................................................................... 8 2.4.1 读写器的作用及分类 ...................................................................................................... 8 2.4.2 读写器的基本构成 .......................................................................................................... 8 2.5 读写器天线................................................................................................................................. 8 2.5.1 读写器天线简介 .............................................................................................................. 8 2.5.2 读写器天线设计技术 ...................................................................................................... 9 2.5.3 读写器天线制造技术 ...................................................................................................... 9 2.6 射频电子标签........................................................................................................................... 10 2.6.1 射频电子标签概述 ......................................................................................................... 10 2.6.2 无源电子标签的构成和工作原理 ................................................................................ 11 2.6.3 RFID 标签天线设计 ....................................................................................................... 12 2.7 客户机、服务器和通信网络 ................................................................................................... 13 第 3 章 系统方案及其基本架构 ................................................................................................................. 14 3.1 方案选择................................................................................................................................... 14 3.2 元器件选择及简要介绍 ........................................................................................................... 14 3.2.1 TRF7960 芯片 ................................................................................................................. 14 3.2.2 STC11F32XE 芯片 ........................................................................................................... 16 3.2.3 PL2303 芯片介绍 ........................................................................................................... 17 3.2.4 128X64LCD 液晶显示器 ................................................................................................. 20 3.2.5 无源射频卡 .................................................................................................................... 212 第 4 章 系统硬件设计 ................................................................................................................................. 23 4.1 设计思路................................................................................................................................... 23 4.2 本设计工作原理....................................................................................................................... 23 4.3 各模块设计原理图 ................................................................................................................... 23 4.3.1 TRF7960 设计原理图及 PCB 图 ..................................................................................... 23 4.3.2 STC11F32XE 单片机设计原理图 .................................................................................. 24 4.3.3 PL2303 设计原理图 ....................................................................................................... 25 4.3.4 LCD 液晶设计原理图 ..................................................................................................... 26 4.3.5 天线网络设计 ................................................................................................................ 27 4.4 硬件 PCB 设计及注意事项 ....................................................................................................... 28 第 5 章 系统软件设计 ................................................................................................................................. 29 5.1 各应用子程序介绍 ................................................................................................................... 29 5.1.1 读写子程序 .................................................................................................................... 29 5.1.2 初始化 TRF7960 子程序 ................................................................................................ 29 5.1.3 获取 ID 号子程序 .......................................................................................................... 29 5.1.4 中断处理子程序 ............................................................................................................ 31 5.1.5 LCD 液晶显示子程序 ................................................................................................... 33 5.2 软件设计总体介绍 ................................................................................................................... 35 第 6 章 系统硬件与软件的调试 ................................................................................................................. 36 6.1 系统硬件的调试....................................................................................................................... 36 6.1.1 调试思路及用到的工具 ................................................................................................ 36 6.1.2 调试过程中遇到的问题及解决方法 ............................................................................ 36 6.2 系统软件的调试....................................................................................................................... 37 6.2.1 子程序编译 .................................................................................................................... 37 6.2.2 下载调试 ........................................................................................................................ 39 6.3 软件编写和调试经验总结 ....................................................................................................... 42 第 7 章 结 论 ............................................................................................................................................... 44 致 谢 ............................................................................................................................................................. 45 参考文献 ....................................................................................................................................................... 46 附录 各硬件效果图 ..................................................................................................................................... 473 第1章 绪论1.1 射频识别技术的研究和意义RFID(Radio Frequency Identification)无线射频识别技术是 20 世纪 90 年代开始兴起的一 种自动识别技术 。射频识别技术是一项利用射频信号通过空间耦合(交变磁场或电磁场)实现无 接触信息传递并通过所传递的信息达到识别目的的技术。射频识别系统通常由电子标签(射频标签) 和阅读器组成。电子标签内存有一定格式的电子数据,常以此作为待识别物品的标识性信息。阅读 器与电子标签可按约定的通信协议互传信息,通常的情况是由阅读器向电子标签发送命令,电子标 签根据收到的阅读器的命令,将内存的标识性数据回传给阅读器。射频识别系统的另一主要性能指 标是阅读距离,也称为作用距离。在低频 125kHz、高频 13.56MHz 频点上一般均采用无源标签,作 用距离在 10~30 厘米左右[2.3] [1]。在超高频 UHF 频段,无源标签的作用距离可达到 3~10 米。RFID 典型应用包括:在物流领域用于仓库管理、生产线自动化、日用品销售;在交通运输领域 用于集装箱与包裹管理、高速公路收费与不停车收费;在农牧渔业用于羊群、鱼类、水果等的管理 以及宠物、野生动物跟踪;在医疗行业用于药品生产、病人看护、医疗垃圾跟踪;在制造业用于零 部件与库存的可视化管理。超高频和微波 RFID 射频识别作用距离远,无源标签便宜而被备受瞩目 市场研究公司 IDC 指出:2005 年整个 RFID 在中国的市场容量是 4.7 亿人民币,到 2009 年这个 市场会膨胀到 58.7 亿,其年复合增长率大约是 65.6%。1.2 国内外研究现状和发展各国及相关国际组织都在积极推进 RFID 技术标准的制定。目前,还未形成完善的关于 RFID 的 国际和国内标准。当前主要的 RFID 相关规范有欧美的 EPC 规范、日本的 UID(Ubiquitous ID)规 范和 ISO 18000 系列标准[4.5]。EPC 规范由 Auto-ID 中心及后来成立的 EPCglobal 负责制定。Auto-ID 中心于 1999 年由美国 麻省理工大学(MIT)发起成立,其目标是创建全球“实物互联”网(internet of things) ,该中 心得到了美国政府和企业界的广泛支持。2003 年 10 月 26 日,成立了新的 EPCglobal 组织接替以前 Auto-ID 中心的工作,管理和发展 EPC 规范[6.7]。UID(Ubiquitous ID)规范由日本泛在 ID 中心负责制定。日本泛在 ID 中心由 T-Engine 论坛 发起成立,其目标是建立和推广物品自动识别技术并最终构建一个无处不在的计算环境。该规范对 频段没有强制要求,标签和读写器都是多频段设备,能同时支持 13.56MHz 或 2.45GHz 频段。 中国在 LF(低频)和 HF(高频)频段 RFID 标签芯片和读写器设计方面的技术比较成熟,HF 频4 段方面的芯片设计技术接近国际先进水平, 已经自主开发出符合 ISO14443 Type A、 Type B 和 ISO15693 标准的 RFID 芯片,并成功地应用于交通一卡通和中国二代身份证等项目。国内在 UHF 和微波频段的 标签芯片设计和阅读器设计方面起步较晚。 国内日益重视发展 RFID 技术,2005 年 863 计划第三批立项课题中信息技术领域立项 3 项 RFID 相关研究。国家科技部正在建立 RFID 与条码应用于物流的综合示范项目。湖南省科技厅将“射频标 识和基于 IPv6 的实物互联网应用技术”列为 2006 年度科技计划项目[8-11]。1.3 本论文研究内容本设计以 51 单片机为设计平台,主要由 STC11F32XE 单片机、液晶显示、电源、键盘和 USB 串 口转换、TRF7960 无线射频识别芯片及外围电路等模块组成,实现对 IC 卡卡号数据的读取。设计通 过印制在 PCB 板上的磁场耦合天线将磁场感应收集到 IC 卡上的数据信号(这里是模拟信号)传送给 TRF7960 无线射频识别芯片,TRF7960 将此信号进行数据预处理即模拟信号的数字化,然后将此数字 化后的信号通过串口通信的方式送入给 STC11F32XE 单片机,STC11F32XE 单片机会驱动 12864 液晶, 最终把 IC 卡上的数据信息显示在 12864 液晶屏上。设计的 ISO14443A 型卡的识别系统充分发挥了 STC11F32XE 单片机具有高速数据处理的特点,结合现有技术,大大降低了电路的设计复杂度,该系 统具有读卡准确,人机界面友好,稳定性高、抗干扰能力强等特点,具有良好的现实应用价值。 本设计的主要目标: 系统能将 ISO14443A 型卡的卡号通过磁场耦合天线读取到 TRF7960 芯片中, 并通过 STC11F32XE 使 LCD 液晶显示此卡号。 设计中采用 PL2303 芯片实现 USB 转串口的程序烧写,硬件电路图和 PCB 图均使用 Altium Designer 软件制作,软件程序使用 Keil 51 软件编写和调试。5 第2章 无线射频识别系统的基本组成及工作原理 2.1 RFID 系统基本组成RFID 系统组成包括电子标签(Transponder)、 读写器(Reader )、 客户机(Client),服务器(Server) 等四个部分, 如图 2-1 所示[6.7]。 RFID 整个系统而言, 对 读写器与标签通过 RF 电磁场进行数据交换,其数据链路包含了数据的调制/解调制、编码/解码、防冲突算法以及相关的协议标准等。RF 电磁场、防冲突算法 网络 服务器 客户机 串口 标签 读写器 标签 标签 标签 图 2-1 RFID 系统基本组成RFID 系统由软件和硬件两部分组成:软件部分一般包括应用软件和嵌入式软件,它们共同支撑 着整个系统的运行,完成信息的处理,对系统采集的数据进行信息化管理;硬件部分主要实现信息的 识别和采集,由读写器与电子标签组成。2.2 无源射频识别技术的基本工作原理RFID 的基本原理就是将 RFID 电子标签安装在被识别的物体上,读写器通过发射天线发射一定 频率的射频信号,当被标识的物体进入读写器的阅读范围时,利用空间电感耦合或者电磁耦合进行 通讯[15.16]。标签获得能量被激活,产生感应电流,将自身编码和携带的信息通过天线发送出去,读写器接收天线接收从标签发送过来的载波信号并通过读写器的射频芯片进行解码,实现标签和读写 器之间的非接触式信息通讯。读写器接收到信息通过串口 RS232、RS485 或者 USB 接口,将采集到的 数据实时送入客户机的终端处理系统,主系统根据逻辑运算判断该卡的合法性,根据不同的设定进 行相关的处理,并通过网络传输给服务器,从而完成信息的采集过程,以达到自动识别被标识物体 的目的。如果需要对标签写入或者修改信息,通过与以上读取信息相反的顺序将信息写入标签(可 读写标签) 。6 信息处理系统 查询 响应单元 中 间 件 及 应 用 软 件命令 物 理 接 口 调 试 解 调数据写数据 写入 读取 解码 编码 存 储 器 读数据能量电 子 标签数 据 协 议 处理器标签驱动射 频单元 空中接口应用程序接口(API)图 2-2 RFID 工作原理2.3 无线射频识别工作的物理学原理? 电感耦合 电感耦合一种变压器模型,通过空间高频交变磁场实现耦合,依据的是电磁感应原理。适用于 低频和中频。例如:125KHZ,13.56MHZ 等,作用距离有限。图 2-3 电感耦合? 电磁反向散射耦合 雷达原理模型,碰到目标后反射同时携带回目标信息,依据的是电磁波的空间传播规律。适用 于高频、微波工作的远距离射频识别系统。常用的频率有 433MHZ,915MHZ,2.45GHZ,5.8GHZ 等。 作用距离可达 3-10m[12]。图 2-4 电磁反向散射耦合利用电磁反向散射耦合的反向散射调制技术是指无源 RFID 将数据发送给阅读器所采用的方式。 标签返回数据的方式是控制天线的阻抗,方法有多种,都是基于一种阻抗开关的方法。实际采用的 阻抗开关有变容二极管、逻辑门与高速开关等。7 2.4 读写器2.4.1 读写器的作用及分类读写器是读取或擦写标签数据和信息的设备,也可称为阅读器,可外接天线,用于发送和接收 射频信号,分为手持式(便携式)或固定式两种。读写器是负责读取或写入标签信息的设备,读写器 可以是单独的整体,也可以作为部件的形式嵌入到其他系统中。读写器可以单独具有读写、显示和 数据处理等功能,也可与计算机或其它系统进行互联,完成对射频标签的相关操作。 由于 RFID 系统大多采用“读写器优先”的工作方式,因此成为整个 RFID 系统的通信中心,主 要具有以下功能: (1)通过高频载波为标签提供工作所需的能量; (2)通过发射/接收射频信号,实现与标签之间的通信功能; (3)与客户机之间通过标准接口如 RS232/485、USB 等,实现与应用系统软件通信; (4)通过基带部分实现相关协议标准; (5)对标签中所存储的信息实现阅读、写入以及修改等功能; (6)具有防冲突功能,在读写范围内实现多标签的同时识别; (7)对读写器与标签之间的数据进行加密解密等安全设置和身份验证。 通常,读写器可以按照体积和用途分为小型、手持型、面板型、隧道型以及出入通道型和大型 通道型等几类[13]。2.4.2 读写器的基本构成读写器(即读写器)是整个 RFID 系统中重要的组成部分之一,由收发射频模块、控制模块、天线 和接口电路组成,如图 2-5 所示。 接收数据标 应用软件 接口电路 发送数据 射频模块 天线 控制信号编码协议 签图 2-5 读写器的简单结构图2.5 读写器天线2.5.1 读写器天线简介天线是一种以电磁波形式把无线电收发机的射频信号功率接收或辐射出去的装置。天线按工作8 频段可分为长波、短波、超短波以及微波天线等;按方向性可分为全向天线、定向天线等;按外形 可分为线状天线、面状天线等。在 RFID 系统中,天线分为标签天线和读写器天线两种情况,当前的 RFID 系统主要集中在 LF、HF(13.56MHz)、UHF 和微波频段。天线的原理和设计在 LF、HF 和 UHF 频 段有根本上的不同。实质上,由于在 LF 和 HF 频段系统近场区并没有电磁波的传播,因此天线的问 题主要集中在 UHF 和微波频段。2.5.2 读写器天线设计技术对于近距离 13.56MHzRFID 应用(&10cm),比如门禁系统,天线一般和读写器集成在一起,对于 远距离 13.56MHz( 10cm~1m)或者 UHF 频段(&3m) 的 RFID 系统,天线和读写器采取分离式结构,并 通过阻抗匹配的同轴电缆连接到一起。由于读写器结构、安装和使用环境等变化多样,并且读写器 产品朝着小型化甚至超小型化发展,天线设计面临新的挑战[14]。读写器天线设计要求低剖面、小型化以及多频段覆盖。对于分离式读写器,还将涉及到天线阵 的设计问题。国外已经开始研究读写器应用的智能波束扫描天线阵,读写器可以按照一定的处理顺 序,“智能”的打开和关闭不同的天线,使系统能够感知不同天线覆盖区域的标签,增大系统覆盖范 围。它还涉及到小型化的问题带来的低效率、低增益问题,这同样是国内国外共同关注的研究课题。2.5.3 读写器天线制造技术目前,有三种天线制造技术:蚀刻/冲压天线(etched/punched antenna)、印刷天线(printed antenna)和绕线式天线[8-11]。在国际上,目前一般都采用蚀刻/冲压天线为主,其材料一般为铝或者铜,因为其能提供最大可 能的信号给标签上的芯片,并且在标签的方向性和天线的极化等特性上都能与读卡机的询问信号相 匹配,同时在天线的阻抗,应用到物品上的射频的性能,以及在有其他的物品围绕贴标签物品时的 射频性能等方面都有很好的表现,但是它唯一的缺点就是成本太高。 导电油墨从只用丝网印刷扩展到胶印、柔性版印刷、凹印,其技术的进步,促进了 RFID 标签的 生产和使用。现在随着新型导电油墨的不断开发,印刷天线的优势越来越突出。导电油墨是由细微 导电粒子或其他特殊材料(如导电的聚合物等)组成,印刷到承印物上后,起到导线、天线和电阻的 作用。这种油墨印刷在柔性或硬质承印物上可制成印刷电路,用导电油墨印制的天线可接收 RFID 专 用的无线电信号。其优势表现在导电效果出色和成本降低。 在频率较低的标签中,通常采用线圈天线形式;频率较高的标签通常为印刷贴片天线形式。其 印刷工艺是在纸板、聚脂、聚苯乙烯等材料上用金属、聚合物等导电墨水(主要成分为银和铝等金 属)印刷出天线图形,印刷贴片天线技术在国外已经成功应用,但是国内由于设备价格昂贵很少引9 进。即便在国外,印刷技术的印刷分辨率、套准精度、必要的隔离层和干净的印刷环境上还有待实 质性的改善和提高。 我国具备一定的利用导电油墨(如导电银浆)进行天线的加工的能力,但是印刷分辨率、套准精 度、必要的隔离层和干净的印刷环境上还有待实质性的改善和提高。2.6 射频电子标签2.6.1 射频电子标签概述电子标签也称为射频标签、射频卡或应答器,是射频识别系统中存储数据和信息的电子装置, 由耦合元件(天线)及芯片(包括控制模块和存储单元)组成,每个标签由唯一的电子标示码确定,附 着在被标识的对象上,存储被识别对象的相关信息,其外形多种多样,有卡、钮扣、标签等多种样 式。实际应用中,电子标签附着在被识别物体的表面,读写器非接触式的读取存储在标签中的数据, 处理以后送给中央信息系统进行管理。其主要作用是存储相关的识别信息,并与读写器之间实现通 信,在特定条件下还可以具备自毁(Kill)功能,从而保证标签内的信息不会外泄,具有一定的保密 能力。一般按供电方可以分为有源、无源、半有源等三类[8-11]。?有源标签:内部装有电池,一般具有较远的阅读距离,其阅读距离最远甚至可以达到 24m,不 足之处是电池的寿命有限, 大多为 3 到 10 年, 在实际应用中需要不断进行维护并且有一定的失效率, 其成本也就相对较高,一旦电池失效标签即丧失功能,一般应用在对性能要求较高、读写距离要求 较远的场合。 ?无源标签:内部没有电池,主要通过接收读写器发出的射频信号,将射频电磁波能量转化为 直流电源提供给芯片工作,而标签通过负载切换或反向散射的方式与读写器实现通信。尽管在阅读 距离等方面会受到一定的限制,但与有源标签相比,无源标签具有较为低廉的成本以及广泛的适应 性,使其在物流、车辆管理、仓储管理、零售业等领域有着广泛的应用,其工作距离一般不会超过 l0m. ?半有源标签:与有源标签类似,内部设有电池,通常情况下可以作为有源标签使用 10 年以上, 在电池耗尽后可以继续作为无源电子标签使用,从而进一步降低成本,延长了标签的使用寿命,并 节省了资源。有源工作条件下,其工作距离大于 l0m,在无源条件下,其距离为 3m 到 5m,其可以有 效替代有源标签,成为 RFID 电子标签的一个新研究领域。 此外,标签还可以有很多其他不同的分类方法,如按工作频率分为低频(LF),高频(HF)和超高频 (UHF):按照作用距离分为近耦合、疏耦合和遥耦合;按照信息存储方式分为只读型和可读写型;按 照通信方式分为全双工、半双工和时序系统;按调制方式可分为负载调制、次载波调制、ASK 和数 字调制等。10 2.6.2 无源电子标签的构成和工作原理绝大多数射频识别系统是根据电感藕合的原理进行工作的,读写器在数据管理系统的控制下发 送出一定频率的射频信号,当标签进入磁场时产生感应电流从而获得能量,并使用这些能量向读写 器发送出自身的数据和信息,该信息被读写器接收并解码后送至中央信息管理系统行相关的处理, 这一信息的收集和处理过程都是以无线射频通信方式进行的。 低频和中频主要适用于距离短、成本低的应用中,而高频系统则适用于识别距离长、读写数据 速率快的场合。正常情况下,频率越高,读写的速度就越快,数据的传输效率就越高。根据射频识 别系统的基本工作方式来划分,可分为全双工和半双工系统以及时序系统。在全双工和半双工系统 中,由于与读写器发送的信号相比,标签的应答信号很微弱,所以必须使用合适的传输方法,将标 签的应答信号和读写器的查询信号相区别。另外,在这两种系统中,从读写器到应答器的能量传输 是连续的,与数据传输的方向无关。采用无源电子标签的 RFID 系统,每个被标记的物品都贴有一个 无源标签。电子标签由射频和模拟部分、数字基带处理部分和存储器构成。 存储器存储着物品对应的唯一识别代码, 其工作所需的能量及系统时钟均从读写器电磁场获取, 标签本身不含有电源,其能量的获取和利用效率决定其识别、读写距离,故低功耗设计十分必要。 读写器到标签的数据传递方式一般为调幅键控(ASK),调频键控(FSK)和调相键控(PSK);标签到 读写器的数据传递方式一般分为负载调制和反向散射调制两种。 负载调制:其电感耦合属于一种变压器耦合, 即作为初级线圈的读写器和作为次级线圈的标签之 间的耦合。只要两者线圈之间的距离不大于 0.16 (波长),并且标签处于发送天线的近场内,变压 器耦合就是有效的。如果把谐振的标签(标签的固有谐振频率与读写器的发送频率相符合)放入读写 器天线的交变磁场中,那么该标签就从磁场中获得能量。标签天线上负载电阻的接通和断开促使读 写器天线上的电压发生变化,实现远距离标签对天线电压的振幅调制。如果人们通过数据控制负载 电压的接通和断开,那么这些数据就能从标签传输到读写器,这种数据传输方式称为负载调制。但 是读写器天线与标签天线之间的耦合很弱,读写器天线输入有用信号的电压波动在数量级上比读写 器的输出电压小,因此很难检测出来。此时如果标签的附加电阻以很高的频率接通或者断开,那么 在读写器的发送频率上会产生两条谱线,很容易检测到,这种新的基本频率称为副载波,这种调制 称为负载波调制[2.3]。反向散射调制:电磁反向散射耦合方式一般应用于高频系统, 对高频系统来说, 随着频率的上升, 信号的穿透性越来越差,而反射性却越来越明显。在高频电磁耦合的 RFID 系统中,当读写器发射的 载频信号辐射到标签时,标签中的调制电路通过待传输的信号来控制电路是否与天线相匹配,以实 现信号的幅度调制。当匹配时,读写器发射的信号被吸收。反之,信号被反射。11 在时序法中读写器到标签的数据和能量传输与标签到读写器的数据传输在时间上是交错进行 的。读写器的发送器交替工作,其电磁场周期性地断开或连通,这些间隔被标签识别出来,并被应 用于标签到读写器的数据传输。在读写器发送数据的间歇时刻,标签的能量供应中断,必须通过足 够大的辅助电容进行能量的补偿。在充电过程中,标签的芯片切换到省电或备用模式,从而使接收 到的能量几乎完全用于充电电容的充电。充电结束后,标签芯片上的振荡器被激活,其产生的弱交 变磁场能被读写器所接收,当所有的数据发送完后,激活放电模式以使充电电容放电。 由于标签和读写器之间的数据传输经过无线空间传输信道,因此在射频技术的使用中,容易遇 上干扰,干扰带来的直接影响是通信过程的数据传输错误。当标签接收到的数据发生改变时可能导 致下面的结果:标签错误地响应读写器的命令,造成工作状态混乱或错误地进入休眠状态。而当读写 器接收到标签数据出错时,可能导致读写器不能正常识别标签或将一个标签判断为另一个标签。在 RFID 系统中,可以采用的抗干扰方法有:数据校验和信道编码。 通过数据完整性校验方法,系统可以检验出受到干扰出错的数据,最常使用的校验方法是奇偶 校验法、纵向冗余校验法和循环冗余码校验法等。奇偶校验法在数据传输前必须确定是采用偶数校 验还是奇数校验,以保证发送器和接收器都采用同样的方法进行校验,其算法简单且被广泛使用。 纵向冗余校验算法则主要用于快速校验很小的数据块。循环冗余码校验法虽然不能校正错误,但是 它能够以很高的可靠性识别传输错误。另外可通过对数据的信道编码来提高数据传输过程中的抗干 扰能力和对数据的纠错和检错能力。 在很多场合下,在读写器范围内存在多个待识别的标签,射频识别系统的一个优点就是读写器 在很短时间内对多个标签进行识别。从读写器到标签的通信,类似于无线电广播方式,多个标签同 时接收到同一个读写器发送的数据流, 这种通信形式也被称为无线电广播;在读写器的作用范围内有 多个标签同时向它发送数据,这种形式被称为多路存取。在后一种通信方式中,为了防止由于多个 标签数据在读写器的接收机中相互干扰而不能准确读出,必须采用防碰撞方法来加以解决 2.6.3 RFID 标签天线设计 天线的目标是传输最大的能量进出标签芯片,这需要仔细的设计天线和自由空间以及其相连的 标签芯片的匹配,当工作频率增加到微波区域的时候,天线与标签芯片之间的匹配问题变得更加严 峻[18] [17]。。一直以来,标签天线的开发基于的是 50 或者 75 欧姆输入阻抗,而在 RFID 应用中,芯片的输入阻抗可能是任意值,并且很难在工作状态下准确测试,缺少准确的参数,天线的设计难以达到最 佳。相应的小尺寸以及低成本等要求也对天线的设计带来挑战,天线的设计面临许多难题。 标签天线特性受所标识物体的形状及物理特性影响,标签到贴标签物体的距离,贴标签物体的 介电常数,金属表面的反射,局部结构对辐射模式的影响等都将影响天线的性能。12 2.7 客户机、服务器和通信网络在 RFID 系统中,客户机主要用于实现与读写器之间的通信功能,读写器可以通过 RS232/485、 USB 等标准接口与客户机进行通信,进而通过通信网络与服务器进行连接,通过服务器对数据进行 记录并实现对数据库的管理,从而构成一个完整的信息管理平台。13 第3章 系统方案及其基本架构3.1 方案选择无线射频识别技术(RFID) 作为一项先进的自动识别和数据采集技术,已经广泛应用到生产制 造、物流管理、公共安全等各个领域,并带动了读写机具和各类应用产品及系统的开发、生产和推广 应用。目前,在我国应用于 13.56MHz 的无线射频识别技术领域主要有 2 个 ISO 标准,一个是 ISO 14443 ,另一个是 ISO 15693。 14443 定义了 TYPE A、 ISO TYPE B 两种类型协议,通信速率为 106 kb/s , 它们的区别主要在于载波的调制深度及位的编码方式。ISO 15693 读写距离较远,而 ISO 14443 读 写距离稍近,但后者应用较广泛。这三种协议的卡在各个领域都有着比较广泛的应用,而国内现有的 13. 56 MHz 的射频读卡器,一般仅支持一种协议,且功能较为单一。基于这种现状,本文提出了基于 TI 公司的 TRF7960 射频芯片和宏晶公司的 STC11F32XE 高速单片机来设计多协议射频读卡器的设 计方案。在该读卡器上扩展了液晶 LCD 以及 USB 芯片 PL2303 等外围设备。LCD 可以显示各种图形 和汉字,USB 芯片使得该读卡器省去了串口和电源供电端口,可以通过该 USB 接口和 PC 管理软件通 信。该读卡器使用方便、简单、成本低、电路运行稳定,可以应用到各种场合。3.2 元器件选择及简要介绍3.2.1 TRF7960 芯片? 选择理由:TRF7960 是 TI (德州仪器) 公司推出的高频(13.56MHz) 多标准射频识别(RFID) 阅读器 IC 产品系列之一[2.3]。TRF7960 采用超小 32pin QFN 的高级封装设计,支持 ISO/IEC 14443A/B、ISO/IEC 15693 、ISO/IEC 1800023。采用 TRF7960 的读卡器为微控制器提供了内部时钟,只需 1 个 13.56 MHz 的晶振就能工作,而不需要 2 个标准晶体,从而有助于降低终端读卡器产品的总物料单成 本。由于组件很少,读卡器 IC 耗电、占用的空间也很少,因此可以解决敏感度和噪声衰减问题。其他 集成功能还包括故障检查、数据格式化、成帧以及适合多读卡器环境的防碰撞支持等。TRF7960 与 微控制器之间通信可以使用 8 位并行或者串行(SPI) 的灵活的通信方式。该芯片还具有宽泛的操作 电压(2.7~5.5V)。TRF7960 非常适用于安全访问控制、产品认证以及非接触支付系统等应用。 ? TRF7960 引脚图。14 3231302928272625VDD_XOSC_INOSC_OUTVSS_DENSYS_CLKDATA_CLKEN2I/O_7 I/O_6 I/O_5 I/O_41 2 3 4 5VDD_A VIN VDD_RF VDD_PA24 23 2221TX_OUTTRF796x RHB-32I/O_3206VSS_PAI/O_2197 8VSS_RX RX_IN1I/O_118 17Thermal PadI/O_0BAND_GAPASK/OOK910111213141516图 3-1 TRF7960 引脚图? 引脚功能表 3-1 TRF7960 引脚功能 引脚名 VDD_A VIN VDD_RF VDD_PA TX_OUT VSS_RF VSS_RX RX_IN1 RX_IN2 VSS BAND_GAP ASK/OOK IRQ MOD 引脚编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 功能 内部稳压电源,采用(2.7V~3.4V)的模拟电路 接外部电源(2.7V~5.5V) 内部稳压电源 (2.7V~5V时), 通常与VDD_PA连接 供应用于 PA,通常外部连接到 VDD_RF(引脚 3) 射频输出端 负电源为 PA,通常接地 负电源为 RX,通常接地 AM 接收 PM 接收 芯片接地端 带隙电压,内部模拟参考电压,必须采用交流旁路到地 低电平为 ASK 调制,高电平为 OOK 调试 中断请求引脚 模式选择端15VDD_I/ORX_IN2VSS_AMODVSSIRQ VSS_A VDD_IO I/O_0 I/O_1 I/O_2 I/O_3 I/O_4 I/O_5 I/O_6 I/O_7 EN2 DATA_CLK SYS_CLK EN VSS_D OSC_OUT OSC_IN VDD_X15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32通常接地 为I/O供电 并行输入/输出 并行输入/输出 并行输入/输出 并行输入/输出 并行输入/输出 并行输入/输出 并行输入/输出 并行输入/输出 脉冲使能和掉电模式的选择,可以用于脉冲唤醒掉电模式 为外部 MCU 提供时钟信号 EN=1时,单片机的时钟输入端(3.39/6.78/13.56 MHz)。如果EN=0,EN2=1系统时钟为 60KHz 使能端,EN=0 芯片不工作 通常接地 晶振输出 晶振输入 内部稳压电源(采用 2.7 V~3.4 V)的外部电路(单片机)3.2.2 STC11F32XE 芯片? 选择 STC11F32XE 的理由:STC11F32XE 单片机是宏晶科技公司设计生产的单时钟/ 机器周期 (1 T) 的单片机,是高速、低功耗、超强抗干扰的新一代 8051 单片机,指令代码完全兼容传统 8051 , 但速度快 8~12 倍 。内部集成高可靠复位电路,可用在高速通信、智能控制、强干扰等场合。 STC11F32XE 内部有 32 KB 的 Flash , 29 KB 的 EEPROM 和 1280 字节的 SRAM。本文采用的 STC11F32XE 是 LQFP44 引脚,除了 EA、AL E、PSEN 和 RST 引脚可以定义为通用 I/O 外,还多了 1 个 P4 口。编程支 持 ISP 下载功能,使用起来比较方便。 ? STC11F32XE单片机管脚图如下图所示。[1]16 P1.0/CLKOUTVCC44 43 42 41 40 39 38 37 36 35 34 P1.5 INT/RxD/P1.6 TxD/P1.7 RST/P4.7 INT/RxD/P3.0 P4.3 TxD/P3.1 INT0/P3.2 INT1/P3.3 CLKOUT0/INT/T0/P3.4 CLKOUT1/INT/T1/P3.5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 LQFP-44 增加P4口 有40个I/O口 并可位寻址 33 32 31 30 29 28 27 26 25 24 23 P0.4 P0.5 P0.6 P0.7 P4.6/NA P4.1 P4.5/ALE P4.4/NA P2.7 P2.6 P2.5P1.4XTAL1P1.3 P1.2 P1.1P2.1 P2.2P2.3WR/P3.6RD/P3.7 XTAL2GND图3-2 STCF1132XE单片机管脚图3.2.3 PL2303 芯片介绍? 选择理由:PL2303 是 Prolific 公司生产的 USB 总线转接芯片,可以实现 USB 转串口,用于为 计算机扩展异步串行口,或者将普通的串口设备直接升级到 USB 总线。PL2303 完全兼容 USB1. 1 、 USB2.0 ;3~5 V 调节输出,可以满足不同的电压输出接口;全双工发送和接收( RXD、TXD);MODEM 控制线( RTS、CTS、DTR、DSR、DCD 和 RI);5 、6 、7 或 8 位数据格式;奇偶校验或无校验;1 位、 1 位半或 2 位停止位;可编程的波特率 75 b/s~6 Mb/s 等。因此,PL2303 是移动系统和嵌入式系统 的理想选择,其小封装能够嵌入任何连接件和手持设备。PL2303 在工作模式和休眠模式都具有很低 的功耗,非常适合总线供电场合使用。USB 芯片使得该读卡器省去了串口和电源供电端口,可以通过 该 USB 接口和 PC 管理软件通信。 ? PL2303 相关介绍 PL2303 是Prolific 公司生产的一种高度集成的RS232-USB 接口转换器,可提供一个RS232 全 双工异步串行通信装置与USB 功能接口便利联接的解决方案。该器件内置USB功能控制器、USB 收发 器、 振荡器和带有全部调制解调器控制信号的UART, 只需外接几只电容就可实现USB 信号与RS232 信 号的转换,能够方便嵌入到各种设备,所以2000年左右开始Armjishu.com经常推荐使用该款芯片;17P4.0 P2.0P2.4P0.2 P0.3P4.2P0.0P0.1 该器件作为USB/RS232 双向转换器,一方面从主机接收USB 数据并将其转换为RS232 信息流格式发 送给外设;另一方面从RS232 外设接收数据转换为USB数据格式传送回主机。这些工作全部由器件自 动完成,开发者无需考虑固件设计。 PL2303 的高兼容驱动可在大多操作系统上模拟成传统COM 端口,并允许基于COM 端口应用可方 便地转换成USB接口应用,通讯波特率高达6 Mb/s。在工作模式和休眠模式时都具有功耗低,是嵌入 式系统手持设备的理想选择。 ? PL2303特性: ① 完全符合USB规范2.0(全速兼容); ② 片内拥有12MHz的晶体振荡器; ③ 完全兼容USB1.1协议; ④ 可调节的3~5 V输出电压,满足3V、3.3V和5V不同应用需求; ⑤ 为外部串行接口提供电源; ⑥ 支持从外部MODEM信号远程唤醒; ⑦ 支持RS232这样的串行接口。 ? PL2303引脚图如下图所示。1 2 3 4 5 6 7 8 9 10 11 12 13 14TXD DTR_N RTS_N VCC_325 RXD RI_N GND NC DSR_N DCD_N CTS_N SHTD_N EE_CLK EE_DATA PL-2303HXOSC2 OSC1 PLL_TEST GND_A NC GP1 GP0 GND VDD_S NC GND VO_33 DM DP28 27 26 25 24 23 22 21 20 19 18 17 16 15图3-3 PL2303引脚图18 ? 引脚功能描述表3-2 PL2303引脚功能 引脚 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 名 字 类 输出 输出 输出 电源 输入 输入/输出 电源 型 功能描述 数据输出到串口 数据终端准备好,低电平有效 发送请求,低电平有效 RS232 的电源, 为串行端口的电源引脚; 串口为 3.3V 这里为 3.3V; 串口为 2.5V 这里为 2.5V 串口数据输入 串行端口 接地 无连接 输入/输出 输入/输出 输入/输出 输出 输入/输出 输入/输出 输入/输出 输入/输出 串行端口(数据集就绪) 串行端口(数据载波检测) 串行端口(清除发送) 控制 RS232 收发器关机 串行 EEPROM 时钟 串行 EEPROM 数据 USB 端口 D+信号 USB 端口 D-信号 常规 3.3V 电压输出 接地 无连接 电源 USB 端口的 5V 电压电源 接地 输入/输出 输入/输出 通用 I/O 引脚 0 通用 I/O 引脚 1 无连接 模拟地锁相环 输入 输入 输入/输出 PLL 锁相环测试模式控制 晶体振荡器输入 晶体振荡器输出TXD DYR_N RST_N VDD_325 RXD RI_N GND NC DSR_N DCD_N CTS_N SHTD_N EE_CLK EE_DATA DP DM VO_33 GND NC VDD_5 GND GP0 GP1 NC GND_A PLL_TEST OSC1 OSC219 3.2.4 128X64LCD液晶显示器 ? 选择原因: 带中文字库的 128X64 是一种具有 4 位/8 位并行、 线或 3 线串行多种接口方式, 2 内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为 128×64, 内置 8192 个 16*16 点汉字,和 128 个 16*8 点 ASCII 字符集.利用该模块灵活的接口方式和简单、方便的 操作指令,可构成全中文人机交互图形界面。可以显示 8×4 行 16×16 点阵的汉字. 也可完成图形 显示.低电压低功耗是其又一显著特点。 由该模块构成的液晶显示方案与同类型的图形点阵液晶显示 模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形 液晶模块。 ? 基本特性: ① 低电源电压(VDD:+3.0~+5.5V); ② 显示分辨率:128×64 点; ③ 内置汉字字库,提供 8192 个 16×16 点阵汉字(简繁体可选); ④ 内置 128 个 16×8 点阵字符; ⑤ 2MHz 时钟频率; ⑥ 显示方式:STN、半透、正显; ⑦ 驱动方式:1/32DUTY,1/5BIAS; ⑧ 无需片选信号,无需外加负压,工作温度:0℃~+55℃,存储温度:-20℃~+60℃; ⑨ 背光方式:侧部高亮白色 LED,功耗仅为普通 LED 的 1/5~1/10; ⑩ 通讯方式:串行、并口可选、内置 AC-DC 转换电路。 ? 模块接口说明表 3-3 液晶模块接口说明 管脚 管脚名称 号 1 VSS 0V 3.0~ 2 VCC 5.0V 3 V0 对比度(亮度)调整 RS=“H”,表示 DB7——DB0 为显示数据 4 RS(CS) H/L RS=“L”,表示 DB7——DB0 为显示指令数据 电源正 电源地 电平 管脚功能描述20 R/W=“H”,E=“H”,数据被读到 DB7~DB0 5 R/W(SID) H/L R/W=“L”,E=“H→L”, DB7——DB0 的数据被写到 IR 或 DR 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 E(SCLK) DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 PSB NC /RESET VOUT A K H/L H/L H/L H/L H/L H/L H/L H/L H/L H/L H/L VDD VSS 使能信号 三态数据线 三态数据线 三态数据线 三态数据线 三态数据线 三态数据线 三态数据线 三态数据线 H:8 位或 4 位并口方式,L:串口方式(见注释 1) 空脚 复位端,低电平有效(见注释 2) LCD 驱动电压输出端 背光源正端(+5V)(见注释 3) 背光源负端(见注释 3)3.2.5 无源射频卡本设计选择 ISO14443TypeA 型卡作为电子标签。 选择原因:购买方便。 对 ISO14443TypeA 型卡的描述根据 ISO14443 的国际标准可分为四个部分: 物理特性、 射频接口、 初始化和防碰撞、传输协议。这里对物理特性和射频接口作简要说明。 ? 物理特性 这部分规定了 14443TypeA 型卡的机械性能:尺寸为 85.72mm×54.03mm×0.76mm±容差。此外, 这部分还有对弯曲和扭曲试验的附加说明以及用紫外线、X 射线和电磁射线的辐射试验的附加说明。 ? 射频接口 14443TypeA 型 IC 卡的能量是由发射频率为 13.56MHz 的读写器的交变磁场提供的。 卡中包含 IC 一个大面积的天线线圈,一般有 3~6 圈导线。21 由读写器产生的磁场不允许超过或低于极限值,即 1.5A/m≤H≤7.5A/m。Hmin≤1.5A/m 是因为近 耦合 IC 卡的动作场强 Hmin 只有在下列情况才有保证: 通过产生的场强恰好为 1.5A/m 的读写器在与发 送天线的距离 x=0 时能够读出具有运动场强为 Hmin=1.5A/m 的 IC 卡。 如果读写器和近耦合 IC 卡的运动场强是已知的,则可以估计系统的作用距离。当 IC 卡的场强 为 1.5A/m 时,作用距离为 10cm。 对于 14443TypeA 卡来说,规定使用改进的米勒(Miller)编码的 100%振幅键控制作作为从读 写器到 IC 卡传输数据的调试方法。为了保证对 IC 卡的不间断的能量供应,回扫间隙的长度大约只 有 2~3us。标准中详细规定了由读写器产生的高频信号进入起振和停振状态时对回扫间隙的要求。 为 了 从 IC 卡 到 读 写 器 传 输 数 据 , 使 用 副 载 波 的 负 载 调 制 方 法 。 副 载 波 频 率 为 fH=847kHz (13.56MHz/16) 。副载波的调制是通过对曼彻斯特编码的数据流的副载波的键控来完成的。在这两 个传输方向上,波特率 fBd=106kbit/s(13.56MHz/128) 。22 第4章 系统硬件设计4.1 设计思路本设计采用 USB 接口供电和下载,接通 USB 电源线之后红色 LED 灯亮,表明供电正常。JP2 的 2 脚、 脚分别连接 PL2303 芯片的 USB_TXD、 4 USB_RXD, JP2 的 1 脚、 脚分别连接单片机的 P3.1、 3 P3.0 (即单片机的 TXD、RXD 引脚) 。下载程序时用两根杜邦线分别连接 JP2 的 2、4 脚和 1、3 脚,再通 过串口调试软件向单片机写程序, 程序下载成功后可以拔掉杜邦线。 因为首次使用 PL2303 下载程序, 在本设计中还使用 MAX232 集成了一个串口下载部分以防止 USB 接口不能成功下载。 为了能使该读卡 器可以应用在诸如图书馆图书管理方面和其他需要需要汉字显示的场合,采用了华邦公司生产的串 行存储器 W25X80 用以存储字符库,但实际调试过程中并没有使用。为了使用 STC11F32XE 单片机内 部 1KB 的扩展 SRAM,此处采用 8 位并行模拟总线接口方式,用单片机的 P0 口和 TRF7960 的 D0~D7 相连,用 P4.6、P4.1、P3.2 作为控制线分别和 TRF7960 的 DATA_CLK、EN、IRQ 引脚相连。 单片机和 TRF7960 以及液晶部分供电通过开关(JP1)来管理。天线使用印制板天线集成现在电 路板上。4.2 本设计工作原理接通电源后,读写器天线发送频率为 13.56MHz 的电磁波,若有支持 14443 协议的射频卡进入天 线磁场范围,读写器读取射频卡的标签序列号,同时 TRF7960 对单片机发送中断请求,单片机接收 TRF7960 的中断请求,TRF7960 通过八位并行 I/O 口将读取到的标签序列号发送给 STC 单片机的 P0 口。单片机读取序列号后将此序列号发送给液晶显示器显示。4.3 各模块设计原理图4.3.1 TRF7960 设计原理图及 PCB 图该部分主要难度在于射频前端电路的设计,这部分电路为天线提供阻抗匹配,对读写成功与否 起决定性作用。 TRF7960 集成了最优解决方案, 在芯片外部设计了 2 个信号接收端口 RX_AM 和 RX_PM, 内部接收部分使用 1 个信号强度指示器(Received Signal Strength Indicator,RSSI),RSSI 不断 检测接收引脚 RX_AM 和 RX_PM 信号强度,用以控制芯片内部接收电路选择最优的信号端口。在天线 线圈和收发电路之间,使用一些容值较小的滤波电容,这样可以增大射频系统抗干扰的能力。TI 公 司在 TRF7960 的 DATASHEET 中给出了最佳的匹配电路,本设计采用 TI 的参考电路。在 PCB 制作中, 考虑到 TRF7960 的散热问题,在该芯片底部等间距设置了 9 个散热孔。以下两图分别为 TRF7960 外23 围电路设计原理图及 TRF7960 封装图。图 4-1 TRF7960 设计原理图图 4-2 TRF7960PCB 封装及底部散热孔4.3.2 STC11F32XE 单片机设计原理图 该模块设计主要是要注意 P0 口做 I/0 口使用要接上拉电阻限流,在接电源的引脚加一个 10uF 的滤波电容,防止供电时产生的纹波影响射频输出。在 17、18、19、20 脚接 4 个 LED 灯作为测试用。24 下图为单片机外围电路设计及引脚连接关系。图 4-3STC 单片机设计原理图4.3.3 PL2303 设计原理图 该部分设计主要注意的问题是在供电端口加上滤波电容。 下图为 PL2302 外围电路设计原理图及 与其它模块引脚连接关系。25 图 4-4 PL2303 设计原理图4.3.4 LCD 液晶设计原理图 液晶部分与单片机的通信通过 8 位并口,R23 为 10K 的可变电阻用以调节液晶背光。下图为液 晶模块与单片机引脚连接关系图。图 4-5 液晶部分与单片机连接管脚图26 4.3.5 天线网络设计通过天线形成的电磁场范围就是射频识别系统的读写区域。 天线电路包括 1 个 EMC 低通滤波器、 接收电路、天线匹配电路及天线。 ? EMC 低通滤波电路 读卡器系统在 13.56 MHz 频率下操作。该频率由 1 个石英晶振产生用于驱动 TRF7960 以及作为 驱动天线的 13.56 MHz 能量载波的基频。这样不仅会产生 13.56 MHz 的发射功率,而且会发射更高 的谐波。国际 EMC 条例定义了在广播频段中发射功率的幅值。要符合这一规范,必须对输出信号进 行适当的滤波。 ? 接收电路 受调制深度和调制范围的影响, 传送到接收电路的高频信号不一定是符合相应协议的最佳信号, 这给接收电路的设计带来了难度。要提高读卡器性能以及增大读卡距离,可以从天线驱动电压 (TVDD)、EMC 低通滤波电路(接收电路)和天线匹配电路这 3 个方面作为调试入口并作相关测试。 该天线驱动电压最小值为 3.0V,最大值为 5.5V,本测试对 TVDD 取值 5.0V(该参数主要针对于 读卡距离)。EMC 低通滤波电路和接收电路参数采用德州仪器公司推荐参数,暂时不作调整。由于通 过该电路所测得各种参数已经非常稳定,所以天线调试主要针对天线匹配电路。由于 TRF7960 的工 作频率是 13.56MHz,属于短波段,因此可以采用矩形天线。对天线线圈电感量的精确计算是不可行 的,但电感量 L1 可以通过以下公式估算得出:L1 ?nH??? ? 1 I 2 I 1 ?cm ?? ln 1 ? K ? N 1 ? D1 ?(4-1)式中:D1 为导线直径;I1 为导体环一圈的长度;K 为天线形状因素;N1 为天线圈数。根据实际 制出测试板,I1 取值 24 cm,D1 取值 0.152 4 cm,K 取值 1.47,N1 取值 4,经计算得出天线线圈电 感量估算值为 L1[nH]=1.244 μ H。下图为被设计在 PCB 中制作的天线。27 图 4-6 天线 PCB 图4.4 硬件 PCB 设计及注意事项系统硬件电路设计应该注意的地方如下: ? 让滤波电容靠近芯片,尤其是10 nF 的电容,以便对高频信号进行有效的滤波; ? 尽可能减少布线回路,因此要求接地的过孔尽量靠近元器件或者IC 的接地端; ? 2 个电感的放置应该成90°的方向,主要减少2个电感之间的耦合; ? 保证芯片中间的部分足够接地,可以在电路板上打9 个孔,让芯片充分接地和散热; ? 布线时减少辅线的长度,特别是射频前端,让元器件保持紧凑、 射频输出前端保持畅通的输出; ? 在电路中加一些测试点,方便调节硬件电路。 系统硬件PCB图如附录一中图①-1和图①-2所示。28 第5章 系统软件设计5.1 各应用子程序介绍单片机对 14443TypeA 卡的控制是通过 TRF7960 来实现的,TRF7960 是单片机和 14443TypeA 卡 之间的通信载体。单片机对 TRF7960 的控制是以单片机发出 TRF7960 的指令来达到的,TRF7960 收 到指令之后执行这些指令。单片机对 TRF7960 的某一指令操作不是简单的一条指令所能完成的,必 须有一个程序的序列来完成,其中有对 TRF7960 硬件内核寄存器的读写以及根据读出的硬件内核寄 存器的内容进行语言软件上的判断和设置。下面分别介绍各个应用子程序。 5.1.1 读写子程序 编写读写程序可根据 TRF7960 的传输时序图进行设计,传输过程不仅分为读和写过程,还分为 连续和非连续过程,根据图 4-3 和图 4-4 两个读写时序图可知,连续传输和非连续传输的起始条件 相同,同为:时钟信号为高时,I/O_[7]有一上升沿。数据传输时时钟信号高电平有效。 数据传输完毕时,在非连续模式下结束条件为时钟信号为高时,I/O_[7]有一下降沿。而连续模 式下结束条件为时钟信号为低时,I/O_[7]有一上升沿和下降沿。 以读操作为例,在进行读操作时先按照 TRF7960 格式发送需要读或者写的地址,然后在同一口 接收该地址读到的数据。 单个读子程序: void ReadSingle(unsigned char *pbuf, unsigned char lenght) 其中*pbuf 为地址数据, 用于单片机数据传输时的暂存, length 为数据长度[10], 单个读时 length为 1,连续读时 length≥2。另外*pbuf 所指向的数据必须符合 TRF7960 的传输格式,详见 4.2.5 节。 5.1.2 初始化 TRF7960 子程序 void unitial7960(void) 本 子 程 序 主 要 实 现 射 频 场 的 开 启 和 关 闭 , 以 及 对 ISO 标 准 的 设 定 。 本 读 卡 器 需 要 读 ISO14443TypeA 的卡, 所以 ISO 控制寄存器(ISOControl)Bit5~Bit0 设置位 A, 106kbps。 关闭射频场后,需要进行一次 IRQ 中断状态寄存器(IRQStatus)读取操作,以清除该寄存器状态便 于下一次寻卡操作。 5.1.3 获取 ID 号子程序 void GetUID(void)29 该程序功能是使射频范围内的 14443TypeA 卡状态从闲置态转移到准备态,并在获得 ID 号后进 入激活态。ISO 控制寄存器中的 Bit7 位判断接收的数据是否包含循环冗余校验(CRC) ,在 ISO14443TypeA 标准下,读卡器不需 CRC 校验,因此 ISO 控制寄存器中 Bit7 位置 1。 一般的状态转移操作流程如下: 1. 发送复位命令(reset)代码:0x0F(格式化处理后为:0x8F) ; 2. 发送 “发送不带 CRC” 命令(transmitted without CRC)代码:0x10(格式化处理后为: 0x90) ; 3. 发送连续写到发送字节 1 寄存器(TX Length Byte1)地址为 0x1D(0x3D) ; 4. 发送发送字节 1 寄存器里的数据内容; 5. 发送发送字节 2 寄存器里的数据内容; 6. 发送先进先出寄存器(FIFO)的数据。 需要注意的是 FIFO 的读写必须为连续传输操作。 要使 14443TypeA 卡从闲置态转移到准备态,需向 FIFO 写‘26’命令代码,实现过程为: size=1; buf[0] = 0x8f; // 需要首先发送复位命令 0FH,传输数据为命令 Bit7 置 1,Bit6、Bit5 清 0 buf[1] = 0x91; // 发送带 CRC 命令 11H,传输数据为命令 Bit7 置 1,Bit6、Bit5 清 0 buf[2] = 0x3d; // 发送字节 1 寄存器,地址为 1D,设置成连续写,所以 Bit5 置 1 buf[3] = 0x00;//(char)(size&&8);//字节长度高位送到发送字节 1 寄存器 buf[4] = 0x0f;//(char)(size&&4);// 字节长度低位送到发送字节 2 寄存器 buf[5] = 0x26;// ISO14443TypeA 命令字,作用为使射频范围内的可寻卡进入 Ready 状态 RAWwrite(&buf[0], 6); // 数据直接写入 FIFO 即可 数据设置完毕后进入 while 死循环触发发送和接收中断,再设置一个 LED 灯点亮灭来提示数据 是否传输完成,若传输完成则执行获取 ID 号操作 。获取 ID 号流程同理: buf[0] = 0x8f; //再次发送复位命令清空先进先出寄存器 buf[1] = 0x90; // 发送带循环冗余校验码(CRC) buf[2] = 0x3d; // 发送字节 1 寄存器 buf[3] = 0x00; //字节长度高位送到发送字节 1 寄存器 buf[4] = 0x20; // 字节长度低位送到发送字节 2 寄存器,NVB&0xf0 buf[5] = 0x93;//设置位的级联 buf[6] = 0x20; // NVB,有效字节数30 RAWwrite(&buf[0], 7); 通过中断处理子程序获得的 ID 号将存储于 buf[1]~buf[5]。其中前四字节为 14443TypeA 卡的 ID 号,第五字节仅为 CRC 校验之用,由四字节 ID 号异或所得。 5.1.4 中断处理子程序 (1) IRQ 中断处理子程序: 读卡器向卡发送清点命令后,进入该子程序。该程序功能为读 IRQ 中断状态寄存器的状态,判 断数据是否发送完成并执行 IRQ 中断处理子程序。 该子程序在判断 IRQ 中断状态寄存器状态下进行,根据不同的状态进行相应的中断操作。 中断处理子程序流程图如图 5-1 所示。31 开始IRQ状态 判断Y 发送过程? 发送完成?Y复位 Irg=00NN 等待 N接收过程? Y接收完成?剩余9字 节,转移 到单片机NY 读IRQ,清 除IRQ, Ireg=FFYCRC错误?读IRQ,清 除IRQN N Y 帧 发 送 错 误? CRC错误 N FIF溢出? N Ireg=02 Y 接 收 完 成?判 断 是 否 有损坏位, 并处理 Ireg=FF接收完成 Irg=02 Y 正在接收 Irg=01 其它错误导致中 断Ireg=02结束图 5-1 中断处理流程图接收数据时,如果接收的数据大于 12 字节,会使 FIFO 溢出,所以当接收的数据大于 9 字节时,32 TRF7960 会通过 IRQ 中断状态寄存器 Bit5 置 1,通知单片机来取数据。 IRQ 中断寄存器 Bit7 和 Bit6 位分别是发送状态标志位和接收状态标志位, 传输过程中 TRF7960 会先置位,发送或接收完成后才会产生中断。 每次无错误接收完成后都需要通过发送字节 2 寄存器的 Bit0 位检查是否有损坏位, 有则读取发 送字节 2 寄存器 Bit1~Bit3 位来判断损坏位数,并作相应的屏蔽处理。接收完成后使用 RESET 复位 命令清除 FIFO,便于下一个时隙寻卡操作。 i_reg=00 表示发送完成,i_reg=01 表示正在接收,i_reg=02 表示传输有错误,而 i_reg=FF 表 示无错误接收完成。 5.1.5 LCD 液晶显示子程序 LCD 主要功能是现实显示读到的 ID 卡号。传输方式为并行传输,LCD 在传输数据前先判断数据 传输口是否忙,闲时方进行数据传输。另外写操作(RW 位置 0)分为写命令和写数据两种,写命令 则 RS 位置 0,写数据则 RS 置 0。每读写一次数据前打开使能端(EN 位置 1) ,读写完成后关闭使能 端(EN 位置 0) 。显示字符前需设置相应的显示坐标,并通过写命令方式发送到 LCD。由于读卡器内 部数据均以二进制表示,而 LCD 显示则 ASCII 码进行显示,为观察方便,所以需对二进制数据进行 一定的处理调整,再以 ASCII 码显示到 LCD 中。LCD 流程图如图 5-2 所示。开始LCD 初 始化设 置 显 示坐标接收 数据数据 调整数据 显示结束图 5-2 LCD 显示子程序流程图33 数据调整时需要将 16 进制转换成 ASCII 码。0~9 的 ASCII 码为 30H~39H,A~F 的 ASCII 码为 41H~46H。转换时,只要判断十六进制数是在 0~9 之间还是在 A~F 之间,若是 0~9 之间则加 30H, 在 A~F 之间则加 37H,流程图如图 5-3 所示。开始取 数 据 高四位字符为字符为‘A’ 到‘F’?NY 加 0x37 加 0x30高四位数 据输出取 数 据 低四位字符为字符为‘A’ 到‘F’? Y 加 0x37N加 0x30低四位数 据输出结束图 5-3 数据转换子程序流程图34 5.2 软件设计总体介绍软件设计之初根据流程图逐步编写各个子程序,在各功能一步一步实现并调试成功后,最终才 整合到一起成为一个完整的软件程序,整合到一起的软件还需要最后的调试验证才能最终确保软件 的正确性与完整性。总体程序流程图如图 5-4 所示。开始初始化 单片机初始化 7960开启射 频端有卡进入射频 范围? YN向卡发送 应答信号中断应答正确应答? N错误处理Y 读卡号N 成功读?Y 关闭射频, 退出图 5-4 总体程序流程图 35 第6章 系统硬件与软件的调试6.1 系统硬件的调试6.1.1 调试思路及用到的工具 在最初的工作中,认为将所有元器件焊接正确即完成硬件调试工作,也意味着完成了整个硬件 设计。将硬件交给本课题负责软件的同学后发现硬件存在很大问题。经老师指导,明白了硬件设计 在元器件焊接好后,要检查各个模块是否能正常工作,并且要用简单的测试程序和硬件测试工具测 试,在确保电路连接正确和各个模块工作正常,测试程序运行正常后才算完成整个硬件设计。 在硬件调试过程中使用的工具主要是万用表、数字示波器和 STC 的串口下载软件。 6.1.2 调试过程中遇到的问题及解决方法 芯片焊接:本设计主要选用芯片及电阻电容都是贴片元件,TRF7960 芯片封装尺寸为 5mm×5mm 的 QFN 封装,是焊接过程中最难的部分。 ? TRF7960 用热风枪的焊接方法: ① 首先在焊盘上上锡(锡量应均匀,高低一致.不均匀一致时,使用吸锡带修整); ② 将 TRF7960 各引脚与焊盘对齐并固定放正; ③ 热风枪吹热(温度设定在 300 度,时间 15S 左右); ④ 由于表面张力,芯片会自动对齐到焊盘上; ⑤ 用蹄口、刀口烙铁在四边上锡,拖焊一遍,保证强度和美观。 ? 供电:用万用表检测 PL2303、单片机、TRF7960 供电端电压显示为 4.1V,以上 3 块芯片皆 达到工作电压,能通过 PL2303 下载程序,单片机能与 TRF7960 进行通信。但是,液晶模块连接后, 液晶中间表示液晶工作正常的黑线不显示,对单片机下载液晶显示测试程序并运行,液晶显示内容 模糊。在排除虚焊,漏焊等情况后通过多次阅读 LCD 液晶使用手册,确定问题为对液晶供电电压不 够,液晶正常显示工作电压要达到 4.8V,而此时对液晶供电只有 4.1V。重新焊接供电部分,此问题 依然得不到解决。通过咨询实验室其他同学,发现问题在于 USB 供电线,更换质量较好的供电线后, 各个模块供电电压达到 5.0V,液晶显示正常。 ? 元器件焊接;由于经验不足,元器件的焊接有虚焊,漏焊等情况导致射频输出端输出信号不 是预期的信号,液晶不能显示或者显示时为乱码。用万用表检测各个焊接点后找出接触不良的点重 新焊接后解决该问题。 用万用表检查各个元器件焊接正确与否:36 ① 将万用表调至短路蜂鸣档; ② 两表笔分别接在要检查的焊接点两端; ③ 蜂鸣器鸣叫则表明两点之间短路,焊接正常; ④ 可以用万用表接触焊点不同方位,确保焊接完全正常。 ? 电脑不能连接单片机:用 USB 连接线连接电脑和电路板后,电脑不能识别该硬件设备,在电 脑中安装 PL2303 驱动程序后电脑能识别但是不能通过串口调试程序。 在老师指导下对电脑连接端口 进行确认,连接好电脑与电路板后,打开我的电脑,右键单击选择下拉菜单中的“属性” ,在选项卡 中选择硬件,再选择设备管理器即可确认电路板 USB 接口与电脑连接端口。下图 COM3 即表示选择的 是端口 3。图 6-1 在电脑中确认串行口? 握手失败:串口调试软件不能对单片机写程序。解决办法:设置串口调试软件中波特率,由 高到低依次递减直到与单片机握手成功为止。在下载过程中发现不同的电脑需要设置的波特率不一 样。6.2 系统软件的调试软件调试过程中系统环境为 windows XP,应用软件包括编译软件 Keil uVision4 和程序烧写软 件 STC_ISP_V488。 6.2.1 子程序编译 打开 Keil uVision4 后, 点击 Project-&New Project 菜单, 输入工程名称 “STC12-TRF7960.uv4” , 在弹出的对话框中选择目标 CPU,由于 Keil 不支持 STC 的单片机,考虑同样是使用的 8051 内核, 所以选用了 Atmel 公司的 AT89C52 芯片,见图 5-1,确定后可以发现工程窗口出现“Target1”和下一 层“Source group1”的文件层次,在 Source group 下添加编写的程序。在编好程序后就要进行编37 译调试。首先在 Projiect-&Option For target ‘target1’的对话框中完成工程的详细设置。在 设置好工程后即可编译链接。测试结果:单片机编程部分用 Keil 软件编译通过,能顺利生产 HEX 文 件,见图 6-2,图 6-3。图 6-2 选择芯片图 6-3 编译生成 HEX 文件38 6.2.2 下载调试 调试之初先运行一个点灯小程序和串口测试程序检查硬件是否完好。点灯程序的具体操作是按 P40 口的按键,点亮 P34 口的发光二极管。而串口测试程序的具体操作是按下 P40 口开关,串口返 回 A,串口输入 A,则返回 B。如图 6-4 和图 6-5。 点灯程序编译通过:图 6-4 点灯程序串口测试程序编译通过:图 6-5 串口测试程序39 然后连接读卡器到电脑并使用 STC_ISP_V488 软件进行烧写。操作为:点击 MCU type 下拉菜单 选择 STC11F32XE 芯片,然后点击“打开程序文件”找到测试程序,文件名为“xxx.hex”的类型文 件。选择串口端,这里是“COM5” ,最高和最低波特率调为 9600,最后点击“download/下载”进行 烧写。当左下方状态栏显示“仍在连接中,请给 MCU 上电”的提示时给读卡器上电,上电以后提示 正在“擦写应用程序”-&“下载成功” ,则表明程序烧写成功。此时点击右上方的串口助手,端口选 择“COM5” ,然后点打开串口按键。串口测试程序下,按下读卡器 P40 对应按键,则“接收/键盘发 送缓冲区”显示字符“A” ,在“单字符串发送区”发送字符“A” ,则“接收/键盘发送缓冲区”显示 字符“B” ,表明测试成功。如图 6-6。图 6-6 程序烧写界面40 然后上初始化 TRF7960 的子程序,检测单片机与 TRF7960 的通讯是否正常。子程序实现单片机 对 TRF7960 内部 ISO 寄存器的写操作,写入开启 ISO14443A 所对应的状态,写入数据为 88H,写入 后对该寄存器进行单个读,并送到串口显示验证。如图 6-7 所示。图 6-7 初始化 TRF7960“接收/键盘发送缓冲区”显示“88”字符,表示对 TRF7960 的 ISO 寄存器写入成功,同时验证 了单片机与 TRF7960 的通信正常。 最后上寻卡程序,检验寻卡是否正常。 程序烧录完成后给读卡器上电,液晶上第一行显示: “14443TypeA 卡 ID 号” ,二三四行均无显 示信息。此时将卡 1 靠近读卡器上方的天线,此时 LED1 和 LED3 点亮,LED1 点亮表明读卡器在射频 范围内寻到卡,LED3 点亮表示卡 1 的 ID 号接收成功。与此同时,液晶第二行显示“2E 00 82 64 C8” 字符串(如图 6-8 所示) ,为十六进制,五字节。前四字节为卡 1 的 ID 号,最后一字节为循环冗余 校验码(CRC) ,第五字节为前四字节异或所得。41 图 6-8 卡 1 的 ID 号图 6-9 卡 2 的 ID 号然后读卡 2 的 ID 号,先复位读卡器,再把卡 2 置于天线前端 LED1、LED3 均再次点亮,液晶显 示“3E 00 82 64 D8” ,卡 2 的 ID 号为“3E 00 82 64” ,循环冗余校验码为“D8” ,读卡成功。如图 6-9 所示。其他效果图如附录一所示。6.3 软件编写和调试经验总结使用 KEIL 软件时,程序代码和程序中添加的头文件必须在本工程文件下,否则编译时将提示字 符未定义等错误现象。软件逐步调试过程中,程序代码尽量不要删除,而是使用屏蔽代码的方法, 这样做方便程序的下一步调试。软件编译提示错误时,有时候并非其所指的错误,而只是逗号分号 等符号的缺写或者是其他编程格式错误,所以编写程序完成后要先仔细检查格式,确认准确无误后42 方可开始进行编译。程序编写时多使用宏定义,定义成通俗易懂的名称,能有效提高编程速度,阅 读时也有助于理解。每个子程序,甚至每个语句要多做说明,有助于对编程思路的整理。 程序烧写接口采用 PL2303 芯片,使读卡器有串口转 USB 功能,方便在不同场合烧写程序,烧写 前需安装相应驱动程序。使用 STC_ISP_V488 烧写程序前需要查看端口序号(COM?) ,可在计算机右 键属性的设备管理器里查看得到。烧写程序时,若“提示串口未打开”可重新拔插 USB 线,或者换 一个 USB 接口。若 MCU 上电后提示“握手失败”等字样,可尝试调高最低波特率或者调低最高波特 率。43 第7章 结 论本文基于国际标准 ISO14443TypeA,对 13.56MHz 的射频读卡器的软件进行了分析和研究。在了 解 RFID 行业的发展概况之后,对 ISO14443TypeA 标准进行了深入的学习,并且查阅了大量的国内外 相关文献,在其他作者的设计思想和研究成果的基础上,为达到了读卡器的寻卡和读卡功能,提出 了自己对射频读卡器的软件设计思路,并达到了预期的效果。 在学习的过程中遇到了不少的困难,主要的困难在于对 TRF7960 芯片的学习和中断方式的处理 上。TRF7960 芯片的资料大部分属于外文资料,学习起来要比学习中文资料多花不少时间。另外中 断方式处理参照了 IT 公司所给的中断处理方案,并有所简化,所以中断功能未能全面实现。其次在 串口读 TRF7960 寄存器的过程中,有无法读出的情况,本文作者水平有限,未能深究其原因。 由于毕业设计研究的时间限制加之水平有限,本论文还有一些不足之处,可在今后加以改进。 比如未能实现寻卡的防碰撞功能和写卡功能。希望能在以后的时间里能一一完成。 本次毕业设计给了我很多启发,同时让我正视到不少自身的缺憾。设计初期 C 语言的编写未能 熟练运用,单片机的基础不扎实等的一系列知识缺憾让我走了不少弯路,让我因为从前没有认真学 习而深感遗憾。要感谢指导老师以及一帮同学对我的勉励,让我有鼓起勇气从低学习的劲头。在这 两个多月的毕业设计研究里,我不断地对知识的查漏补缺,同时很大程度上克服了做事没恒心的性 格弱点。此次的毕业设计虽然还有待完善,但是我从中获得了一定的自信心,同时认识了一帮热情 友好的伙伴。我相信今后的日子里我会不断地学习,从学习中获取自信,从自信中不断成长。44 致 谢本次能完成该题目的设计内容,首先要感谢罗正华老师和胡庆老师,从选题到最后的答辩过程 中罗老师和胡老师都给予了我悉心的指导和帮助。从这次毕业设计中我不仅学会了如何在单片机和 TRF7960 芯片之间建立正确的通信,还学到了应该以什么样的态度来做人和做事。 其次还要深深感谢大学四年中教过我的所有老师,是你们给予了我知识和勇气来面对未来的挑 战;是你们的关怀和教导让我今天有能力完成这个题目的设计内容,在此向您们道一声:您们辛苦 了! 最后还要特别感谢李洋同学,因为本次设计中最大难题在于如何在单片机和 TRF7960 芯片之间 建立正确的通信,编辑串口程序,本次设计引用了他的串口通讯程序。感谢大学四年的同窗,感谢 你们在学习和生活中给予我的支持和帮助,感谢你们陪伴我走过了美好的大学生活。45 参考文献[1] 宏晶公司. STC8911F32XE 说明书,2009. [2] TI 公司. Multi2Standard Fully Integrated 13. 56MHz Radio Frequency Identification (RFID) Analog Front End and Fram2 ing Reader System ,2006. [3] TI 公司. Implementation of the ISO15693 Protocol in the TRF796X ,2006.[4] 陆永宁. 非接触IC 卡原理与应用[M]. 北京:电子工业出版社, 2006. [5] 王永虹,徐炜,郝立平. STM32 系列ARM Cortex-M3 微控制器原理与实践[M]. 北京:北京航空航 天大学出版社, 2008. [6] Texas Instruments. Multi-Standard Fully Integrated 13.56-MHz Radio Frequency Identification Analog front End and Data Framing Reader System[Z],2009. [7] Texas Instruments. Implementation of the ISO15693 Protocol in the TITRF 796x[Z], 2006. [8] 张玉兴. 射频模拟电路与系统[M]. 成都:电子科技大学出版社, 2008. [9] 曾孝平,赵小刚,熊东,等.ASK 调制度对无源RFID 系统能量和数据传输的影响[J].北京:信息 与电子工程, ):497-500. [10] 王文闯, 王可人.基于数据缓存机制的RFID 安全协议[J].信息与电子工程, 2008, 7(5):371-374. [11] 宋汉斌,陈晓光,王超. 基于 Smith 圆图的射频功放电路的设计与分析[J].北京信息与电子工 程, ):409-413. [12] 康东, 石喜勤, 李勇鹏.射频识别 (RFID) 核心技术与典型应用开发案例.人民邮电出版社,2008 年 7 月第 1 版:215. [13] 汪国海.非接触式 IC 卡读卡器设计.成都:电子科技大学.硕士学位论文,. [14] 严雄武.基于 Mifare 非接触式 IC 卡的射频识别系统研究与实现.武汉理工大学.硕士学位论 文,. [15] 刘丽丽.非接触式智能卡系统研究与开发.北京:北京化工大学.硕士学位论文,. [16] 杨肇敏,张忠会.初论非接触 IC 卡技术.武汉:计算机工程与应用论文集,. [17] 范红梅.RFID 技术研究.杭州:浙江大学.硕士学位论文,. [18] TEXAS INSTRUNMENTS.MULTI-STANDARD FULLY INTEGRATED 13.56-MHZ RFID ANALOG FRONT END AND DATA-FAMING READER SYSTEM,.46 附录 各硬件效果图图①-1PCB 顶层布线图图①-2 PCB 底层布线图47 图①-3 PCB 板图(焊元件之前)图①-4 PCB 板图(焊元件之后)48 图①-5 液晶显示图图①-6 一食堂饭卡 ID 号图 49 图①-6 二食堂饭卡 ID 号图50 附录 2 源程序清单#include &include.h& #include &intrins.h& #define RXERROR 0x0f #define NOERROR 0X00 #define Lcd_Bus P1 #define FIRST_ADDR 0 #define uchar unsigned char #define uint unsigned int //MCU P2&------& LCM //定义字符/汉字显示起始位置//============= 全局变量定义 ====================================================================== unsigned char RXTX unsigned char i_ unsigned char idata buf[32]; unsigned char Data[10]; unsigned char RXErrorF //============= 液晶 ====================================================================== sbit RS = P2^7; sbit RW = P2^5; sbit E = P2^3; sbit RES = P4^3; sbit PSB = P3^7; sbit KEY2 = P3^4; sbit KEY3 = P3^5; //sbit LED1=P2^1; //标志 //发送数据计数 //中断寄存器51 //sbit CS2 = P3^6; #define Lcd_Bus P1 //bit fReadUID; bit fI //中断标志 //MCU P2&------& LCMvoid SendByte(unsigned char i); void delay(int n); void delay1(void); void DelayMs(unsigned char j); void EnableSlotCounter(void); void DisableSlotCounter(void); void STOPcondition(void); void STOPcont(void); void STARTcondition(void); void WriteSingle(unsigned char *pbuf, unsigned char lenght); void WriteCont(unsigned char *pbuf, unsigned char lenght); void ReadSingle(unsigned char *pbuf, unsigned char lenght); void ReadCont(unsigned char *pbuf, unsigned char lenght); void DirectCommand(unsigned char *pbuf); void RAWwrite(unsigned char *pbuf, unsigned char lenght); void Initial7960s(void); bit InventoryRequest(unsigned char *ReadBuff) ; void InterruptHandlerReader(unsigned char *Register); /*-------------------液晶----------------------------*/ void chk_busy(); void delay3(unsigned int t); void write_com(unsigned char cmdcode) ; void write_data(); void lcdreset() ; void ceshi(); void hzkdis(unsigned char code *s) ;52 void set_xy(unsigned char xpos,unsigned char ypos); void printstr(unsigned char xpos,unsigned char ypos,unsigned char str[],unsigned char k); void set_xy(unsigned char xpos,unsigned char ypos); void print(unsigned char x,unsigned char y,char* str); void ceshi_0(); void delay_1(uint z); uchar key_scan(); uchar a, /*------------------延时程序-----------------------------*/ void delay_1(uint z) { uint i,j; for(i=z;i&0;i--) for(j=110;j&0;j--); } /*------------------按键子程序-----------------------------*/ uchar key_scan() { if(KEY2==0) { delay_1(20); if(KEY2==0); { while(!KEY2); delay_1(20); while(!KEY2); return(0); } } if(KEY3==0)53 { delay_1(20); if(KEY3==0); { while(!KEY3); delay_1(20); while(!KEY3); return(1); } } return(0); } void delay(int n) { while(n--); } void InitPort(void) { DataPort = 0x00; clkOFF; //OOKdirIN; } //************************************************************************************* ************ // 功能描述 : 简单结束并口通信 // 输入参数 : 无 // 返回参数 : 无 // 说 明 : // 设置 OOK 端口 ////************************************************************************************* ************54 void STOPcondition(void) { // // P0M1=; P0M0=; DataPort |= 0x80; clkON; DataPort = 0x00; clkOFF; } //************************************************************************************* ************ // 功能描述 : 彻底结束并口通信 // 输入参数 : 无 // 返回参数 : 无 // 说 明 ://************************************************************************************* ************ void STOPcont(void) { //P0M1=; //P0M0=; DataPort = 0x00; //TRFDirOUT; DataPort = 0x80; DataPort = 0x00; } //************************************************************************************* ************ // 功能描述 : 并口通信起始 // 输入参数 : 无55 // 返回参数 : 无 // 说 明 ://************************************************************************************* ************ void STARTcondition(void) { // // P0M1=; P0M0=; DataPort = 0x00; clkON; DataPort = 0 clkOFF; } //************************************************************************************* ************ // 功能描述 : 单个写 // 输入参数 : 内容指针,长度 // 返回参数 : 无 // 说 明 ://************************************************************************************* ************ void WriteSingle(unsigned char *pbuf, unsigned char lenght) { STARTcondition(); while(lenght & 0) { *pbuf = (0x1f &*pbuf); address for(i = 0; i & 2; i++)56// 设置地址为非连续写 register// 单个地址和数据写操作 { DataPort = * clkON; clkOFF; pbuf++; lenght--; } } STOPcondition(); } //************************************************************************************* ************ // 功能描述 : 连续写 // 输入参数 : 内容指针,长度 // 返回参数 : 无 // 说 明 : //发送命令和数据//************************************************************************************* ************ void WriteCont(unsigned char *pbuf, unsigned char lenght) { STARTcondition(); *pbuf = (0x20 | *pbuf); write, continous *pbuf = (0x3f & *pbuf); while(lenght & 0) { DataPort = * clkON; clkOFF; pbuf++;57// 设置地址写为连续模式address,// 设置寄存器地址//发送命令 lenght--; } STOPcont(); } //************************************************************************************* ************ // 功能描述 : 单个读 // 输入参数 : 地址和长度 // 返回参数 : 无 // 说 明 ://************************************************************************************* ************ void ReadSingle(unsigned char *pbuf, unsigned char lenght) { STARTcondition(); while(lenght & 0) { *pbuf = (0x40 | *pbuf); *pbuf = (0x5f & *pbuf); // // P0M1=; P0M0=; DataPort = * clkON; clkOFF; _nop_(); //TRFDirIN; // // P0M1=; P0M0=; P0=0 clkON;58//地址, 读,单个 //积存器地址// 发送命令// 上升沿读取数据 *pbuf = DataP clkOFF; // // P0M1=; P0M0=; DataPort = 0x00; //TRFDirOUT; _nop_(); pbuf++; lenght--; } STOPcondition(); } //************************************************************************************* ************ // 功能描述 : 连续读 // 输入参数 : 地址和长度 // 返回参数 : 无 // 说 明 ://************************************************************************************* ************ void ReadCont(unsigned char *pbuf, unsigned char lenght) { STARTcondition(); *pbuf = (0x60 | *pbuf); *pbuf = (0x7f & *pbuf); DataPort = * clkON; clkOFF; //TRFDirIN; while(lenght & 0)59//地址, 读,连续 //积存器地址 //发送命令//上升沿读取数据 { P0=0 clkON; *pbuf = DataP clkOFF; pbuf++; lenght--; } STOPcont(); } //************************************************************************************* ************ // 功能描述 : 发送命令 // 输入参数 : 命令指针 // 返回参数 : 无 // 说 明 ://************************************************************************************* ************ void DirectCommand(unsigned char *pbuf) { STARTcondition(); *pbuf = (0x80 | *pbuf); *pbuf = (0x9f & *pbuf); DataPort = * clkON; clkOFF; STOPcondition(); } //************************************************************************************* ************60//命令 //命令码 //发送命令 // 功能描述 : 直接写数据 // 输入参数 : 数据指针,长度 // 返回参数 : 无 // 说 明 ://************************************************************************************* ************ void RAWwrite(unsigned char *pbuf, unsigned char lenght) { STARTcondition(); while(lenght & 0) { DataPort = * clkON; clkOFF; pbuf++; lenght--; } STOPcont(); } //************************************************************************************* ************ // 功能描述 : 初始化 7960 // 输入参数 : 无 // 返回参数 : 无 // 说 明 : //发送命令//************************************************************************************* ************ void Initial7960s(void) { unsigned char command[4];61 TRFD DelayMs(10); TRFE //DelayMs(1); command[0] = ModulatorC command[1] = 0x21;// 复位 TRF7960//在此各种调制方式都行,最好为 0x07,即 ASK 30%WriteSingle(command, 2); DelayMs(1); command[0] = ModulatorC ReadSingle(command, 1); } //************************************************************************************* ************ // 功能描述 : 获取单块数据,无地址的读 // 输入参数 : 起始块 // 返回参数 : 无 // 说 明 ://************************************************************************************* ************ void ReadSingleBlock(void) { unsigned char i,j; unsigned char command, found = 0; //unsigned char buf[20]; size=3; buf[0] = 0x8f; // Reset FIFO command buf[1] = 0x90; // send with CRC buf[2] = 0x3d; /

我要回帖

更多关于 遗传算法染色体长度 的文章

 

随机推荐