为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

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

2017-09-01 50页 doc 309KB 24阅读

用户头像

is_105949

暂无简介

举报
公交车射频卡刷卡机的设计公交车射频卡刷卡机的设计 目 录 摘要 ................................................................................................................................. 2 Abstract ..........................................................................................................
公交车射频卡刷卡机的设计
公交车射频卡刷卡机的设计 目 录 摘要 ................................................................................................................................. 2 Abstract .......................................................................................................................... 3 第1章 绪论.................................................................................................................. 4 1.1 课题背景 ............................................................................................................. 4 1.2 设计意义与目的 ................................................................................................. 4 1.3 系统设计的总体要求 .......................................................................................... 4 1.4 系统设计的选择 .......................................................................................... 5 第2章 系统硬件设计 .................................................................................................. 6 2.1 系统硬件设计框图 ............................................................................................. 6 2.2 系统硬件设计原理图 .......................................................................................... 6 2.3 系统各电路详细设计 .......................................................................................... 7 2.3.1 单片机的选择与应用 ................................................................................. 7 2.3.2 显示电路 .................................................................................................... 8 2.3.3 93C46串行EEPROM ................................................................................. 8 2.3.4 蜂鸣器电路 ................................................................................................ 9 2.3.5 看门狗电路 .............................................................................................. 10 2.3.6 读卡器电路 .............................................................................................. 11 2.3.7 电源电路 .................................................................................................. 13 第3章 系统的软件设计 .............................................................................................. 14 3.1 系统软件设计框图 ........................................................................................... 14 3.2 系统软件各模块设计及程序图 ......................................................... 14 3.2.1 主程序 ...................................................................................................... 14 3.2.2 中断服务子程序 ....................................................................................... 15 3.2.3 显示程序 .................................................................................................. 15 3.2.4 蜂鸣器程序 .............................................................................................. 18 3.2.5 93C46串行EEPROM编程 ...................................................................... 18 3.2.6 读卡器程序 .............................................................................................. 21 第4章 系统的软件调试 ............................................................................................ 34 4.1 系统调试软件Medwin ..................................................................................... 34 4.2 程序调试示例 ................................................................................................... 34 总结 ............................................................................................................................. 36 致谢 ............................................................................................................................... 37 参考文献 ....................................................................................................................... 38 公交车射频卡刷卡机的设计 摘 要 随着城市规模的扩大~交通已经成为城市发展的一个重要因素。公交车射频卡可以提供更为方便、快捷的服务。 本文对公交车射频刷卡机的系统设计进行了研究。采用美国ATMEL公司的AT89C52单片机为控制核心~应用PHILIPS公司的MIFARE射频技术实现设计。本设计包含了系统的硬件设计与软件设计两个部分。硬件设计部分描述了所应用的各部分的硬件电路及其原理~主要有:显示电路~看门狗电路~93C46串行EEPROM~蜂鸣器电路以及读卡器电路,同时~给出了完整的系统硬件设计原理图。软件设计采用了汇编语言进行设计~运用模块化结构~并给出了各个模块的流程图~使程序设计的逻辑关系更加简洁明了,采用系统调试软件Medwin进行软件调试,另外~本文也给出了详细的程序清单。 关键词:公交卡~射频卡~单片机 1 公交车射频卡刷卡机的设计 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 2 公交车射频卡刷卡机的设计 第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~蜂鸣器电路以及读卡器电路。控制核心是单片机。系统软件按各组成电路分模块编写~形成各具独立功能的子程序~使硬件在软件的控制下协调运作。 3 公交车射频卡刷卡机的设计 1.4 系统设计的方案选择 (一) IC卡的选择 , 方案一:采用接触式IC卡实现设计 , 方案二:采用非接触式IC卡,射频卡,实现设计 分析:接触式的IC卡通过机械触点从读卡器获取能量和交换数据,非接触式IC卡通过线圈射频感应从读卡器获取能量和交换数据~所以又称射频卡。与接触式IC卡相比较非接触式卡,射频卡,更具有优势:可靠性高~非接触式IC卡,射频卡,与读写器之间无机械接触~避免了由于接触读写而产生的各种故障,由于非接触通讯~读卡器在10CM范围内就可以对卡片操作~所以不必插拨卡~非常方便用户使用,加密性能好~非接触式IC卡由IC芯片~ 感应天线组成~ 并完全密封在一个标准PVC卡片中~ 无外露部分。显然~射频卡在实际应用中更具优势。因此~在设计过程中采用射频卡,非接触式IC卡,~选取方案二。 ,二,用户信息的储存 , 方案一:将用户信息储存在公交卡内 , 方案二:将用户信息储存在公交刷卡机内 分析:公交刷卡机是应用于公交车上的~各车上的用户数据难以保持同步~除非无线通信~若采用方案二则使系统的复杂度提高,可靠性降低。同时基于其所臵空间及经济成本的考虑~应当尽量精简其设计。方案二中将用户信息储存在公交刷卡机内~由于在刷卡机内储存大量的用户信息而增加了刷卡机的成本。而采用方案一则不仅能实现功能~而且复杂度低~可靠性高~成本低。用户信息储存在公交卡内~刷卡时将用户信息读出~扣除车费后再将余额送回卡内即可。因此~选取方案一~将用户信息储存在公交卡内。 ,三,程序编写 , 方案一:用汇编语言编程实现编码程序 , 方案二:用C语言编程实现编码程序 单片机可以采用汇编语言和C语言进行编程。汇编语言是机器语言~指令的执行速度快~节省存储空间。在本次设计中~软件编程并不复杂~使用汇编语言较C语言更适合。因此~选取方案一~用汇编语言实现编码程序。 综上所述~公交车刷卡机将采用射频卡实现设计~将用户信息储存在公交卡内~用汇编语言编程实现编码程序。 本次设计的重点和难点在于读卡器的应用和单片机的系统设计。 4 公交车射频卡刷卡机的设计 第2章 系统硬件设计 2.1 系统硬件设计框图 硬件设计思想:单片机控制着读卡器电路读卡~蜂鸣器响~LED显示器显示余额~ 存储器保存营业总额。总之~单片机是整个系统的控制核心~使各电路按照设计总要 求有序的完成各自的功能。设计框图如图(2.1)所示: 存储器 读卡器 AT89C52 蜂鸣器 单片机 看门狗电路 LED显示器 图2.1 系统硬件设计框图 2.2 系统硬件设计原理图 图2.2 系统硬件设计原理图 5 公交车射频卡刷卡机的设计 系统硬件设计原理图如上图(2.2)所示。下面将对各个组成电路的设计进行详细说明。 2.3 系统各电路详细设计 系统硬件主要组成电路:显示电路~看门狗电路~93C46串行EEPROM~蜂鸣器电路以及读卡器电路。接下来~将逐一进行说明。 2.3.1 单片机的选择与应用 选择:单片机是整个系统的控制核心。在单片机的选取上采用美国ATMEL公司的AT89C52单片机~其以MCS-51为内核~并兼容了MCS-51的硬软件。表(2.1)将把AT89C52与我们熟悉的8031进行对比。 单片机 存储容量RAM 16位定时 中断源 最高晶振封装引 型号 及类型 (字节) 器个数 个数 频率脚个数 ,MHZ, 8031 无 ROM 128 2 5 12 40 AT89C52 8K 256 3 8 24 40 EEPROM 表2.1 8031与AT89C52的比较 之所以选取AT89C52~其主要原因在于:较8031而言~AT89C52带有可反复擦写的只读程序存储器~这样可以更方便编程。而8031则须外加存储器来存放程序。 应用: AT89C52单片机各端口在系统设计中的使用状况(如图,2.2,所示): 1( P1口控制了LED显示器的段码显示~P2.4~P2.5~P2.6控制了LED显示器的位选通端。 2( ALE/PROG:具有复位功能。第一~地址锁存允许,第二~对FLASH存储器进行编程时~从该引脚引入编程脉冲。 LE/PROG端与读卡器电路中的MCM200的ALE,地址锁存使能如图,2.2,所示~A 端,相连。同时~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,串行数据输入,,SK,时钟信号,,DO,串行数据输出,,CS,片选信号,端相连。 6 公交车射频卡刷卡机的设计 6( P0口:地址/数据复用端口。与读卡器电路中的MCM200的的数据端D0—D7相连,P0.0—P0.3同时也与地址端A0—A3相连。 7( P3.2(INT0)端与读卡器电路中的MCM200的的NIRQ端相连。当有卡进入时~引起中断。 8(AT89C52单片机的读~写信号分别与读卡器电路中的MCM200的读~写信号相连。 2.3.2 显示电路 如图(2.3)所示~采用共阴极 LED显示器~显示3位数,从左 至右依次为第一位、第二位、第 三位,~即刷卡机中显示余额的 百、十、个位。通过单片机 AT89C52的P2.4~P2.5~P2.6口 分别控制3个LED显示器的位 选端。P2.4~P2.5~P2.6口经过 一个6高压输出反相驱动器 74LS06,选用其中3个反相器, 连接到LED显示器。因此P2.4 ,或P2.5~P2.6,臵1时~相应 的LED显示器选中。共阴极LED 图2.3 显示电路原理图 显示器~即显示器的各发光二极管的阴极接在一起。P1的8个端口经一个8路三态反相驱动器74LS240后控制a、b、c、d、e、f、g、dp~则P1中相应的输入引脚臵0时~对应段亮。 2.3.3 93C46串行EEPROM 采用93C46串行EEPROM来保存刷卡机累计刷卡总额。其优势在于接口少~容量满足设计需要。93C46可以用来存放营业总额~方便查询。 (一)93C46串行EEPROM的简要说明: 93C46是一种低功耗、低电压、电可擦除、可编程只读存储器~其容量为 1Kb~可重复写 100万次。 在本次设计中只需使用读~写指令。 1(管脚,DIP封装,~如图(2.4)所示: 2(管脚说明: CS:片选信号。高电平有效~低电平时进入等待模式。 在连续的指令之间~CS信号必须持续至少250ns的低图2.4 93C46管脚示意图 7 公交车射频卡刷卡机的设计 电平才能保证芯片正常工作。 SK:串行时钟信号。在SK的上升沿~操作码、地址和数据位进入器件或从器件输出。 DI:串行数据输入。可在SK的同步下输入开始位、操作码、地址位和数据位。 DO:串行数据输出。在SK同步下读周期时~用于输出数据。 VSS:接地。 VCC:接,5V电源。 ORG:存储器构造配臵端。该端接VCC或悬空时~输出为16位,接GND时~输出为8位。 NC:空脚~不连接。 (二)93C46串行EEPROM的硬件连接: 如图(2.5)所示~P2.2口与CS相 连~控制片选信号,P2.1口与DI相 连~串行数据输入,P2.7口与SK相 连~写入时钟信号,P2.3与DO口相 连~串行数据输出,VSS接地,VCC 接,5V电源,ORG接地~存储器为 8位结构。 图2.5 93C46电路原理图 2.3.4 蜂鸣器电路 如图,2.6,所示~蜂鸣器的正 极性的一端联接到5V电源上~另 一端联接到三极管的集电极~三极 管的基级由单片机的P2.0管脚通 过一个非门来控制~当P2.0管脚为 低时~非门输出高电平~三极管导 通~这样蜂鸣器的电流形成回路~ 发出声音。当P2.0管脚为高时~非 门输出低电平~三极管截止~蜂鸣 器不发出声音。这里采用非门是为 了防止系统上电时峰鸣器发出声 音~因为系统复位以后~I/O口输图2.6 蜂鸣器电路原理图 出的是高电平。 8 公交车射频卡刷卡机的设计 2.3.5 看门狗电路 看门狗电路采用DS1232芯片。 ,一,DS1232芯片的简要说明: 1(引脚功能(如图(2.7)所示): PBRST:按钮复位输入端 TD:看门狗定时器延时设置端 TOL:5%或10%电压监测选择端 RST:高电平有效复位输出端 ST:周期信号输入端 Vcc:电源 图2.7 DS1232引脚示意图 GND:接地 RST:低电平有效复位输出 2(DS1232的功能: ,1,电源电压监视: DS1232能够实时监测向单片机供电的电源电压。 当电源电压Vcc低于预臵值时~输出复位信号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.2 TD引脚确定的定时时间 9 公交车射频卡刷卡机的设计 ,二,看门狗电路的硬件连接: 如图,2.8,所示~ST端与AT89C52 单片机的ALE端相连,RST与AT89C52 单片机的RST端相连,TD接地~定时 时间最小值~典型值~最大值分别为 62.5ms ~150ms ~250ms 。TOL接地~ RST信号在电源电压跌落至4.75V以下 时产生。PBRST用一个手动的触点式按 键控制接地。按下按键~则手动复位。 图2.8 看门狗电路原理图 2.3.6 读卡器电路 系统采用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:选择从内部地址锁存器或图2.9 MCM200电路原理图 A0—A3引脚取地址, DGND:数字电路接地端, DVDD:,5V电源端。 MODE:并行协议模式选择引脚~可用高电平驱动。 10 公交车射频卡刷卡机的设计 AVDD:,5V模拟电源输入引脚~用于RF射频单元, ANT~NANT:天线连接端。 (二)MCM的硬件内核包括了如下几大部分接口电路: 1(与单片机的接口电路: MCM可由外部单片机发出特殊命令来启动运行。详见图(2.10)所示: RD NRD WR NWR MCM R 模块 ALE 单片机 ALE NIRQ P3.2(INT0) P0.4—P0.7 D4—D7 P0.0—P0.3 D0—D3/ A0—A3 A0—A3 图2.10 与单片机的接口电路框图 2( RF模块接口电路 KOMP1与RF1模块的RX相连~NPAUSE1与RF1模块的TP相连。 3( 与天线射频接口电路 引脚ANT和GND接口可直接与正极性天线相联接。 4( 与电源接口电路 与电源的接口包括这样几组信号: DVDD—数字电路正电源端,+5V,, DGND—数字电路接地端,0V,, BP—WOM缓冲器供电,通电工作时为+5V,不通电工作时为+3V ,, RFVDD—RF电路正电源端,+5V,, RFGN—RF电路接地端,0V,, 11 公交车射频卡刷卡机的设计 (三)读卡器电路原理图 图2.11 读卡器电路原理图 如图(2.11)所示~NIRQ为数据处理端~当其为低时~引起外部中断0~转入中断服务子程序。P0口为地址/数据复用端~地址为4位。KOMP1与RF1模块的RX相连~NPAUSE1与RF1模块的TP相连。引脚ANT和GND接口直接与正极性天线相联接。AT89C52单片机的读~写信号分别与MCM200的读写信号相连~ALE信号也对应相连。 2.3.7 电源电路 电源电路原理图如下图(2.12)所示~电源电压为5V~7805为三端正稳压器: 图2.12 电源电路原理图 12 公交车射频卡刷卡机的设计 第3章 系统的软件设计 3.1 系统软件设计思想 系统软件按各组成电路分模块编写~形成各具独立功能的子程序。主程序则对这些子程序进行调用~以实现功能。当产生中断时~则执行中断服务子程序。此次由于是刷卡机的设计~而且是在有卡进入时引起外部中断0。因此~程序的主要部分都在中断服务子程序中~主程序较简单。读卡器程序涉及到应答~选择~认证~读~写~停机等几个部分~较复杂~是整个程序设计的难点。 3.2 系统软件各模块设计分析及程序流程图 主要分为主程序~中断服务子程序~显示程序~93C46串行EEPROM编程~蜂鸣器程序~读卡器程序几个部分来详细阐述。 3.2.1 主程序 分析:完整的程序要注意对系统进行初始化。由于将程序进行模块化编写~因此主程序的思路很清晰。有卡进入时~执行中断服务子程序~无卡时~蜂鸣器不响~显示器不亮。 程序流程图:如图,3.1,所示。 开始 系统初始化 Y N 是否有中断, 调用中断服务子程序 调用SPK_OFF子程序 调用DISPLAY1子程序 结束 图3.1 主程序流程图 13 公交车射频卡刷卡机的设计 3.2.2 中断服务子程序 分析:当有卡进入读卡器的工作范围后~会引起外部中断0~执行中断服务子程序。中断服务子程序是十分重要的部分~其主要实现的功能是:读卡~正常情况下~卡内值减2~LED显示器中显示余额~蜂鸣器“嘟”一声~将93C46中的值读出加2后再写入保存,余额不足时~ LED显示器中同样显示余额~蜂鸣器“嘟嘟嘟……”~以示警报。 程序流程图:如图(3.2)所示。 开始 选中MCM,对MCM软复位 调用Request子程序 调用Select 子程序 调用Authentication子程序 调用读子程序 Y N 卡内数据>2? 卡内数据减2 调用停机子程序 调用写子程序 调用SPK_ON2子程序 调用SPK_ON1子程序 调用DISPLAY1子程序 调用DISPLAY2子程序 调用EEP_READ子程序 60H中的内容加2后送B 调用EEP_WRITE子程序 结束 图3.2 中断服务子程序流程图 3.2.3 显示程序 由于应用共阴极LED显示器~所以段码亮时字形驱动输出“1”有效~位选驱动输出“0”有效。因为采用8路三态反相驱动器74LS240作为字形驱动~6高压输出 14 公交车射频卡刷卡机的设计 反相驱动器74LS06作为位选驱动,则对于单片机而言~字形码输出“0”有效~位选扫描电平 “1”有效。字形表TAB中的有效字形码应与共阳极的LED的字形码相同。 ,一,显示程序一,DISPLAY_OFF, 实现功能:LED显示器上无显示。 分析:LED显示器中a、b、c、d、e、f、g、dp全不亮~各选通位关闭。 程序:DISPLAY_OFF:MOV A,#0FFH MOV P1,A ,显示器各段不亮 CLR P2.4 CLR P2.5 CLR P2.6 ,选通位全部关闭 RET ,二,显示程序二,DISPLAY_ERR, 实现功能:在第三位的LED显示器上显示出错标志E。 分析:E的字形码为86H~选通第三位的LED显示器~关闭其余的LED显示器。 程序:DISPLAY_ERR:MOV A,#86H MOV P1,A ,显示“E” 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 字型码 C0H F9H A4H B0H 99H 92H 82H F8H 80H 88H 表3.1 LED显示器字形码表 程序流程图:如图(3.3)所示。 15 公交车射频卡刷卡机的设计 开始 A中数据除以100,商在A中,余数在B中 A中内容送入32H单元中,得到百位数 B中内容送入A中 A中数据除以10,结果商在A中,余数在B中 A中内容送入31H单元中,得到十位数 B中内容送入30H单元中,得到个位数 R1=50D 32H单元内容送入A中中 据A中内容查表得字型码,并送入A中 A中内容送入P1口,并选通第一位 调用延时10ms子程序 31H单元内容送入A中中 据A中内容查表得字型码,并送入A中 A中内容送入P1口,并选通第二位 调用延时10ms子程序 30H单元内容送入A中中 据A中内容查表得字型码,并送入A中 A中内容送入P1口,并选通第三位 调用延时10ms子程序 N R1—1?R1,判断R1=0, Y 结束 图3.3 DISPLAY子程序 16 公交车射频卡刷卡机的设计 3.2.4 蜂鸣器程序 分析:可以通过程序控制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 3.2.5 93C46串行EEPROM的读~写程序 读~写操作指令与时序图: 1(操作指令: 指令 开始位 操作码 地址,8位结构, Read 1 10 A6—A0 Write 1 01 A6—A0 表3.2 读,写指令表 2( 时序图: ,1,读: 图3.4 读指令时序图 17 公交车射频卡刷卡机的设计 ,2,写: 图3.5 写指令时序图 如图(3.4)所示~在接收到一个读指令和地址,在时钟驱动下从DI 引脚输入,后~ DO引脚先输出一个虚拟的低电平~然后数据根据时钟信号移位输出(高位在前)。数据在时钟信号SK的上升沿时输出。在第一个数据移位输出以后只要保持片选信号CS 不变和时钟信号 SK 继续触发~器件会自动将地址加 1 指向下一地址并且连续输出串行数据~器件会把地址不断的增加直到器件的末地址~然后地址回到 0。 如图(3.5)所示~在接收到写指令地址和数据以后~片选信号CS 在下降沿的时候器件开动自动时钟去擦除并把数据存放到指定存储器。因为器件有在写入前自动清除的特性~所以没有必要在写入之前将存储器内该地址的内容擦除。 ,注:SK高电平最短时间, 低电平最短时间为0.1微秒,CS低电平最短时间为250纳秒, 开始 开始 令R5=0A0H,R7=03H,调用发令R5=0C0H,R7=03H,调用发 送子程序(送写指令) 送子程序(送读指令) 令R7=07H,R6=29H调用发令R6=29H,R7=07H,调用发 送子程序(送地址) 送子程序(送地址) 令R7=08H,调用发送子令R7=03H,调用接收子程序 程序(送数据) (送写指令) CS=0 A?(60H) CS=1 结束 结束 图3.7 读子程序流程图 图3.6 写子程序流程图 18 公交车射频卡刷卡机的设计 开始 开始 SK=0 SK=1 CS=1 R5?A 等待 左移A,将高位移至C中 SK=0 C?P2.1 P3.5?C SK=1 左移A,使C移至等待 A中低位 SK=0 N R7—1?R7,判断N R7—1?R7,判断 是否为0, 是否为0, Y Y 结束 结束 图3.9 接收子程序流程图 图3.8 发送子程序流程 图 分析:先编写发送子程序和接收子程序。发送子程序:在SK时钟信号上升沿时发送一位数据~通过位寄存器C发送~其中R5中为需要发送的数据~R7中为传送的数据个数。接收子程序:在SK时钟信号上升沿时接收一位数据~通过位寄存器C接收~其中R7中为接收的数据个数。读,或写,程序可以通过设臵R5~R7的值~然后调用发送子程序来向93C46串行EEPROM发送读,或写,指令和地址。读程序与写程序的不同在于:读程序在读数据时通过设臵R7的值~调用接收子程序来完成读过程,写程序在写数据时通过设臵R5~R7的值~调用发送子程序来完成写过程 。读出的数据保存在单片机的60H中~写入的数据保存在93C46串行EEPROM的29H单元中。 程序流程图:如图,3.6,~图,3.7,~图,3.8,~图,3.9,所示。 19 公交车射频卡刷卡机的设计 3.2.6 读卡器程序 (一)Mifare 1 非接触式IC智能(射频)卡说明 1.Mifare 1非接触式IC智能射频卡功能组成,如图,3.10,所示,: 整个卡片包含了两个部分:RF射频接口电路和数字电路部分。 ,1,RF射频接口电路: 在RF射频接口电路中~主要包括有波形转换模块。它可将卡片读写器上的13.56MHZ的无线电调制频率接收~一方面送调制/解调模块~另一方面进行波形转换~将正弦波转换为方波~然后对其整流滤波~由电压调节模块对电压进行进一步的处理。 MIFRE 1 S50 CARD IC RF-Interface 射频接口电路 Digital Section 数字电路部分 波形转换 Control & ATR Clock 正弦=>方波 Arithm. Unit Data 卡AntiCollision Modu./DeModu 整RAM 片 调制/解调 天流 ROM Select Application 包括稳压等~最终输出供给卡片上的各电路。 线 POR (复位) 电压调节 Authentication & Crypto Unit EEPOR Access Control Energy 图3.10 Mifare 1非接触式IC智能射频卡功能组成图 ,2,数字电路部分: 总共包含ATR模块~AntiCollision模块~Select Application模块~Authentication & Access Control 模块~控制及算术运算单元~RAM/ROM 单元~数据加密单元和 EEPROM存储器及其接口电路八个部分。下面将详细介绍以下三个模块: a(ATR模块:Answer to Request(“请求之应答”) 当一张Mifare 1卡片处在卡片读卡器的天线的工作范围之内时~控制读卡器向卡片发出REQUEST ALL (或REQUEST STD) 命令后~卡片的ATR将启动~将卡片Block 0中的卡片类型,TagType,号共2个字节传送给读卡器~建立卡片与读卡器的第一步通信联络。如果不进行第一步的ATR工作~读卡器对卡片的其他操作将不会进行。 卡片的类型,Tagtype,号共2个字节~可能为:0004H b(Select Application 模块:主要用于卡片的选择 当卡片与读卡器完成了上述步骤后~控制的读卡器要想对卡片进行读~写操作~则必须对卡片进行“Select” 操作。以使卡片真正地被选中。被选中的卡片将卡片上存储在Block 0中的卡片的容量“SIZE”字节传送给读卡器。当读卡器收到这一字节 20 公交车射频卡刷卡机的设计 后~就可以明确对卡片进行进一步的操作了。 读写器收到的“SIZE” 字节可能为:88H c( Authentication & Access Control 模块:认证及存取控制模块 在确认已经选择了一张卡片时~程序员对卡片进行读写操作之前~必须对卡片上已经设臵的密码进行认证~如果匹配~则允许进一步的Read/Write操作。Mifare 1卡 片上有16个扇区~每个扇区都可分别设臵各自的密码~互不干涉。 2.Mifare 1卡片的存储结构: Mifare 1卡片的存储容量为8192 BIT * 1位字长,即1K *8位字长,~采用EEPROM 作为存储介质~整个结构划分为16个扇区~编为扇区0—15。每个扇区有4个块~分 别为块0~块1~块2和块3~每个块有16个字节。如下图(3.11)所示: 扇 区 块 0,厂商标志代码, 0 块 1 块 2 块 3,A密码+存取控制+B密码, 扇 区 Block 0 1 Block 1 Block 2 Block 3(A密码+存取控制+B密码, 。 。 。 。 。 。 。 扇 区。 15 Block 0 Block 1 Block 2 块 3,A密码+存取控制+B密码, 图 3.11 存储器结构图 每个扇区的块3(即第四块) 包含了该扇区的密码A(6个字节)、存取控制(4个字 21 公交车射频卡刷卡机的设计 节)、密码B(6个字节)~是一个特殊的块。其余三个块是一般的数据块。 但扇区0的块0是特殊的~是厂商代码~已固化~不可改写。 其中: 第0~4个字节为卡片的序列号~第5个字节为序列号的校验码, 第6个字节为卡片的容量“SIZE”字节, 第7~8个字节为卡片的类型号字节~即Tagtype字节, 其他字节由厂商另加定义。 Mifare 1 卡片的扇区0中的块0,Block 0,存储的16个字节的内容可能为:420A7E00368804004481740630373937H。 ,二,MCM读写模块的硬件内核寄存器描述 MCU是通过对MCM 内核特殊的内存寄存器的读写来控制MCM的。这些寄存器位于MCM中的ASIC,特殊应用IC,的内部。共有16个寄存器可存取。在对MCM进行读/写操作时~各寄存器担负着不同的功能和作用,并且不是所有的寄存器都是可写或可读的,即有些寄存器只能读而不能写~有些则反之。 读取MCM~一般是指向 Mifare 1卡请求。MCM实际上是MCU与非接触式IC智能(射频)卡之间信息(数据)交换的“中间人”。任何读取卡片上的数据或写进卡片上的数据均必须通过MCM来传递。写MCM意味着去控制MCM~例如~送一些类型的指令给它。MCM中ASIC内核特殊寄存器一览表如表,3.3,所示。 寄存器名 地址 读,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 表3.3 ASIC内核特殊寄存器一览表 22 公交车射频卡刷卡机的设计 下面将详细的介绍几种寄存器: a(DATA 寄存器~地址:00H 任何传递到MIFARE 1卡的数据或来自MIFRAE 1卡的数据都必须分别地被写入DATA寄存器或从DATA寄存器中读出。 例如~MCU向卡片写数据Xi~则Xi必须首先被写入到 DATA寄存器中~然后MCM与Mifare 1 卡片进行通信~由卡片上的ASIC将DATA寄存器中的数据读取并存放在指定的卡片上的存储器中~从而完成 MCU向MIFRAE 1卡片写数据的过程。 反之亦然。 DATA寄存器中有一个16 BYTE的FIFO,先进先出,队列寄存器。 数据写到DATA寄存器后~被存放在这个16 BYTE的FIFO,先进先出,队列寄存器中, 等待向卡片上或MCU传送。 如要进行传送DATA寄存器中数据, 则首先必须先设定要传输多少位或多少字节~ 即必须对BCNTS寄存器进行有效的正确设臵~以确定有多少字节将要被传送。 当卡片上的数据流接收结束或没有被接收时~STACON寄存器中的DV标志被臵位“1”。 如果设臵了DV~则STACON寄存器中的出错位将被设臵。如果没有相关的出错位被设臵~则FIFO寄存器中的数据将被假设为正确~则可以被读出。 b( STACON 寄存器~地址:01H SATCON是STATUS CONTROL (状态控制)的缩写~是一个状态控制寄存器。 通过将数据写到STACON寄存器中来对MCM进行状态控制。 详见下表(3.4)所示: 位名 名称 功能 Soft Reset “0”表示无作用 SOR ,软复位, “1” 复位MCM~自动的清除一切 RF-Select “0” RF单元0被选中激活 RFS ,RF选择, “1” RF单元1被选中激活 NO RF “0”将活动,激活,RF单元接上 NRF ,无RF, “1”将活动,激活,RF单元关闭 Anticollision “0”无作用 AC ,防重叠, “1”启动防重叠状态机 表3.4 STACON寄存器中的位功能表 这里~应该注意~当写数据到STACON寄存器时,即对STACON寄存器进行设臵,~在写数据到STACON寄存器的这一写周期中~RFS位的设臵必须与RF单元相互一致。 读取 STACON寄存器~将告诉我们一系列的MCM及卡片的当前状况信息。以下 23 公交车射频卡刷卡机的设计 是读取STACON寄存器后的一系列标志位表。 Bit Name 位名 Name名称 Function功能 卡上的数据传输到FIFO寄存 Data Valid 器中 DV ,数据有效, DV位也可以在正确的认证操 作完成后而被设臵。 Timeout Error TE 一个定时记数器溢出发生。 ,溢出出错, Parity Error PE 在通讯时有奇/偶校验错 ,奇/偶校验错, CRC Error CE 在通讯时有CRC错 (CRC错) Bitcount Error 在BCNTR寄存器中有大量的BE ,位记数器出错, 指定位没有收到。 卡的认证应答码不正确或当Authentication AE 执行一个取密码操作时指定,认证出错, 的ROM KEY(只读存储器中 的密码)不正确。 表3.5 STACON寄存器中的标志位表 在表,3.5,中~仅当DV位被设臵有效时(即DV=“1”) ~TE~PE~CE~BE及AE标志才有效。但有一例外~即当认证正确完成后~AE标志也直接有效。 当执行SOR后~所有的这些标志将被清除~且当对MCM的任何一个寄存器执行写周期时~所有的这些标志也将被清除。 当对MCM内的任何一个寄存器执行写周期时~所有的这些标志也将被清除,仅当FIFO是空时~DV标志将被写周期清除。 在MCU与MCM~MCM与Mifare 1卡片进行数据通信时~经常会出现各种错误。例如~卡片没能认证通过~则会使AE出错位臵位~等等。 c(BCNTS寄存器~地址:03H BCNTS是英文Bit-Counter-for-Sending的缩写~意为传送时的位计数器(寄存器)。 这里的传送指的是CPU向MCM的DATA寄存器写数据。因此BCNTS寄存器实际上是一个字节发送控制器~它控制了MCU向DATA寄存器中写进的数据字节数目。 例如~设臵BCNTS=10H~则可向MCM的DATA寄存器写进的数据字节数目为2个(8位字长的数据~因为总的位数目=10H=16D)~多余的数据,MCM将不予接收。 24 公交车射频卡刷卡机的设计 由于BCNTS寄存器是控制向DATA寄存器写数据的字节数目~因此这一操作必须在数据写入DATA寄存器之前完成。 在大量的字节数据被写入DATA寄存器之后~MCM自动地与卡片进行通信。写入DATA寄存器的位数量由BCNTS寄存器制定。 d(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。 TOC寄存器中的值 (非零值) 将在没有通信时~永久的被递减。因此~在没有通信时~或通信刚结束时~TOC 寄存器中的值必须被设臵~即设臵TOC = 0x00H。 例如: 在FIFO中的数据有效时~就必须这样做。否则将影响STACON寄存器的TE出错标志。 如果有溢出出现~则TE标志被设臵~DV标志被激活。 在完成写数据到DATA寄存器~定时溢出记数器应该经常被初始化。 4( MCM硬件初始化 为了与MIFARE 1卡通信~必须对MCM各硬件寄存器进行初始化设臵。 详见表(3.6)所示: 25 公交车射频卡刷卡机的设计 寄存器 地址 初始化设臵(16进制值) 0x0C STACON 1 0x4C ENABLE 2 0xC0 BAUDRATE 5 0x0E MODE 7 0xC6 RCODE 13 0x02 表3.6 硬件寄存器初始化表 ,三,程序流程 在对Mifare 1卡片进行读~写操作之前要进行三个步骤:应答,Requst,~选择(Select)与认证(Authentication)。因此在程序编写时~分为应答子程序~选择子程序~认证子程序~读子程序~写子程序~停机子程序。 1(应答子程序,Request,: “Answer to Request” (“Request”应答)指令: 指令Answer to 指令代码,hex, 相关的出错标志 接收卡片上数据 Request (Request的应答) Request std 26 TAGTYPE TE,BE Request all 52 表3.7 应答指令表 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个寄存器进行初始化设臵外~还要将Bcnts~Bcntr寄存器进行设臵。Bcnts表示可向MCM的DATA寄存器写进的数据字节数目~这里要 26 公交车射频卡刷卡机的设计 写入的是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.12,所示。 2(选择子程序,Select,: “Select Tag” 选择卡片操作: 指 令 指令代码,hex, 相关的出错标志 接收卡片上数据 Select Tag 93 TE, BE, PE,CE SIZE (选卡片) 表3.8 选择指令表 在任何时候想实际地与已知序列号的卡片进行通信时~必须使用Select指令~以建立与所选卡的通信。 为了允许在Select指令以后对卡片能进行Read/Write等指令的操作~Select指令是很重要的~必须首先被使用。被选择的卡片将给出自己的存储器容量~为已编码的一个字节。 Select指令成功的完成后~MCU将得到MCM的DATA寄存器传送来的一个字节长的卡片容量信息SIZE字节。SIZE字节被存储在Mifare 1卡片上的第00H扇区中的第00h 块,Block,中~共1个字节,8bits,。 分析:选择一张卡片通常由MCU向MCM200发送“Select”命令来完成。MCU发送“Select”命令后~会将Mifare 1卡片的40 位长的序列号的前四个字节以及前四个字节的异或结果~同时再重新发送给 Mifare 1卡~只有本身的序列号和接收的序列号相同的卡片才能被真正地选中。Select指令成功执行后~MCU将得到MCM 的DATA寄存器传来的一个字节长的卡片容量信息,SIZE字节,。SIZE字节被存储在MIFARE 1卡片上的第00H扇区中的第00H块中。 27 公交车射频卡刷卡机的设计 程序流程图:见图,3.13,。 开始 开始 各寄存器初始化 各寄存器初始化 Y N 传送 Select指令 R2=00? 读4个字节的序列号发送 RQT_STD指令 发送 RQT_ALL指令 值存入40H—43H 四个字节进行异或操作 TOC=0AH 结果送回Mifare卡 读 STACON TOC=0AH N 读 STACON DV=1? Y N DV=1? 关闭TOC Y 关闭TOC N Y Y N , TE,BE=1 TE,BE,PE,CE=1, 调用DISPLAY_ERR调用DISPLAY_ERR 读Tagtype 子程序 读Size 子程序 结束 结束 图3.13 选择子程序流程图 图3.12 应答子程序流程图 3(认证子程序,Authentication,: “Authentication” 认证操作: 指 令 Authentication 指令代码,hex, 相关的出错标志 (认证) Auth_1a 60 TE, BE, PE,CE,AE Auth_1b 61 表3.9 认证指令表 在MCU将运算获得的数据~准备存储到卡片上的存储器之前或MCU希望能读取Mifare 1卡片上的数据之前~必须证明读/写请求操作是被允许的。 28 公交车射频卡刷卡机的设计 这可以通过选择秘密地存储在MCM的RAM中的密码集,KEYSET,中的一组密码来进行认证而实现。如果这一组密码匹配与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 表3.10 密码集的选择 KEYADDR寄存器,0C H地址,中的AB位用于选择KEYA或KEYB。 AB = “1” 选择KEYA AB = “0” 选择KEYB 表3.11 密码的选择 KEYADDR寄存器(地址0C H) 中的“AB”设臵必须匹配“Authentication”命令,指令代码60H和 61 H,。否则~“Authentication”命令将失败。 即在“Authentication”命令中~60h代码用于认证KEYA,61h代码用于认证KEYB。 当用60H代码时~在KEYADDR寄存器中只能设臵AB=1~用于选择KEYA, 当用61H代码时~在KEYADDR寄存器中只能设臵AB=0~用于选择KEYB, H代码时~在KEYADDR寄存器中不能设臵AB=0~否则认证命令将出错, 当用60 当用61H代码时~在KEYADDR寄存器中不能设臵AB=1~否则认证命令将出错, KS1和KS0的设臵选择与上述的认证命令的指令代码60H和61H的选择无关, KS1和KS0的设臵选择与上述的KEYADDR寄存器中AB的设臵无关。 分析:Mifare 1卡的每个扇区的块3包含该扇区的密码A,6个字节,、存取控制(4个字节)、密码B,6个字节,~它是一个特殊的块。在选择了一张卡片后~在对卡片进行读写操作之前~还必须对卡片上已经设臵的密码进行认证~如果匹配~则允许进一步的Read/Write操作。在这里~将选用密码集KEYSET0~即KS1~KS0=00H,选择用KEYA~即AB=1,则相应的指令代码就只能选用60H。在“Authentication”指令发出之前~必须设臵密码控制寄存器KEYSTACON~使AL,1。然后~通过写 29 公交车射频卡刷卡机的设计 “Authentication”认证命令代码和写“地址” ,Mifare 1卡要认证的扇区地址是0 —15,到DATA寄存器~认证密码操作的模块便开始启动执行。认证成功后~可对 刚刚认证通过的卡片上的这个扇区进行下一步Read/Write等操作。这里选用扇区1。 程序流程图:如图,3.14,所示。 开始 开始 寄存器初始化 寄存器初始化 选中Block0,设设置KEYSTACON,令 置Bcnts, Bcntr KS1,KS0=00H ,AL,1 发送读指令30H 设置KEYADDR,选用 扇区1,选择KEYA TOC=0AH 发送认证指令60H 读SRACON N TOC=0AH DV=1, Y 读SRACON 关闭TOC N DV=1, Y N TE,PE,CE, 关闭TOC BE=1, 调用DISPLAY_ERR N Y TE,PE,CE,BE,子程序 AE=1, 从DATA中读 出数据并保存 调用DISPLAY_ERR 子程序 Y 结束 结束 图 3.15 MCM_Read子程序流程图 图3.14 认证子程序流程图 4(读子程序,MCM_Read,: “Read” 读指令操作: 30 公交车射频卡刷卡机的设计 指 令 指令代码,hex, 相关的出错标志 接收卡片上数据 Read (读) 30 TE, BE, PE,CE Data 表3.12 读指令表 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.15,所示。 5(写子程序(MCM_Write): “Write” 写指令操作: 指 令 指令代码,hex, 相关的出错标志 Write (写) A0 TE, BE 表3.13 写指令表 “Write”写指令允许用户写数据到MIFARE卡片上,完整的16 个Bytes的数据块,Data blocks,,。只有在 “Authentication” 认证指令完成后~才允许进行对要求的数据扇区或数据块,Block,进行“Write“ 写指令操作。 分析:数据写入扇区1中的Block0中。设臵Bcnts~以确定向MCM的DATA寄存器写进的数据字节数目~这里为8位~1个字节~则设臵为08H。发送写指令A0H~接着从DATA将数据写入卡内。 程序流程图:如图,3.16,所示。 31 公交车射频卡刷卡机的设计 开始 开始 寄存器初始化 寄存器初始化 设置Bcnts,选中Block0,设 Bcntr 置Bcnts 发送停机指令50H 发送读指令A0H TOC=0AH TOC=0AH 读SRACON 读SRACON N N DV=1, DV=1, Y Y 关闭TOC 关闭TOC N N TE,BE=1, TE,BE=1, Y 调用DISPLAY_ERRY 调用DISPLAY_ERR 子程序 子程序 从DATA中读 出数据并保存 结束 结束 图3.16 MCM_Write子程序流程图 3.17 停机子程序流程图 图 6(停机子程序(Halt): “ Halt” 停机指令: 指 令 指令代码,hex, 相关的出错标志 Halt (停机) 50 TE, BE 表3.14 停机指令表 “Halt”停机指令将MIFARE 1卡片设臵为“HALT MODE”。例如~卡片已经退出使 用等。卡片将保持“HALT MODE”状态~直到被复位。 分析:当卡片中的余额不足时~将卡片停机~停止其使用~直到被充值后~才撤消 其停机状态。Bcnts设臵为10H,Bctnr设臵为04H。发送停机指令50H。 程序流程图:如图,3.17,。 32 公交车射频卡刷卡机的设计 第4章 系统的软件调试 本次毕业设计使用的调试软件是Medwin~是专为51单片机设计的集成开发系统软件。 4.1 系统调试软件Medwin 用Medwin开发应用程序: Medwin集成开发环境提供了两种方式开发用户应用程序: ,1, 不使用项目管理的开发方式——对源程序文件直接进行汇编/连接方式。 ,2, 使用项目管理的开发方式——可进行多模块~混合语言编程方式。 由于本次设计采用汇编语言进行编程~所以采用方式,1,。由于无仿真器~因此只可以查看程序运行过程中各个寄存器和数据区的变化。 步骤如下: ,1,关闭当前项目文件。选择主菜单中的“项目管理\关闭当前项目”。 ,2,在文件菜单下打开应用程序。选择主菜单中的“文件\新建...”或“文件\打开...”~以建立一个新的应用程序或打开一个已经存在的应用程序。打开应用程序后即可对其进行编辑或修改~编辑完后注意保存。 ,3,编译\汇编。选择主菜单中的“项目管理\编译/汇编”。 Medwin集成开发环境将自动根据文件的扩展名选择调用相应的汇编器对源文件进行编译或汇编。 ,4,错误信息关联。编译/汇编的结果会显示在图,4.1,所示的窗口中。当编译/汇编发生错误时~消息窗口中的错误信息会自动与源文件关联~提示出错位臵。 如果编译/汇编没有错误~可进入,5,操作。 如果编译/汇编出现错误~在修改源文件后重复进行,3,操作。 ,5,调试应用程序。选择主菜单中的“调试\开始调试”。然后可以选择“单步”~观察程序在一步一步的运行过程中~各个寄存器和数据区的变化。 4.2程序调试示例 图 4.1 MEDWIN程序窗口与寄存器窗口 33 公交车射频卡刷卡机的设计 将调试DISPLAY子程序中将A中的数转化为三位的BCD码的那部分程序。 如图,4.1,所示。左边窗口里是所需调试的DISPLAY子程序。采用单步调试的方式~通过观察右边的寄存器窗口~查看每一步程序的正确性。由于DISPLAY子程序中所显示的数是存放在寄存器A中的~因此要想观测到结果~首先要设臵A的值。在这里将A的值设臵为69H~也就是105D。图,4.1,中所示是程序执行到左边黄色箭头所指的位臵~右边是寄存器窗口~可以看到寄存器A,B分别为01~05。继续单步调试并查看数据区~可以看到存放在32H,31H,30H中的数分别为01H~00H~05H,如图,4.2,所示,~也就是说首先将A中的数转化为三位的BCD码的那部分程序编写正确。 图4.2 MEDWIN数据窗口 同样~可以采用类似的方法对其他的程序进行调试。 34 公交车射频卡刷卡机的设计 总 结 对于公交车射频卡刷卡机的设计涉及硬件系统设计和软件系统设计~工作量较大。由于时间的原因~还有一些细节部分没有考虑周全。但总体来说~本次毕业设计任务基本完成。 本次设计的重点和难点是读卡器的设计以及对应的程序编写。以前~对于射频卡没有任何了解。因此~这次对于射频卡的认识是从零开始的。读卡器的硬件连接相对于软件编程来说较容易。在软件编程过程中~由于缺少充分的软件程序示例~因此花了较长的时间。但通过对资料的仔细理解后~发现应答~选择~认证~读~写~停机等各部分子程序的编写都有许多相似之处~这一点可以从程序的流程图上看出。 硬件系统设计中也涉及了一些新的知识~如:看门狗电路~93C46串行EEPROM。以前~听说过看门狗电路~但对于它的用途~功能都不清楚。但现在~了解到正如同它的名字一样~看门狗电路对于整个电路起到了监控作用~在掉电~死机等情况发生时会即时的复位。对于93C46串行EEPROM~我的印象很深刻。因为在编写它的软件程序时~采用了巧妙的方法~可以从流程图中看出。 在整个设计中~我感觉软件的系统设计难度较大。因为实现的功能较以往接触过的复杂些~而且需要考虑很多的细节。但通过采用模块化的设计思想~即对应于各个硬件电路来编写相应独立的子程序~明晰了设计的思路。 另外~通过这次设计又再次的熟悉了PROTEL软件和MEDWIN软件。尤其是MEDWIN软件~用其对于编写的部分程序进行了调试~查看了程序运行时相应的寄存器单元的内容~验证了所编程序的正确性。 这次的毕业设计不仅考察了本上的理论知识而且还考察了分析问题、解决问题的能力、查阅资料的能力以及自学能力~收获颇多。以前学过的基础知识~头脑中只有理论的概念~很多知识虽然熟悉~但学得很抽象~在头脑中的印象也很模糊。而这次却不同~此次毕业设计综合了以前我们所学的知识。它要求我们既要高屋建瓴~从整体上把握设计的全局~又要心细如针~从局部上把握每一个细节,它既要求我们能综合运用以前所学的知识~又要求我们有自学本领~创新精神。 35 公交车射频卡刷卡机的设计 致 谢 电气信息工程系肖忠老师在本次毕业设计中为我们提出了很多宝贵的意见~付出了许多宝贵的时间对我们进行辅导~为我们作了许多准备工作~耐心指导~精心讲解~及时帮我们解决了许多设计中出现的问题。 在此~表示衷心的感谢: 36 公交车射频卡刷卡机的设计 参考文献 [1]单片原理与应用技术~秦实虹编著~中国水利水电出版社 [2]单片微型计算机原理与接口技术~陈光东~赵性初~华中科技大学出版社 [3]MCS—51单片机应用设计~张毅刚等编著~哈尔滨工业大学出版社 [4]单片机实用系统设计技术~房小翠~王金凤编著~国防工业大学出版社 [5]沈宇超~沈树群. 射频识别技术及其发展现状. 电子技术应用~1999,1,:4~5 [6]《无线射频识别技术(RFID)理论与应用》电子工业出版社 [7]《射频识别,RFID,技术,第二版,》电子工业出版社 [8]单片机原理及应用,杨恢先等著, 国防科技大学出版社 [9]单片机原理及接口技术实践教程,胡健等著,机械工业出版社 [10]单片机微型计算机原理与接口技术,陈光东等著 , 华中科技大学出版社 [11]单片机原理及接口技术,梅丽风等主编 ,北京交通大学出版社 [12]单片机开发与典型应用设计~谢筑森编著~中国科学技术大学出版社 [13]《电子技术基础》~康华光主编~高等教育出版社 [14]数字电路技术基础~阎石~高教社 [15]Adel S.Sedra and Kenneth C.Smith.Microelectronic Ciruits.3rd ed.CBS College Publishing. 37 公交车射频卡刷卡机的设计 附:程序清单 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,00H ;表明应采用RQT_STD指令 SJMP $ 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中 CJNE A,#02H,D1 D1: JC D2 ;比较,若小于2就跳至D2 DEC A DEC A ;减2 LCALL MCM_WRITE;调用MCM的写子程序 LCALL SPK_ON1 ;蜂鸣器响一声 LCALL DISPLAY ;显示 LCALL READ ;调用93C49的读子程序 MOV B,60H ;将读到内容存入B中 38 公交车射频卡刷卡机的设计 INC B INC B;加2 LCALL WRITE ;调用93C49的写子程序 D2: 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 39 公交车射频卡刷卡机的设计 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,#86H 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 SPK_ON2: MOV R1,#0AH ,重复次数为10 F2: CLR P2.0 LCALL DELAY500MS ,蜂鸣器响半秒 SETB P2.0 LCALL DELAY500MS ,蜂鸣器不响半秒 DJNZ R1,F2 RET SEND: CLR P2.7 SETB P3.4 ;CS=1 40 公交车射频卡刷卡机的设计 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 EEP_WRITE: MOV R6,#29H ;写入93C46中得到地址 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 41 公交车射频卡刷卡机的设计 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 42 公交车射频卡刷卡机的设计 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 43 公交车射频卡刷卡机的设计 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 44 公交车射频卡刷卡机的设计 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, 若出错,显示E 45 公交车射频卡刷卡机的设计 JB ACC.2, DISPLAY_ERR;判断是否AE, 若出错,显示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 46 公交车射频卡刷卡机的设计 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 HALT: MOV 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 47 公交车射频卡刷卡机的设计 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 DELAY10MS: 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
/
本文档为【公交车射频卡刷卡机的设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索