为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 公交车射频卡刷卡机的设计

公交车射频卡刷卡机的设计

2018-04-10 50页 doc 105KB 23阅读

用户头像

is_654168

暂无简介

举报
公交车射频卡刷卡机的设计公交车射频卡刷卡机的设计 目 录 摘要 2 Abstract 3 第1章 绪论 4 课题背景 4 1.1 1.2 设计意义与目的 4 1.3 系统设计的总体要求 4 1.4 系统设计的方案选择 5 系统硬件设计 6 第2章 2.1 系统硬件设计框图 6 2.2 系统硬件设计原理图 6 2.3 系统各电路详细设计 7 单片机的选择与应用 7 显示电路 8 93C46串行EEPROM 8 蜂鸣器电路 9 看门狗电路 10 读卡器电路 11 电源电路 13 第3章 系统的软件设计 14 3.1 系统软件设...
公交车射频卡刷卡机的设计
公交车射频卡刷卡机的 目 录 摘要 2 Abstract 3 第1章 绪论 4 课背景 4 1.1 1.2 设计意义与目的 4 1.3 系统设计的总体要求 4 1.4 系统设计的方案选择 5 系统硬件设计 6 第2章 2.1 系统硬件设计框图 6 2.2 系统硬件设计原理图 6 2.3 系统各电路详细设计 7 单片机的选择与应用 7 显示电路 8 93C46串行EEPROM 8 蜂鸣器电路 9 看门狗电路 10 读卡器电路 11 电源电路 13 第3章 系统的软件设计 14 3.1 系统软件设计框图 14 3.2 系统软件各模块设计分析及程序流程图 14 主程序 14 中断服务子程序 15 显示程序 15 蜂鸣器程序 93C46串行EEPROM编程 读卡器程序 21 第4章 系统的软件调试 34 4.1 系统调试软件Medwin 34 4.2 程序调试示例 34 总结 36 37 致谢 参考文献 38 要 摘 随着城市规模的扩大,交通已经成为城市发展的一个重要因素。公交车射频卡可以提供更为方便、快捷的服务。 本文对公交车射频刷卡机的系统设计进行了研究。采用美国ATMEL公司的AT89C52单片机为控制核心,应用PHILIPS公司的MIFARE射频技术实现设计。本设计包含了系统的硬件设计与软件设计两个部分。硬件设计部分描述了所应用的各部分的硬件电路及其原理,主要有:显示电路,看门狗电路,93C46串行EEPROM蜂鸣器电路以及读卡器电路;同时,给出了完整的系统硬件设计原理图。软件设计采用了汇编语言进行设计,运用模块化结构,并给出了各个模块的流程图,使程序设计的逻辑关系更加简洁明了;采用系统调试软件Medwin进行软件调试;另外,本文也给出了详细的程序清单。 关键词:公交卡,射频卡,单片机 Abstract Along with the extension of the city scale, the transportation has already become an important factor of the city development.The bus radio frequency card can provide more convenience and faster servance. This text carry on a research to the system design of the the bus radio frequency card machine .It adopted single chip microcomputer of the AT89C52 of the American ATMEL company as the control core and applied the MIFARE radio frequency technique of the PHILIPS company to realize the design.This design of the system includ two parts: the hardware design and the software design.The hardware design part described the hardware circuits and the principle of each part, mainly includ:the display circuit, the watchdog circuit, the 93C46 serial EEPROM, the buffer circuit and read card machine.Also ,it gave the system hardware of the integral design principle diagram.Adopting assemble language to edit the software, using blocking structure and giving the flow chart of each block make the logical relation of the program design more simply and directly to understand.It adopted Medwin to debug the program.Moreover, this text also gave detailed program list. Keyword:Bus Card, Radio Frequency Card, Single Chip Microcomputer 第1章 绪论 1.1 课题背景 IC卡在世界范围内应用广泛,主要形式有:电话卡、身份卡、交通卡、医 疗卡、家庭购物卡、加油卡、公司卡、会员卡、电影卡等。IC卡把具有存储、 加密和数据处理能力的芯片镶嵌于塑料基片之中。这种既具有智能性,又便于携 带的卡片,为现代社会信息的处理和传递提供了一种全新的手段。 IC卡以其高度的信息集成,高度的安全性,正日渐辉煌和灿烂,广泛应用 于公共交通行业,人们已愈来愈多地开始接受和使用IC智能卡。目前经常接触 到的IC卡有两种:接触式IC卡和非接触式IC卡(射频卡)。 1.2 设计意义与目的 设计意义:公交卡的广泛推广,将使公交管理迈上一个新台阶。公交射频卡不仅避免了因找零引起的尴尬;此外,射频卡小巧、轻便、美观,便于乘客携带;同时,使用公交射频卡,可减少现金流通量,也减少了疾病传播的途径;减少了乘客上车付费的时间,缩短了公交车到站停靠的时间,一定程度上缓解了城市的交通压力。 设计目的:通过此次的系统设计,了解射频卡的基本构成及原理;单片机原理与接口设计;掌握实用电子信息系统设计与实现的方法。 1.3 系统设计的总体要求 总体要求:打开刷卡机,有卡进入时,外部中断0响应,单片机控制读卡器读卡。正常情况下,卡内值减2,LED显示器中显示余额,蜂鸣器“嘟”一声;余额不足时,同样LED显示器中显示余额,蜂鸣器“嘟嘟嘟„„”,以示警报。当刷卡机工作过程中,程序中出现时间溢出,位溢出等错误时,LED显示器中显示“E”。看门狗电路可以进行手动复位;当电源电压Vcc低于4.75V时,输出复位信号;当微处理器死机时,可强迫复位。93C46串行EEPROM用来保存刷卡机的总营业额,可以在掉电时保存数据,防止数据丢失,而且可以随时查询营业额。 系统硬件主要组成电路:显示电路,看门狗电路,93C46串行EEPROM蜂鸣器电路以及读卡器电路。控制核心是单片机。系统软件按各组成电路分模块编写,形成各具独立功能的子程序,使硬件在软件的控制下协调运作。1.4 系统设计的方案选择 一 IC卡的选择 方案一:采用接触式IC卡实现设计 方案二:采用非接触式IC卡(射频卡)实现设计 分析:接触式的IC卡通过机械触点从读器获取能量和交换数据;非接触式IC卡通过线圈射频感应从读器获取能量和交换数据,所以又称射频卡。与接触 式IC卡相比较非接触式卡(射频卡)更具有优势:可靠性高,非接触式IC卡(射频卡)与读写器之间无机械接触,避免了由于接触读写而产生的各种故障;由于非接触通讯,读器在10CM范围内就可以对卡片操作,所以不必插拨卡,非常方便用户使用;加密性能好,非接触式IC卡由IC芯片, 感应天线组成, 并完全密封在一个PVC卡片中, 无外露部分。显然,射频卡在实际应用中更具优势。因此,在设计过程中采用射频卡(非接触式IC卡),选取方案二。 (二)用户信息的储存 方案一:将用户信息储存在公交卡内 方案二:将用户信息储存在公交刷卡机内 分析:公交刷卡机是应用于公交车上的,基于其所置空间及经济成本的考虑,应当尽量精简其设计。方案二中将用户信息储存在公交刷卡机内在刷卡机内储存大量的用户信息增加了刷卡机的成本。而采用方案一则不仅能实现功能,而且成本低用户信息储存在公交卡内,刷卡时将用户信息读出,扣除车费后将余额送回卡内即可。因此,选取方案一,将用户信息储存在公交卡内。 (三)程序编写 方案一:用汇编语言编程实现编码程序 方案二:用C语言编程实现编码程序 单片机可以采用汇编语言和C语言进行编程。汇编语言是机器语言,指令的执行速度快,节省存储空间。在本次设计中,软件编程并不复杂,使用汇编语言较C语言更适合。因此,选取方案一,用汇编语言实现编码程序。 综上所述,公交车刷卡机将采用射频卡实现设计,将用户信息储存在公交卡内,用汇编语言编程实现编码程序。 系本次设计的重点和难点在于读卡器的应用和单片机的系统设计。第2章统硬件设计 2.1 系统硬件设计框图 硬件设计思想:单片机控制着读卡电路读卡,蜂鸣器响,LED显示器显示余额,存储器保存营业总额。总之,单片机是整个系统的控制核心,使各电路按照设计总要求有序的完成各自的功能。设计框图如图 2.1 : 2.2 系统硬件设计原理图 系统硬件设计原理图如上图 2.2 所示。 2.3 系统各电路详细系统硬件主要组成电路:显示电路,看门狗电路,93C46串行EEPROM蜂鸣器电路以及读卡器电路。接下来,将逐一进行。 单片机的选择与应用 选择:单片机是整个系统的控制核心。在单片机的选取上采用美国ATMEL公司的AT89C52单片机,其以MCS-51为内核,并兼容了MCS-51的硬软件。表将 把AT89C52与我们熟悉的8031进行对比。 单片机 型号 存储容量及类型 RAM 字节 16位定时 器个数 中断源 个数 最高晶振频率(MHZ) 封装引 脚个数 8031 无 ROM 128 2 5 12 40 AT89C52 8K EEPROM 256 3 8 24 40 之所以选取AT89C52,其主要原因在于:较801而言,AT89C52可反复写的只读程序存储器,可以更方便编程。而8031则须外加存储器来存放程序。 应用: AT89C52单片机各端口在系统设计中的使用状况 图(2.2) : 1( P1口控制了LED显示器的段码显示,P2.4,P2.5,P2.6控制了LED显示器的位选通端。 2( ALE/PROG:具有复位功能。第一,地址锁存允许;第二,对FLASH存储器进行编程时,从该引脚引入编程脉冲。 如图所示,ALE/PROG端与读卡器电路中的MCM200的ALE(地址锁存使能端)相连。同时,ALE/PROG端也与看门狗电路中的DS1232中的ST端相连,ST端为看门狗定时器的周期信号输入端,若ST端在设置的周期时间内没有有效信号到来,RST端将产生强制复位信号。这里选用AT89C52单片机中的ALE信号作为周期性的输入信号。 3( RST:复位信号。与看门狗电路中的RST信号相连。 4( P2.0控制蜂鸣器,P2.0置低,蜂鸣器响;P2.0置高,蜂鸣器不响。 5( P2.1, P2.7, P2.2, P2 .3分别与93C46串行EEPROM中的DI(串行数 (串行数据输出),CS(片选信号)端相连。 据输入),SK(时钟信号),DO 6( P0口:地址/数据复用端口。与读卡器电路中的MCM200的的数据端D0― P0.0―P0.3同时也与地址端A0―A3相连。 D7相连; 7( P3.2 INT0 端与读卡器电路中的MCM200的的NIRQ端相连。当有卡进入时,引起中断。 8(AT89C52单片机的读,写信号分别与读卡器电路中的MCM200的读写信号相连。 显示电路 如图 2.3 所示,采用共极LED显示器,显示3位数(从左至右依次为第一位、第二位、第三位),即刷卡机中显示余额的百、十、个位。通过单片机AT89C52的P2.4,P2.5,P2.6口分别控制3个LED显示器的位选端。P2.4,P2.5,P2.6口经过高压输出反相驱动器74LS06连接到LED显示器因此P2.4(或P2.5,P2.6)置1时,相应的LED显示器选中。共极LED显示器,即显示器的各发光二极管的极接在一起。P1的8个端口经后控制a、b、c、d、e、f、g、dp,相应的输入引脚置时,对应段亮。 93C46串行EEPROM 采用93C46串行EEPROM来保存刷卡机累计刷卡总额。其优势在于接口少, 容量满足设计需要。 一 93C46串行EEPROM的简要说明: 93C46是一种低功耗、低电压、电可擦除、可编程只读存储器,其容量为 1Kb,可重复写 100万次。 在本次设计中只需使用读,写指令。 1(管脚(DIP封装),如图 2.4 所示: 2(管脚说明: CS:片选信号。高电平有效,低电平时进入等待模式。在连续的指令之间,CS信号必须持续至少的低电平才能保证芯片正常工作。 SK:串行时钟信号。在SK的上升沿,操作码、地址和数据位进入器件或从器件输出。 DI:串行数据输入。可在SK的同步下输入开始位、操作码、地址位和数据位。 DO:串行数据输出。在SK同步下读周期时,用于输出数据。 VSS:接地。 VCC:接,5V电源。 ORG:存器构造配置端。该端接VCC或悬空时,输出为16位;接GND时,输出为8位。 NC:空脚,不连接。 二 93C46串行EEPROM的硬件连接: 如图 2.5 所示,P.2口与CS相连,控制片选信号;P2.1口与DI相连,串行数据输入;P2.7口与SK相连,写入时钟信号;P.3与DO口相连,串行数据输出;VSS接地;VCC接,5V电源;ORG接地,存储器为8位结构。 蜂鸣器电路 如图(2.6)所示,蜂鸣器的正极性的一端联接到5V电源上,另一端联接到 三极管的集电极,三极管的基级由单片机的P2.0管脚通过一个非门来控制,当P2.0管脚为低时,非门输出高电平,三极管导通,这样蜂鸣器的电流形成回路,发出声音。当P2.0管脚为高时,非门输出低电平,三极管截止,蜂鸣器不发出声音。这里采用非门是为了防止系统上电时峰鸣器发出声音,因为系统复位以后,I/O口输出的是高电平。 看门狗电路 看门狗电路采用DS1232芯片。 (一)DS1232芯片的简要说明: 引脚功能 如图 2.7 所示 : DS1232的功能: (1)电源电压监视: 当电源电压Vcc低于预置DS1232能够实时监测向单片机供电的电源电压。 值时,输出复位信号RST。预置值通过TOL来设定。当TOL接地时,RST信号在电源电压跌落至4.75V以下时产生;当TOL与Vcc相连时, 只有当Vcc跌落至4.5V以下时才产生RST信号。当电源恢复正常后,RST信号至少保持250ms,以保证单片机的正常复位。 (2)按键复位: DS1232提供了可直接连接复位按键的输入端PBRST,在该引脚上输入低电平信号,将在RST端输出至少250ms的复位信号。 (3)看门狗定时器: 在DS1232内部集成有看门狗定时器,当DS1232的ST端在设置的周期时间内没有有效信号到来时,DS1232的RST端将产生复位信号以强迫单片机复位,这一功能对于防止由于干扰等原因造成的单片机死机非常有效。可选用ALE信号作为周期性的输入信号。看门狗定时器的定时时间由DS1232 的TD引脚确定。 详见表 2.2 所示: TD引脚接至 定时时间最小值 定时时间典型值 定时时间最大值 地(GND) 62.5ms 150ms 250ms 浮空 250ms 600ms 1000ms 电源 Vcc 500ms 1200ms 2000ms (二)看门狗电路的硬件连接: 如图(2.8)所示,ST端与AT89C52单片机的ALE端相连;RST与AT89C52单片机的RST端相连;TD接地,定时时间最小值,典型值,最大值分别为62.5ms ,150ms ,250ms 。TOL接地,RST信号在电源电压跌落至4.75V以下时产生。PBRST用一个手动的触点式按键控制接地。按下按键,则手动复位。 读卡器电路 采用PHILIPS公司的MIFARE射频技术。读卡器电路则以MCM200为核心。 系统 一 MCM200模块引脚说明: 2.9 所示,各引脚的功能如下: 如图 D0―D7:8位双向数据总线; A0―A3:4位地址线; BP:后备电池输入端,用于保护MCM内部密码RAM; NPAUSE,:串行数据输出,用于驱动RF单元,该引脚必须连到RF单元的TP端。 NWR:写信号使能端; NRD:读信号使能端; NCS:该脚为低电平时选中MCM; KOMP,:RF的比较器输入端,使用时必须连到RF单元的RX端; NIRQ:MCU数据处理控制端。当该端为低时,MCU将用MCM状态寄存器中的内容来对MCM中的数据进行处理; ALE:地址锁存使能端; USEALE:选择从内部地址锁存器或A0―A3引脚取地址; DGND:数字电路接地端; DVDD:,5V电源端。 MODE:并行协议模式选择引脚,可用高电平驱动。 AVDD:,5V模拟电源输入引脚,用于RF射频单元; ANT,NANT:天线连接端。 二 MCM的硬件内核包括了如下几大部分接口电路: 1(与单片机的接口电路: MCM可由外部单片机发出特殊命令来启动运行。详见图 2.1 所示: 2(?RF模块接口电路 NPAUSE1与RF1模块的TP相连。 KOMP1与RF1模块的RX相连, 3(?与天线射频接口电路 引脚ANT和GND接口可直接与正极性天线相联接。 4(?与电源接口电路 与电源的接口包括这样几组信号: DVDD―数字电路正电源端(+5V); DGND―数字电路接地端(0V); BP―WOM缓冲器供电(通电工作时为+5V;不通电工作时为+3V ); RFVDD―RF电路正电源端(+5V); RFGN―RF电路接地端(0V); 三 读卡器电路原理图 如图 2.1 所示,NIRQ为数据处理端,当其为低时,引起外部中断0,转入中断服务子程序。P0口为地址/数据复用端,地址为4位。KOMP1与RF1模块的RX相连,NPAUSE1与RF1模块的TP相连。引脚ANT和GND接口直接与正极性天线相联接。AT89C52单片机的读,写信号分别与MCM200的读写信号相连,ALE信号也对应相连。 电源电路 电源电路原理图如下图 2.12 所示,电源电压为5V,7805为三端正稳压器: 第3章 系统的软件设计 3.1 系统软件设计思想 系统软件按各组成电路分模块编写,形成各具独立功能的子程序。主程序则对这些子程序进行调用,以实现功能。 3.2 系统软件各模块设计分析及程序流程图 主要分为主程序,中断服务子程序,显示程序,93C46串行EEPROM编程,蜂鸣器程序,读卡器程序几个部分来详细阐述。 主程序 分析:完整的程序要注意对系统进行初始化。由于将程序进行模块化编写,因此主程序的思路很清晰。有卡进入时,执行中断服务子程序,无卡时,蜂鸣器不响,显示器不亮。 程序流程图:如图(3.1)所示。 中断服务子程序 分析:当有卡进入读卡器的工作范围后,会引起外部中断0,执行中断服务子程序。中断服务子程序是十分重要的部分,其主要实现的功能是:读卡,正常情况下,卡内值减2,LED显示器中显示余额,蜂鸣器“嘟”一声;余额不足时, LED显示器中同样显示余额,蜂鸣器“嘟嘟嘟„„”,以示警报。 程序流程图:图 3. 所示。 显示程序 由于应用共阴极LED显示器,所以段码亮时字形驱动输出“1”有效,位选驱动输出“0”有效。因为采用8路三态反相驱动器74LS240作为字形驱动,6高压输出反相驱动器74LS06(一)显示程序一(DISPLAY_OFF) 实现功能:LED显示器上无显示。 分析:LED显示器中a、b、c、d、e、f、g、dp全不亮,各选通位关闭。 程序:DISPLAY_OFF:MOV A,#H MOV P1,A ;显示器各段不亮 CLR P2.4 CLR P2.5 CLR P2.6 ;选通位全部关闭 RET (二)显示程序二(DISPLAY_ERR) 实现功能:在第三位的LED显示器上显示出错标志E。 E的字码为H,选通第三位的LED显示器,关闭其余的LED显示器。 分析: 程序:DISPLAY_ERR:MOV A,#H E” MOV P1,A ;显示“ SETB P2.4 CLR P2.5 CLR P2.6 ;选通第三位,关闭其余选通位 RET (三)显示程序三(DISPLAY) 实现功能:将寄存器A中的数据值显示在LED显示器上。 分析:1(此显示器是作为显示刷卡机余额的,因此涉及的显示字符为0―9。 2(A中的数据格式是十六进制,因此要先将其转换为3位BCD码,百位储存在32H中,十位储存在31H中,个位储存在30H中。 3(采用动态方式即每一位的LED持续点亮10ms后,其他位的LED再点亮;为了提高显示亮度,需要在所有的LED都点亮一次后,再重新开始点亮各位LED,即显示刷新。显示总时间设置为4S计数器R1 100D。(3.1)显示字符 0 1 2 3 4 5 6 7 8 9 字型码 H F9H A4H B0H 99H 92H 82H F8H 80H 88H 程序流程图:图 3. 所示。 蜂鸣器程序 分析:可以通过程序控制P2.0管脚的置低和置高来使蜂鸣器发出声音和关 闭。 (一)蜂鸣器程序一 SPK_OFF 实现功能:蜂鸣器不响。 程序:SPK_OFF: SETB P2.0 RET (二)蜂鸣器程序二 SPK_ON1 实现功能:蜂鸣器响一声,持续时间一秒。 程序:SPK_ON1:CLR P2.0 ACALL DELAY1S SETB P2.0 RET (三)蜂鸣器程序三 SPK_ON2 实现功能:蜂鸣器响连续响十声,每声持续时间半秒,间隔时间半秒。 程序:SPK_ON2:MOV R1,#0AH ;重复次数为10 F2:CLR P2.0 ACALL DELAY500MS ;蜂鸣器响半秒 SETB P2.0 ACALL DELAY500MS ;蜂鸣器不响半秒 DJNZ R1,F2 RET 93C46串行EEPROM的读,写程序 读,写操作指令与时序图: 1(操作指令: 指令 开始位 操作码 地址(8位结构) Read 1 10 A6―A0 Write 1 01 A6―A0 2( 时序图: 1)读: (2)写: 如图 3. 所示在接收到一个读指令和地址(在时钟驱动下从DI 引脚输入) 输出一个虚拟的低电平然后数据根据时钟信号移位输出 高位在后, DO引脚先 前 。数据在时钟信号SK的上升沿时输出。在第一个数据移位输出以后只要保持 SK 继续触发,器件会自动将地址加 1 指向下一片选信号CS 不变和时钟信号 地址并且连续输出串行数据,器件会把地址不断的增加直到器件的末地址,然后地址回到 0。 如图 3. 所示,在接收到写指令地址和数据以后片选CS 在下降沿的时候器件开动自动时钟去擦除并把数据存放到指定存储器。因为器件有在写入前自动清除的特性,所以没有必要在写入之将存储器该地址的内容擦除。 (注:SK高电平最短时间, 低电平最短时间为0.1微秒;CS低电平最短时间为250纳秒) 分析:先编写发送子程序和接子程序。发送子程序:在SK时钟信号上升沿时发送一位数据,通过C发送,其中R5中为需要发送的数据,R7中为传送的数据个数。接收子程序:在SK时钟信号上升沿时接收一位数据,通过C接收,其中R7中为接收的数据个数。读(或写)程序可以通过设置R5,R7的值,然后调用发送子程序来向93C46串行EEPROM发送读(或写)指令和地址。读程序与写程序的不同在于:读程序在读数据时通过设置R7的值,调用接收子程序来完成读过程;写程序在写数据时通过设置R5,R7的值,调用发送子程序来完成写过 程 。读出的数据保存在单片机的60H中,写入的数据保存在93C46串行EEPROM的29H单元中。程序流程图: 读卡器程序 一 Mifare 1 非接触式IC智能 射频 卡1.Mifare 1非接触式IC智能射频卡功能组成(如图(3.)所示): 整个卡片包含了两个部分RF射频接口电路和数字电路部分。 (1)RF射频接口电路: 在RF射频接口电路中,主要包括有波形转换模块。它可将卡片读写器上的13.56MHZ的无线电调制频率接收,一方面送调制/解调模块,另一方面进行波形转换,将正弦波转换为方波,然后对其整流滤波,由电压调节模块对电压进行进一步的处理。 包括稳压等,最终输出供给卡片上的各电路。 (2)数字电路部分: 总共包含ATR模块,AntiCollision模块,Select Application模块,Authentication & Access Control 模块,控制及算术运算单元,RAM/ROM 单元,数据加密单元和EEPROM存储器及其接口电路八个部分。下面将详细介绍以下三个模块: a(ATR模块:Answer to Request 请求之应答 当一张Mifare 1卡片处在卡片读器的天线的工作范围之内时,控制读器向卡片发出REQUEST 或REQUEST 命令后,卡片的ATR将启动将卡片Block 0中的卡片类型(TagType)号共2个字节传送给读器,建立卡片与读器的第一步通信联络。如果不进行第一步的ATR工作,读器对卡片的其他操作将不会进行。 卡片的类型(Tagype)号共2个字节,可能为:0004H b(Select Application 模块:主要用于卡片的选择 当卡片与读器完成了上述步骤后,控制的读器要想对卡片进行读,写操作,则必须对卡片进行Select” 操作。以使卡片真正地被选中。被选中的卡片将卡 片上存储在Block 0中的卡片的容量字节传送给读器。当读器收到这一字节后,就可以明确对卡片进行一步的操作了。 读写器收到的 字节可能为:88c( Authentication & Access Control 模块:认证及存取控制模块 在确认已经选择了一张卡片时,程序员对卡片进行读写操作之前,必须对卡片上已经设置的密码进行认证,如果匹配,则允许进一步的Read/Write操作。Mifare 1卡片上有16个扇区,每个扇区都可分别设置各自的密码,互不干涉。 2.Mifare 1卡片的存储结构: ? Mifare 1卡片的存储容量为8192 BIT 1位字长(即1K 8位字长),采用EEPROM作为存储介质,整个结构划分为16个扇区,编为扇区0―15。每个 3. 所示: 扇区有4个块分别为块0块1块2和块3每个块有16个字节。如下图 块 0(厂商标志代码) 块 1 块 2 块 3(A密码+存取控制+B密码) Block 0 Block 1 Block 2 Block 3 A密码+存取控制+B密码) 。 。 。 。 。 。 。 。 Block 0 Block 1 Block 2 块 3(A密码+存取控制+B密码) 每个扇区的块3 即第四块 包含了该扇区的密码A 6个字节 、存取控制 4个字节 、密码B 6个字节 ,是一个特殊的块。其余三个块是一般的数据块。 但扇区0的块0是特殊的,是厂商代码,已固化,不可改写。 其中: 第0~4个字节为卡片的序列号,第5个字节为序列号的校验码; 第6个字节为卡片的容量SIZE”字节; 第7,8个字节为卡片的类型号字节,即Tagtype字节; 其他字节由厂商另加定义。 ?Mifare 1 卡片的扇区0中的块0(Block 0)存储的16个字节的内容可能 为:4207E00368804004481XXXXXXXXXX37H。 MCM读写模块的硬件内核寄存器描述 ?MCU是通过对MCM 内核特殊的内存寄存器的读写来控制MCM的。这些寄存 )的内部。共有16个寄存器可存取。在对器位于MCM中的ASIC(特殊应用IC MCM进行读/写操作时,各寄存器担负着不同的功能和作用,并且不是所有的寄存 即有些寄存器只能读而不能写有些则反之。?读取MCM一般器都是可写或可读的, 指向?Mifare 1卡请求。MCM实际上是MCU与非接触式IC智能 射频 卡之间信息 数据 交换的中间人。任何读取卡片上的数据或写进卡片上的数据均必须通过 MCM来传递。写MCM意味着去控制MCM,例如,送一些类型的指令给它。MCM中 ASIC内核特殊寄存器一览表。 地址 读(READ) 写(WRITE) DATA 00H 0 READ-BYTE WRITE-BYTE STACON 01H 1 DV TE PE CE BE AE -- -- SOR RFS -- -- 1 1 NRF AC ENABLE 02H 2 N/A 1 PR CE CR -- -- -- -- BCNTS 03H 3 N/A BIT-COUNT-SEND BCNTR 04H 4 N/A BIT-COUNT-RECEIVE BAUDRATE 05H 5 N/A -- -- -- -- 1 1 1 BR TOC 06H 6 N/A TIMEOUT-COUNTER MODE 07H 7 N/A 1 1 0 0 0 P2 P1 P0 P0 CRCDATA 08H 8 CRC-BYTE-READ CRC-BYTE-WRITE CRCSTACON 09H 9 CV -- -- -- -- -- -- CZ C8 -- -- -- -- -- -- CR KEYDATA 0AH 10 N/A KEY-BYTE-WRITE KEYSTACON 0BH 11 -- -- -- -- -- -- -- -- AL 0 -- -- -- -- KS1 KS0 KEYADDR 0CH 12 N/A AL AB A5 A4 A3 A2 A1 A0 ? 0DH 13 ? RCODE 0EH 14 N/A -- -- -- -- 0 0 RC1 RC0 ? 0FH 15 ? 下面将详细的介绍几种寄存器: a(DATA 寄存器,地址:00H 任何传递到MIFARE 1卡的数据或来自MIFRAE 1卡的数据都必须分别地被写入DATA寄存器或从DATA寄存器中读出。 例如MCU向卡片写数据Xi则Xi必须首先被写入到 DATA寄存器中然后MCM 卡片进行通信由卡片上的ASIC将DATA寄存器中的数据读取并存放与Mifare 1 在指定的卡片上的存储器中从而完成 MCU向MIFRAE 1卡片写数据的过程。 反之亦然。 DATA寄存器中有一个16 BYTE的FIFO(先进先出)队列寄存器。 数据写到DATA寄存器后被存放在这个16 BYTE的FIFO(先进先出)队列寄存器中, 等待向卡片上或MCU传送。 如要进行传送DATA寄存器中数据, 则首先必须先设定要传输多少位或多少字节 即必须对BCNTS寄存器进行有效的正确设置以确定有多少字节将要被传送。 当卡片上的数据流接收结束或没有被接收时STACON寄存器中的DV标志被置位。 如果设置了DV,则STACON寄存器中的出错位将被设置。如果没有相关的被设置,则FIFO寄存器中的数据将被假设为正确,可以被读出。 b( STACON 寄存器,地址:01H SATCON是STATUS CONTROL 状态控制 的缩写是一个状态控制寄存器。 将数据写到STACON寄存器中对MCM进行状态控制下表 3.4 : 位名 名称 功能 SOR Soft Reset (软复位) “0”表示无作用 “1” MCM,自动清一切 RFS RF-Select (RF选择) “0” RF单元0被选中激活 “1” RF单元1被选中激活 NRF NO RF (无RF) “0”将活动(激活)RF单元接上 “1”将活动(激活)RF单元关闭 AC Antiollision (防重叠) “0”无作用 “1”启动防重叠状态机 这里应该注意当写数据到STACON寄存器时(即对STACON寄存器进行设置),在写数据到STACON寄存器的这一写周期中,RFS位的设置必须与RF单元相互一致。 读取 STACON寄存器,将告诉我们一系列的MCM及卡片的当前状况信息。以下是读取STACON寄存器后的一系列标志位表。Bit Name 位名 Name名称 Function功能 DV Data Valid (数据有效) 卡上的数据传输到FIFO寄存器中 DV位也可以在正确的认证操作完成后而被设置。 TE Timeout Error (溢出出错) 一个定时记数器溢出发生。 PE Parity Error (奇/偶校验错) 在通讯时有奇/偶校验错 CE CRC Error CRC错 在通讯时有CRC错 BE Bitcount Error (位记数器出错) 在BCNTR寄存器中有大量的指定位没有收到。 AE Authentication (认证出错) 卡的认证应答码不正确或当执行一个取密码操作时指定的ROM KEY 只读存储器中密码 不正确。 在表中仅当DV位被设置有效时 即DV ,TE,PE,CE,BE及AE标志才有效。但有一例外,即当认证正确完成后,AE标志也直接有效。 当执行SOR后,所有的这些标志将被清除,且当对MCM的任何一个寄存器执行写周期时,所有的这些标志也将被清除。当对MCM内的任何一个寄存器执行写周期时所有的这些标志也将被清除仅当FIFO是空时DV标志将被写周期清除。 在MCU与MCMMCM与Mifare 1卡片进行数据通信时经常会出现各种错误。例如卡片没能认证通过则会使AE出错位置位等等。 (BCNTS寄存器,地址03H BCNTS是英文Bit-Counter-for-Sending的缩写意为传送时的位计数器 寄存器 。 这里的传送指的是CPU向MCM的DATA寄存器写数据。因此BCNTS寄 存器中写进的数据字存器实际上是一个字节发送控制器它控制了MCU向DATA寄 节数目。 例如设置BCTS 10H,则可向MCM的DATA寄存器写进的数据字节数目为2个 8位字长的数据因为总的数目 10H 16D 多余的数据,MCM将不予接收。 由于BCNTS寄存器是控制向DATA寄存器写数据的字节数目因此这一操作必须在数据写入DATA寄存器之前完成。 在大量的字节数据被写入DATA寄存器之后,MCM自动地与卡片进行通信。写入DATA寄存器的数量由BCNTS寄存器制定。 (BCNTR寄存器,04H BCNTR是英文Bit-Counter-for-Receiving的缩写意为接收时的位计数器。 与BCNTS寄存器相反BCNTR寄存器控制了MCU读取DATA寄存器的数据字节数目 例如设置BCNTR 20H则可向MCM的DATA寄存器读取的数据字节数目为4个 8位字长的数据因为总的数目 20H 32D 多余的数据MCM将不予理会。 由于BCNTR寄存器是控制向DATA寄存器读取数据的字节数目因此这一操作必须在读DATA寄存器之前完成。 BCNTR寄存器中的值将与实际接收到的数据字节相比较,如果有差别,则STACON寄存器中的BE标志被设置。 e(TOC 寄存器,地址06H TOC是Time Out Counter((定)时间溢出记数器)的缩写。 对TOC 寄存器的设置即对定时时间的控制。写数据至TOC 寄存器,可以控制定时溢出记数器。 如果用00 H写给TOC,即TOC 00 H ,则将关闭定时溢出记数器。TOC 寄存器中的值必须在MCM与MIFARE 1卡片通信时被设置 TOC寄存器常用的设置值为:0AH即定时1ms。 TO寄存器中的值 非零值 将在没有通信时,永久被递减。因此,在没有 寄存器中的值必须被设置,即设置TOC 0x00H 例通信时,或通信刚结束时TOC 如: 在FIFO中的数据有效时,就必须这样做。否则将影响STACON寄存器的TE出错标志。 如果有溢出出现,则TE标志被设置,DV标志被激活。 在完成写数据到DATA寄存器,定时溢出记数器应该经常被初始化。 4( MCM硬件初始化 为了与MIFARE 1卡通信,必须对MCM各硬件寄存器进行初始化设置。见表:寄存器 地址 初始化设置 16进制值 STACON 1 0x0C 0x4C ENABLE 2 0xC0 BAUDRATE 5 0x0E MODE 7 0xC6 RCODE 13 0x02 ()程序流程 在对Mifare 1卡片进行读,写操作之前要进行三个步骤:应答(Requst),选择 Select 与认证 Authentication 。因此在程序编写时,分为应答子程序,选择子程序,认证子程序。 1(应答子程序(Request): “Answer to Request” “Request”应答 指令: 指令Answer to Request Request的应答 指令代码(hex) 相关的出错标志 接收卡片上数据 Request std 26 TE,BE TAGTYPE Request all 52 R2 00H时,执行Request std操作; R2 01H时,执行Request all操作。 Request 指令将MCM在天线有效的工作范围(距离)内寻找MIFARE 1卡片。如果有MIFARE 1卡片存在,这一指令将分别与MIFARE 1进行通信,读取MIFARE 1卡片上的卡片类型号TAGTYPE(2个字节),由MCM传递给MCU,进行识别处理。 可以根据TAGTYPE来区别卡片的不同类型。 从一个指定的卡片开始,后续的卡片可以根据TAGTYPE而被选择。当使用 Request std”指令来寻卡时,只有那些卡片上没有被设置成HALT_MODE”(停机模式)的卡片将响应这一指令。 Request all指令是非连续性的读卡指令适用于那些需要有人工干预的场合。 Request std指令的使用和Request all指令刚巧相反,Request std指令是连续性的读卡指令适用于那些不需要有人工干预的场合,因此在本次程序中选用Request std指令 分析:除了要按表3.6中的要求对那5个寄存器进行初始化设置外,还要将BcntsBcntr寄存器进行设置。Bcnts表示可向MCM的DATA寄存器写进的数据字节数目,这里要写入的是Requst的指令代码26 H或52H,因此可以将Bcnts设置为07H;Bcntr表示从DATA寄存器中读取的数据的字节数目,在这里是读取卡片类型号TAGTYPE,为2个字节,那么Bcntr设置为10H;TOC 设置为0AH。另 外,还要判断R2的取值,然后执行相应的Request std或Request all操作。(注意:要进行出错判断,若出错,在LED显示器上显示“E”。当数据通信结束后,要将TOC设置为0,即关闭TOC,否则会出现TE错误。其他子程序也要注意这一点,后面将不予说明。) 程序流程图:见图(3.1)。 选择子程序(Select): “Select Tag” 选择卡片操作:指 令 指令代码(hex) 相关的出错标志 接收卡片上数据 Select Tag 选卡片 93 TE, BE, PE,CE S 在任何时候想实际地与已知序列号的卡片进行通信时,必须使用Select指令,以建立与所选卡的通信。 为了允许在Select指令以后对卡片能进行Read/Write等指令的操作,Select指令是很重要的,必须首先被使用。被选择的卡片将给出自己的存储器容量,已编码的一个字节。Select指令成功完成后,MCU将得到MCM的DATA寄存器传送来的一个字节长的卡片容量信息SIZE字节。SIZE字节被存储在Mifare 1卡片上的第00H扇区中的第00h?块(Block)中,共1个字节(8bits)。 分析:选择一张卡片通常由MCU向MCM200发送Select”命令来完成。MCU发送Select”命令后,会将M1卡片的40 长的序列号的前四个字节以及前四个字节的异或结果,同时再重新发送给 Mifare 1卡,只有本身的序列号和接收的序列号相同的卡片才被真正地选中。elect指令成功执行后,MCU将得到MCM 的DATA寄存器传来的一个字节长的卡片容量信息(SIZE字节)。SIZE字节被存储在MIFARE 1卡片上的第00H扇区中的第00H块中。 程序流程图:见图(3.1)。 3(认证子程序(Authentication): “Authentication” 认证操作: 指 令 Authentication 认证 指令代码(hex) 相关的出错标志 Auth_1a 60 TE, BE, PE,CE Auth_1b 61 在MCU将运算获得的数据,准备存储到卡片上的存储器之前或MCU希望能读取Mifare 1卡片上的数据之前,必须证明读/写请求操作是被允许的。 KEYSET)中的一组密这可以通过选择秘密地存储在MCM的RAM中的密码集( 码来进行认证而实现。如果这一组密码匹配与Mifare 1卡片上的密码,这一次的操作被允许进行。 卡片上的存储器的每一个block 128 都分别指定了该block的存取条件。这些存取条件是根据密码A或B(它们对整个扇区始终有效)而定。这样一来,不同的操作可能会被允许对一个中的4个不同blocks的每一个block进行操作。 MCM能够存储3个密码集KEYSET0,KEYSET1,KEYSET2。每一个KEYSET又包含了KEY A 及KEYB。 用户必须在KEYSTACON(0BH地址)寄存器中指定一套密码,即设置KS0, KS1。 KS1KS0 00 选择KEYSET0 KS1KS0 01 选择KEYSET1 KS1KS0 10 选择KEYSET2 KS1KS0 11 选择KEYSET3 KEYADDR寄存器(0C H地址)中的AB位用于选择KEYAKEYB。 AB “1” 选择KEYA AB “0” 选择KEYB KEYADDR寄存器 地址0C H 中的AB”设置必须匹配Authentication”命令(指令代码60和 61 )。否则,Authentication”命令将失败。 即在Authentication”命令中,60h代码用于认证KEYA;61h代码用于认证 KEYB。 当用60H代码时,在KEYADDR寄存器中只能设置AB 1用于选择KEYA; 当用61H代码时,在KEYADDR寄存器中只能设置AB 0用于选择KEYB; 当用60H代码时,在KEYADDR寄存器中不能设置AB 0否则认证命令将出错; 当用61H代码时,在KEYADDR寄存器中不能设置AB 1否则认证命令将出错; KS1和KS0的设置选择与上述的认证命令的指令代码60和61的选择无关; KS1和KS0的设置选择与上述的KEYADDR寄存器中AB的设置无关。 分析:Mifare 1卡的每个扇区的块3包含该扇区的密码A(6个字节)、存 、密码B(6个字节),它是一个特殊的块。在选择了一张卡片取控制 4个字节 后,在对卡片进行读写操作之前,还必须对卡片上已经设置的密码进行认证,如果匹配,则允许进一步的Read/Write操作。在这里,将选用密码集KEYSET0即KS1,KS0 00H;选择用KEYA即AB 1;则相应的指令代码就只能选用60H。在Authentication”指令发出之前,必须设置密码控制寄存器KEYSTACON,使AL,1。然后通过写Authentication”认证命令代码和写地址(Mifare 1卡要认证的扇区地址是015)到DATA寄存器,认证密码操作的模块便开始启动执行。认证成功后,可对刚刚认证通过的卡片上的这个扇区进行下一步Read/Write等操作。这里选用扇区。 程序流程图: 4(读子程序(MCM_Read): “Read” 读指令操作:指 令 指令代码(hex) 相关的出错标志 接收卡片上数据 Read 读 30 TE, BE, PE,CE Data Read 读 指令允许MCU通过MCM来读取MIFARE 1卡片上完整的16 个的数据块(Data blocks)。 只有在预先Authentication” 认证指令完成后,才允许进行对Mifare 1卡片上的某一数据扇区进行Read 读 指令操作。 Read 读 指令操作只能一个块(Block)一个块地读,即只能16个字节一次性地读取。如果只要求某Block中的几个字节的数据,也只能一个整块16个字节一起读取,由程序员选取指定的字节。 密码数据不能被读取。 分析:本次设计选用Block0,即用户信息都保存在扇区1中的Block0中。然后,设置Bctnr以确定从DATA寄存器中读取的数据的字节数目,这里为8位,1个字节则设置为08H;Bctns,设置为06H,因为指令代码为6位。发送读指令30H接着可从DATA中读出数据。 )。 程序流程图:图(3.1 5(写子程序 MCM_Write : Write” 写指令操作:指 令 指令代码(hex) 相关的出错标志“ Write 写 A0 TE, BE Write”写指令允许用户写数据到MIFARE卡片上(完整的16 个Bytes的数据块(Data blocks))。只有在 Authentication” 认证指令完成后,才允许进行对要求的数据扇区或数据块(Block)进行“Write“ 写指令操作。 分析:数据写入扇区1中的Block0中。设置Bcnts,以确定向MCM的DATA寄存器写进的数据字节数目,这里为8位,1个字节,则设置为08H。发送写指令A0H,接着从DATA将数据写入卡内。 程序流程图:图(3.1)。 6(停机子程序 Halt : “ Halt” 停机指令: 指 令 指令代码(hex) 相关的出错标志 Halt 停机 50 TE, BE ? “Halt”停机指令将MIFARE 1卡片设置为HALT MODE”。例如,卡片已经退出使用等。卡片将保持HALT MODE”状态,直到被复位。 分析:当卡片中的余额不足时,将卡片停机,停止其使用,直到被充值后,才撤消其停机状态。Bcnts设置为10H;Bctnr设置为04H。发送停机指令50H。系统的软件调试 本次毕业设计使用的调试软件是Medwin,是专为51单片机设计的集成开发系统软件。 .1 系统调试软件Medwin 用Medwin开发应用程序: Medwin集成开发环境提供了两种方式开发用户应用程序: 连接方式。 不使用的开发方式――对源程序文件直接进行汇编/ 使用项目管理的开发方式――可进行多模块,混合语言编程方式。 由于本次设计采用汇编语言进行编程,所以采用方式(1)。由于无仿真器,因此只可以查看程序运行过程中各个寄存器和数据区的变化。 步骤如下: (1)关闭当前项目文件。选择主菜单中的“项目管理\关闭当前项目”。 (2)在文件菜单下打开应用程序。选择主菜单中的“文件\新建...”或“文件\打开...”,以建立一个新的应用程序或打开一个已经存在的应用程序。打开应用程序后即可对其进行编辑或修改,编辑完后注意保存。 (3)编译\汇编。选择主菜单中的“项目管理\编译/汇编”。 Medwin集成开发环境将自动根据文件的扩展名选择调用相应的汇编器对源文件进行编译或汇编。 (4)错误信息关联。编译/汇编的结果会显示在图(.1)所示的窗口中。当编译/汇编发生错误时,消息窗口中的错误信息会自动与源文件关联,提示出错位置。 如果编译/汇编没有错误,可进入(5)操作。 如果编译/汇编出现错误,在修改源文件后重复进行(3)操作。 (5)调试应用程序。选择主菜单中的“调试\开始调试”。然后可以选择“单步”,观察程序在一步一步的运行过程中,各个寄存器和数据区的变化。 .2程序调试示例 将调试DISPLAY子程序中将A中的数转化为三位的BCD码的那部分程序。 如图(.1)所示。左边窗口里是所需调试的DISPLAY子程序。采用单步调试的方式,通过观察右边的寄存器窗口,查看每一步程序的正确性。由于DISPLAY子程序中所显示的数是存放在寄存器A中的,因此要想观测到结果,首先要设置A的值。在这里将A的值设置为69H,也就是105D。图(.1)中所示是程序执行到左边黄色箭头所指的位置,右边是寄存器窗口,可以看到寄存器A,B分别为01,05。继续单步调试并查看数据区,可以看到存放在32H,31H,30H中的数分别 ,00H,05H(如图(.2)所示),也就是说首先将A中的数转化为三位的为01H BCD码的那部分程序编写正确。 同样,可以采用类似的方法对其他的程序进行调试。 总 结 对于公交车射频卡刷卡机的设计涉及硬件系统设计和软件系统设计,工作量较大。由于时间的原因,还有一些细节部分没有考虑周全。但总体来说,本次毕业设计任务基本完成。 本次设计的重点和难点是读卡器的设计以及对应的程序编写。以前,对于射频卡没有任何了解。因此,这次对于射频卡的认识是从零开始的。读卡器的硬件连接相对于软件编程来说较容易。在软件编程过程中,由于缺少充分的软件程序示例,因此花了较长的时间。但通过对资料的仔细理解后,发现应答,选择,认证,读,写,停机等各部分子程序的编写都有许多相似之处,这一点可以从程序的流程图上看出。 硬件系统设计中也涉及了一些新的知识,如:看门狗电路,93C46串行EEPROM。以前,听说过看门狗电路,但对于它的用途,功能都不清楚。但现在, 了解到正如同它的名字一样,看门狗电路对于整个电路起到了监控作用,在掉电,死机等情况发生时会即时的复位。对于93C46串行EEPROM,我的印象很深刻。因为在编写它的软件程序时,采用了巧妙的方法,可以从流程图中看出。 在整个设计中,我感觉软件的系统设计难度较大。因为实现的功能较以往接触过的复杂些,而且需要考虑很多的细节。但通过采用模块化的设计思想,即对应于各个硬件电路来编写相应独立的子程序,明晰了设计的思路。 另外,通过这次设计又再次的熟悉了PROTEL软件和MEDWIN软件。尤其是MEDWIN软件,用其对于编写的部分程序进行了调试,查看了程序运行时相应的寄存器单元的内容,验证了所编程序的正确性。 这次的毕业设计不仅考察了书本上的理论知识而且还考察了分析问题、解决问题的能力、查阅资料的能力以及自学能力,收获颇多。以前学过的基础知识,头脑中只有理论的概念,很多知识虽然熟悉,但学得很抽象,在头脑中的印象也很模糊。而这次却不同,此次毕业设计综合了以前我们所学的知识。它要求我们既要高屋建瓴,从整体上把握设计的全局,又要心细如针,从局部上把握每一个细节;它既要求我们能综合运用以前所学的知识,又要求我们有自学本领,创新精神。 致 谢 电气信息工程系肖忠老师在本次毕业设计中为我们提出了很多宝贵的意见,付出了许多宝贵的时间对我们进行辅导,为我们作了许多准备工作,耐心指导,精心讲解,及时帮我们解决了许多设计中出现的问题。 在此,表示心的感谢 参考文献 [1]单片原理与应用技术,秦实虹编著,中国水利水电出版社 [2]单片微型计算机原理与接口技术,陈光东,赵性初,华中科技大学出版社 [3]MCS―51单片机应用设计,张毅刚等编著,哈尔滨工业大学出版社 [4]单片机实用系统设计技术,房小翠,王金凤编著,国防工业大学出版社 [5]沈宇超,沈树群. 射频识别技术及其发展现状. 电子技术应用,1999(1):4~5 [6]《无线射频识别技术 RFID 理论与应用》电子工业出版社 [7]《射频识别(RFID)技术(第二版)》电子工业出版社[8]单片机原理及应用,杨恢先等著, 国防科技大学出版社 [9]单片机原理及接口技术实践教程,胡健等著,机械工业出版社 [10]单片机微型计算机原理与接口技术,陈光东等著 , 华中科技大学出版社 单片机原理及接口技术,梅丽风等主编 ,北京交通大学出版社 [11] [12]单片机开发与典型应用设计,谢筑森编著,中国科学技术大学出版社[13]《电子技术基础》康华光主编高等教育出版社[14]数字电路技术基础,阎石,高教社 [15] 附:程序清单 ORG 0000H LJMP START ORG 0003H LJMP INTERRUPT ORG 0100H START: SETB EA SETB EX0 CLR EX1; CLR ES CLR ET1 CLR ET0;开全局中断,开外部中断0,关闭其余中断 MOV R2,00HSJMP $ LCALL SPK_OFF ;蜂鸣器不响 LCALL DISPLAY_OFF;无显示 END INTERRUPT: MOV A,#80H MOV R0,#01H MOVX @R0,A;对MCM进行软复位 LCALL REQUEST;调用应答子程序 LCALL SELECT;调用选择子程序 LCALL AUTHENTICATION;调用认证子程序 LCALL MCM_READ;调用MCM的读子程序 MOV A,50H;将读到的数送入A中 CA,#02H,D1 D1: JC D2 ;比较,若小于2就跳至DDEC A DEC A ;减2 LCALL MCM_WRITE;调用MCM的写子程序 LCALL SPK_ON1;蜂鸣器响一声 LCALL DISPLAY;显示 LCALL READ;调用93C49的读子程序 MOV B,60H;将读到内容存入B中 INC B INC B;加2 LCALL WRITE;调用93C49的写子程序 D: LCALL HALT ;调用停机子程序 LCALL SPK_ON2;蜂鸣器连续响 LCALL DISPLAY_OFF;无显示 IRET DISPLAY: MOV R0,#32H;地址指向32H MOV B,#64H;令B 100D DIV AB;得到百位数 MOV @R0,A;百位数存入32H中 DEC R0;地址指向31H MOV A,#0AH;令A 10D XCH A,B;A,B互换内容 DIV AB;得到十位数 MOV @R0,A ;十位数存入31H中 DEC R0;地址指向30H MOV @R0,B;个位数存入31H中 MOV R1,#64H;令计数值为100D F1: MOV DPTR,#TAB;地址指向字型码表首址 MOV A,32H;32H单元中内容送入A中 MOVC A,@A+DPTR;查表得字型码 MOV P1,A;字型码送P1口显示 SETB P2.6;选通第一位的LED显示器 CLR P2.5;关闭第二位的LED显示器 CLR P2.4;关闭第三位的LED显示器 ACALL DELAY10MS;调用10ms延时程序 MOV A,31H MOVC A,@A+DPTR MOV P1,A SETB P2.5 CLR P2.6 CLR P2.4 ;显示十位 ACALL DELAY10MS MOV A,30H MOVC A,@A+DPTR MOV P1,A SETB P2.4 CLR P2.5 CLR P2.6 ;显示个位 ACALL DELAY10MS DJNZ R1,F1 ;判断R1 0?若为0则继续执行,为1 则跳转至F1 RET TAB:DB C0H F9H A4H B0H 99H 92H 82H F8H 80H 90H DISPLAY_OFF:MOV A,#0FFH MOV P1,A ;显示器各段不亮 CLR P2.4 CLR P2.5 CLR P2.6 ;选通位全部关闭 RET DISPLAY_ERR:MOV A,#H MOV P1,A ;显示“E” SETB P2.4 CLR P2.5 CLR P2.6 ;选通第三位,关闭其余选通位 RET SPK_OFF:SETB P2.0 RET SPK_ON1:CLR P2.0 LCALL DELAY1S SETB P2.0 RET :MOV R1,#0AH ;重复次数为10 SPK_ON2 F:CLR P2.0 LCALL DELAY500MS ;蜂鸣器响半秒 SETB P2.0 CALL DELAY500MS ;蜂鸣器不响半秒 DJNZ R1,F RET SEND: CLR P2.7 SETB P3.4 ;CS 1 MOV A,R5 ;要传送的数据送入A中 SENDLOOP:RLC A ;高位送到A中 MOV P2.1,C ;传送至93C46 SETB P2.7 ;发脉冲 SJMP $+2 ;等待 CLR P2.7 DJNZ R7,SENDLOOP ;全部数据发送完后跳出 RET REC: SETB P2.7 ;发脉冲 SJMP $+2 ;等待 CLR P2.7 MOV C,P3.5 ;接收一位数据存至C中 RLC A ;将C中内容移至A 中低位 DJNZ R7,REC ;全部数据接收完后跳出 RET ITE: MOV R6,#29H ;写入93C46中得到地址 WR MOV R5,#0A0H ;发送写指令“101” MOV R7,#03H ;发送3个数据 ACALL SEND ;调用发送子程序 MOV A,R6 ;地址送入A中 RL A ;左移A 地址只有7位 MOV R5,A MOV R7,#07H ACALL SEND ;发送地址 MOV R5,B MOV R7,#08H ACALL SEND ;发送数据 CLR P3.4CS ;下降沿时自动擦除原数据并把数据存到指定 单元 SETB P3.4 EEP_READ: MOV R6,#29H ;需读出的数据在93C46中的地址 MOV R5,#0C0H MOV R7,#03H ACALL SEND ;发送读指令“110” MOV A,R6 RL A MOV R5,A MOV R7,#07H ACALL SEND ;发送地址 MOV R7,#08H ACALL REC ;接收数据 MOV 60H,A RET REQUEST: MOV A,#0CH ;设置A寄存器 0CH MOV R0,#01H ;STACON 寄存器地址为01H MOVX @R0,A ;将A寄存器内容送入STACON寄存器 MOV A,#0EH ;设置MCM中的BAUDRATE寄存器为:0EH MOV R0,#05H MOVX @R0,A MOV A,#0C0H ;设置MCM中的ENABLE寄存器为:0C0H MOV R0,#02H MOVX @R0,A MOV A,#0D6H ;设置MCM中的MODE寄存器为:0C6H MOV R0,#07H MOVX @R0,A MOV A,#02H ;设置MCM中的 RCODE寄存器为02H MOV R0,#0EH MOVX @R0,A MOV A,#07H ;设置MCM中的BNCTS寄存器为07H MOV R0,#03H MOVX @R0,A MOV A,#10H ;设置MCM中的BNCTR寄存器为10H MOV R0,#04H MOVX @R0,A JUDG1: MOV A,R2;根据R2值, 判断是执行Request std还是 Request all操作 XRL A,#01H JNZ RQT_STD RQT_ALL: MOV A,#52H ;送RQT_ALL的指令代码 AJMP _11_RQT_MCM RQT_STD: MOV A,#26H ;送RQT_STD的指令代码 MOV R0,#00H MOVX @R0,A ;送入DATA MOV A, #0AH MOV R0,#06H MOVX @R0,A ;TOC 0AH RQT_RD_STACON: MOV R0,#01H MOVX A,@R0 ;读STACON JUDG_DV:JNB ACC.7, RQT_RD_STACON; DV 1时,继续执行 MOV R7,A ;将STACON中的内容送入R7中保存 MOV A, #00H MOV R0,#06H MOVX @R0,A ;TOC 00H,关闭TOC MOV A,R7 ;将STACON中的内容送会A中 JUDG_ERR:JB ACC.6,DISPLAY_ERR;判断是否TE,若出错,显示E JB ACC.3, DISPLAY _ERR;判断是否BE,若出错,显示E MOV R0,#00H ;读TAGTYPE0 MOVX A,@R0 MOV 45H,A ;将TAGTYPE0值保存至45H MOV R0,#00H MOVX A,@R0 ;读TAGTYPE1 ? MOV 46H,A ;将TAGTYPE1值保存至46H RET SELECT: MOV A,#0CH ;设置A寄存器 0CH MOV R0,#01H ;STACON 寄存器地址为01H MOVX @R0,A ;将A寄存器内容送入STACON寄存器 MOV A,#0C0H ;设置MCM中的ENABLE寄存器为:0F0H MOV R0,#02H MOVX @R0,A MOV A,#38H MOV R0,#03H MOVX @R0,A ;设置BCNTS为56 D MOV A,#08H MOV R0,#04H MOVX @R0,A ;设置BCNTR为 08H ,接收SIZE MOV A,#93H MOV R0,#00H MOVX @R0,A ;发送选择指令93H MOV R7,#04H ;R7 表示写入DATA的字节数 MOV B,#00H MOV R0,#00H MOV R1,#40H ;序列号保存的地址首址 LOOP: MOV A,@R1 MOVX @R0,A XRL B,A INC R1 DJNZ R7, LOOP ;前四位进行与操作 MOV A,B MOVX @R0,A ;送第5位 MOV A,#0AH MOV R0,#06H MOVX @R0,A ;TOC 0AH MOV R0,#01H MOVX A,@R0 ;读STACON MOV B,A JNB ACC.7, SEL_RD_STACON; DV 1时,继续执行 MOV B,A MOV A,#00H MOV R0,#06H MOVX @R0,A ;TOC 00H,关闭TOC MOV A,B JB ACC.6, DISPLAY_ERR;判断是否TE,若出错,显示E JB ACC.5, DISPLAY_ERR;判断是否PE, 若出错,显示E JB ACC.3, DISPLAY_ERR;判断是否BE, 若出错,显示E JB ACC.4, DISPLAY_ERR;判断是否CE, 若出错,显示E MOV R0,#00H MOVX A, @R0 ;读SIZE MOV 44H,A ;将SIZE保存至44H RET AUTHENTIICATION: MOV A,#0CH ;设置A寄存器 0CH MOV R0,#01H ;STACON 寄存器地址为01H MOVX @R0,A ;将A寄存器内容送入STACON寄存器 MOV A,#0C0H ;设置MCM中的ENABLE寄存器为:0C0H MOV R0,#02H MOVX @R0,A MOV A,#80H MOV R0,#0BH MOVX @R0,A ;令KS1,KS0 00H ,AL,1 MOV A,#80H MOV R0,#0CH MOVX @R0,A ;选择扇区0进行认证,选择KEYA,AL 1 MOV A,#60H MOV R0,#00H MOVX @R0,A ;发送认证指令60H MOV A,#0AH MOV R0,#06H MOVX @R0,A ;TOC 0AH MOV R0,#01H MOVX A,@R0 ;读STACON MOV B,A ,继续执行 JNB ACC.7, SEL_RD_STACON; DV 1时 MOV B,A MOV A,#00H MOV R0,#06H MOVX @R0,A ;TOC 00H,关闭TOC MOV A,B JB ACC.6, DISPLAY_ERR;判断是否TE,若出错,显示E JB ACC.5, DISPLAY_ERR;判断是否PE, 若出错,显示E JB ACC.3, DISPLAY_ERR;判断是否BE, 若出错,显示E JB ACC.4, DISPLAY_ERR;判断是否CE, 若出错,显示EJB ACC.2, DISPLAY_ERR;判断是否E, 若出错,显示E RET MCM_READ: MOV A,#06H MOV R0,#03H MOVX @R0,A ;设置BCNTS MOV A,#08H MOV R0,#04H MOVX @R0,A ;设置BCNTR MOV A,#30H MOV R0,#00H MOVX @R0,A ;发送读指令30H MOV A,#0AH MOV R0,#06H MOVX @R0,A ;TOC 0AH READ_RD_STACON : MOV R0,#01H MOVX A,@R0 ;读STACON MOV B,A JNB ACC.7, READ_RD_STACON; DV 1时,继续执行 MOV B,A MOV A,#00H MOV R0,#06H MOVX @R0,A ;TOC 00H,关闭TOC MOV A,B JB ACC.6, DISPLAY_ERR;判断是否TE,若出错,显示E JB ACC.5, DISPLAY_ERR;判断是否PE, 若出错,显示E JB ACC.3, DISPLAY_ERR;判断是否BE, 若出错,显示E JB ACC.4, DISPLAY_ERR;判断是否CE, 若出错,显示E MOV R0,#00H MOVX A, @R0 MOV 50H,A ;读DATA中的数据保存至50H MOV R0,#00H MOVX A, @R0 MOV 50H,A ;读DATA中的数据保存至50H RET MCM_WRITE:MOV A,#08H MOV R0,#03H MOVX @R0,A ;设置BCNTS MOV A,#30H MOV R0,#00H MOVX @R0,A ;发送读指令A0H MOV A,#0AH MOV R0,#06H MOVX @R0,A ;TOC 0AH WR_RD_STACON: MOV R0,#01H MOVX A,@R0 ;读STACON MOV B,A JNB ACC.7, WR_RD_STACON; DV 1时,继续执行 MOV B,A MOV A,#00H MOV R0,#06H MOVX @R0,A ;TOC 00H,关闭TOC MOV A,B JB ACC.6, DISPLAY_ERR;判断是否TE,若出错,显示E JB ACC.3, DISPLAY_ERR;判断是否BE, 若出错,显示E MOV A ,50H MOV R0,#00H MOVX @R0, A ;将50H中的内容写入卡中 RET HALTMOV A,#10H MOV R0,#03H MOVX @R0,A ;设置BCNTS MOV A,#04H MOV R0,#04H MOVX @R0,A ;设置BCNTR MOV A,#50H MOV R0,#00H MOVX @R0,A ;发送读指令50H MOV A,#0AH MOV R0,#06H MOVX @R0,A ;TOC 0AH HALT_RD_STACON: MOV R0,#01H MOVX A,@R0 ;读STACON JNB ACC.7,HALT_RD_STACON MOV B,A MOV A,#00AH MOV R0,#06H MOVX @R0,A ;TOC 00H MOV A,B JB ACC.6,DISPLAY_ERR;判断是否TE,若出错,显示E JB ACC.3, DISPLAY _ERR;判断是否BE,若出错,显示E RET DELAY1MS: MOV R7,#18H TM: MOV R6,#0FFH TM1: DJNZ R6,TM1 DJNZ R7,TM RET DELAY500MS: MOV R5,#32H; ;R5 50D ACALL DELAY10MS DJNZ R5,DELAY500MS RET DELAY1S: MOV R4,#02H ACALL DELAY500MS DJNZ R4,DELAY1S RET 公交车射频卡刷卡机的设计 48 WR D0―D3/ A0―A3 A0―A3 NIRQ ALE LED显示器 存储器 蜂鸣器 读卡器 AT89C52 单片机 RD MCM 模块 单片机 N Y 结束 开始 ―1?R1,判断R1 0, R1 调用延时10ms子程序 A中内容送入P1口,并选通第三位 PBRST:按钮复位输入端 TD:看门狗定时器延时设置端 TOL:5%或10%电压监测选择端 RST:高电平有效复位输出端 ST:周期信号输入端 Vcc:电源 GND:接地 RST:低电平有效复位输出 据A中内容查表得字型码,并送入A中 30H单元内容送入A中中 调用延时10ms子程序 A中内容送入P1口,并选通第二位 据A中内容查表得字型码,并送入A中 31H单元内容送入A中中 调用延时10ms子程序 A中内容送入P1口,并选通第一位 据A中内容查表得字型码,并送入A中 32H单元内容送入A中中 R1 50D B中内容送入30H单元中,得到个位数 A中内容送入31H单元中,得到十位数 A中数据除以10,结果商在A中,余数在B中 B中内容送入A中 A中内容送入32H单元中,得到百位数 A中数据除以100,商在A中,余数在B中 图3.6 写子程序流程图 C?P2.1 N Y SK 0 等待 SK 1 左移A,将高位移至C中 R5?A CS 1 SK 0 开始 结束 CS 1 CS 0 令R7 08H,调用发送子程序(送数据) 令R7 07H,R6 29H调用发送子程序(送地址) 令R5 0A0H,R7 03H,调用发送子程序(送写指令) 开始 图3.7 读子程序流程图 结束 A? 60H 令R6 29H,R7 07H,调用发送子程序(送地址) 令R7 03H,调用接收子程序(送写指令) 令R5 0C0H,R7 03H,调用发送子程序(送读指令) 开始 R7―1?R7,判断是否为0, 结束 60H中的内容加2后送B N Y 结束 R7―1?R7,判断是否为0, 左移A,使C移至A中低位 P3.5?C SK 0 等待 SK 1 开始 RF-Interface 射频接口电路 RAM Crypto Unit Control & Arithm. Unit ROM ion & Authenticat Access Control Select Application Digital Section 数字电路部分 ATR AntiCollision POR 复位 EEPOR Modu./DeModu 调制/解调 电压调节 整流 波形转换 正弦 方波 Clock Data Energy MIFRE 1 S50 CARD IC 扇区15 扇区1 扇区0 图2.1 系统硬件设计框图 图2.2 系统硬件设计原理图 图2.3 显示电路原理图 图2.6 蜂鸣器电路 图2.5 93C46电路原理图 图2.8 看门狗电路原理图 图2.4 93C46管脚示意图 图2.7 DS1232引脚示意图 图2.9 MCM200电路原理图 图2.10 与单片机的接口电路框图 表2.2 TD引脚确定的定时时间 图2.11 读卡器电路原理图 图3.3 DISPLAY子程序 图3.4 读指令时序图 图3.5 写指令时序图 图3.8 发送子程序流程图 图3.9 接收子程序流程图 卡片天线 图3.10 Mifare 1非接触式IC智能射频卡功能组成 图 3.11 存储器结构图 表3.3 ASIC内核特殊寄存器一览表 表3.1 LED显示器字码表 表3.2 读,写指令表 表3.4 STACON寄存器 表3.5 STACON寄存器的标志位表 开始 表3.6 硬件寄存器初始化 表3.7 应答指令表 开始 开始 R2 00? RQT_STD指令 发送 发送 RQT_ALL指令 TOC 0AH 读 STACON DV 1? 关闭TOC TE,BE,PE,CE 1, 读Tagtype 调用DISPLAY_ERR子程序 结束 Y 调用DISPLAY_ERR子程序 N 图3.13 选择子程序流程图 N Y Y N 图3.12 应答子程序流程图 各寄存器初始化 各寄存器初始化 传送 Select指令 读4个字节的序列号值存入40H―43H 四个字节进行异或操作 结果送回Mifare卡 TOC 0AH 读 STACON DV 1? 关闭TOC TE,BE 1, 读Size 结束 N Y Y N 表3.8 选择指令表 表3.9 认证指令表 表3.10 密码集的选择 表3.11 密码的选择 寄存器初始化 设置KEYSTACON,令KS1,KS0 00H ,AL,1 设置KEYADDR,选用扇区1,选择KEYA 发送认证指令60H TOC 0AH 读SRACON DV 1, 关闭TOC ,PE,CE,BE,AE 1, TE 调用DISPLAY_ERR子程序 结束 N N Y Y 图3.14 认证子程序流程图 表3.12 读指令表 开始 寄存器初始化 选中Block,设置Bcnts Bcntr 发送读指令30H 从DATA中读出数据并保存 ,设置Bcnts 选中Block 图 3.15 MCM_Read子程序流程图 表3.14 停机指令表 表3.13 写指令表 TOC 0AH 图3.16 MCM_Write子程序流程图 从DATA中读出数据并保存 H 寄存器初始化 开始 调用DISPLAY_ERR子程序 ,BE 1, TE Y N DV 1, 读SRACON Y N DV 1, 读SRACON 关闭TOC TOC 0AH Y N Y N 结束 Y N 结束 调用DISPLAY_ERR子程序 TE,PE,CE,BE 1, 结束 调用DISPLAY_ERR子程序 TE,BE 1, Y N DV 1, 读SRACON 关闭TOC TOC 0AH 图 3.17 停机子程序流程图 调用子程序 H 寄存器初始化 开始 设置Bcnts 调用子程序 Y 图3.2 中断服务子程序流程图 调用DISPLAY子程序 调用SPK_ON子程序 卡内数据 结束 调用DISPLAY1子程序 调用SPK_ON2子程序 卡内数据 2? 调用R子程序 调用Select 子程序 调用Authentication子程 看门狗电路 D4―D7 P0.4―P0.7 ALE NWRR NRD 图2.12 电源电路原理图 Y 图3.1 主程序流程图 结束 调用DISPLAY1子程序 调用SPK_OFF子程序 调用中断服务子程序 是否有中断, 系统初始化 开始 图4.2 MEDWIN数据窗口 图 4.1 MEDWIN程序窗口与寄存器窗口 调用读子程序 调用停机子程序 P0.0―P0.3 P3.2 INT0 选中MCM,对MCM软复位 N 表2.1 8031与AT89C52的比较
/
本文档为【公交车射频卡刷卡机的设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索