公交刷卡系统之载卡机的设计 (软件)_第1页
公交刷卡系统之载卡机的设计 (软件)_第2页
公交刷卡系统之载卡机的设计 (软件)_第3页
公交刷卡系统之载卡机的设计 (软件)_第4页
公交刷卡系统之载卡机的设计 (软件)_第5页
已阅读5页,还剩24页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

公交刷卡系统之载卡机的设计(软件)摘要公交车卡可以提供更为方便、快捷的服务。本文对公交车载卡机的系统设计进行了研究。采用美国ATMEL公司的AT89C52单片机为控制核心,应用PHILIPS公司的MIFARE技术实现设计。随着城市规模的扩大,交通已经成为城市发展的一个重要因素。本设计包含了系统的总体设计与软件设计两个部分。总体设计部分描述了所应用的各部分的硬件电路及其原理,主要有:显示电路,看门狗电路,93C46串行EEPROM,蜂鸣器电路以及读卡器电路;同时,给出了完整的系统总体设计原理图。软件设计采用了汇编语言进行设计,运用模块化结构,并给出了各个模块的流程图,使程序设计的逻辑关系更加简洁明了;采用系统调试软件Medwin进行软件调试;另外,本文也给出了详细的程序清单。关键词:公交卡,卡,单片机

AbstractThebuscardcanprovidemoreconvenientandquickservice.Inthispaper,thetransitvehiclecardmachinesystemdesignarestudied.AdopttheAmericanATMELcompanyAT89C52singlechipmicrocomputerascontrolcore,applicationofPHILIPScompany,MIFAREtechnologydesign.Withtheexpansionofcityscale,thetraffichasbecomeanimportantfactorofurbandevelopment.Thisdesignincludestheoveralldesignofthesystemandsoftwaredesignoftwoparts.Partdescribestheoveralldesignoftheapplicationofthepartofhardwarecircuitanditsprinciple,mainlyinclude:displaycircuit,watchdogcircuit,block93c46serialEEPROM,buzzercircuitandcardreadercircuit;Atthesametime,thecompletesystemoveralldesignprinciplediagramisgiven.SoftwaredesignUSEStheassemblylanguagetocarryonthedesign,usingthemodularstructure,andshowstheflowchartofeachmodule,programdesignmoreconciseandclearlogicalrelations;USESthesystemdebuggingsoftwareMedwinforsoftwaredebugging;Inaddition,thispaperalsogivesadetailedlistofprograms.Keywords:publictransportationcard,card,singlechipmicrocomputer

目录摘要 2Abstract 3第1章绪论 4第2章总体设计 62.1系统总体设计框图 62.2系统总体设计原理图 62.3系统各电路详细设计 7第3章系统的软件设计 143.1系统软件设计框图 143.2系统软件各模块设计分析及程序流程图 14第4章系统的软件调试 344.1系统调试软件Medwin 344.2程序调试示例 34总结 36致谢 37参考文献 38

第1章绪论公交卡的广泛推广,将使公交管理迈上一个新台阶。公交卡不仅避免了因找零引起的尴尬;此外,卡小巧、轻便、美观,便于乘客携带;同时,使用公交卡,可减少现金流通量,也减少了疾病传播的途径;减少了乘客上车付费的时间,缩短了公交车到站停靠的时间,一定程度上缓解了城市的交通压力。通过此次的系统设计,了解卡的基本构成及原理;掌握单片机原理与接口设计;掌握实用电子信息系统设计与实现的方法。打开载卡机,有卡进入时,外部中断0响应,单片机控制读卡器读卡。正常情况下,卡内值减2,LED显示器中显示余额,蜂鸣器“嘟”一声;余额不足时,同样LED显示器中显示余额,蜂鸣器“嘟嘟嘟……”,以示警报。当载卡机工作过程中,程序中出现时间溢出,位溢出等错误时,LED显示器中显示“E”。看门狗电路可以进行手动复位;当电源电压Vcc低于4.75V时,输出复位信号;当微处理器死机时,可强迫复位。93C46串行EEPROM用来保存载卡机的总营业额,可以在掉电时保存数据,防止数据丢失,而且可以随时查询营业额。第2章总体设计2.1系统总体设计框图单片机控制着读卡器电路读卡,蜂鸣器响,LED显示器显示余额,存储器保存营业总额。总之,单片机是整个系统的控制核心,使各电路按照设计总要求有序的完成各自的功能。设计框图如图(2.1)所示:ATAT89C52单片机读卡器蜂鸣器存储器LED显示器图2.1系统硬件设计框图看门狗电路2.2系统总体设计原理图图2.2图2.2系统硬件设计原理图图图2.12电源电路原理图第3章系统的软件设计3.1系统软件设计思想系统软件按各组成电路分模块编写,形成各具独立功能的子程序。主程序则对这些子程序进行调用,以实现功能。当产生中断时,则执行中断服务子程序。此次由于是载卡机的设计,而且是在有卡进入时引起外部中断0。因此,程序的主要部分都在中断服务子程序中,主程序较简单。读卡器程序涉及到应答,选择,认证,读,写,停机等几个部分,较复杂,是整个程序设计的难点。3.2系统软件各模块设计分析及程序流程图主要分为主程序,中断服务子程序,显示程序,93C46串行EEPROM编程,蜂鸣器程序,读卡器程序几个部分来详细阐述。程序流程图:如图(3.1)所示。开始开始系统初始化系统初始化NY是否有中断?NY是否有中断?调用SPK_OFF调用SPK_OFF子程序调用中断服务子程序调用DISPLAY1子程序调用DISPLAY1子程序结束结束图图3.1主程序流程图分析:当有卡进入读卡器的工作范围后,会引起外部中断0,执行中断服务子程序。中断服务子程序是十分重要的部分,其主要实现的功能是:读卡,正常情况下,卡内值减2,LED显示器中显示余额,蜂鸣器“嘟”一声,将93C46中的值读出加2后再写入保存;余额不足时,LED显示器中同样显示余额,蜂鸣器“嘟嘟嘟……”,以示警报。开始选中MCM,对MCM软复位调用停机子程序调用读子程序开始选中MCM,对MCM软复位调用停机子程序调用读子程序调用Authentication子程序调用Select子程序调用Request子程序卡内数据>2?调用SPK_ON2子程序调用DISPLAY1子程序结束卡内数据减2调用写子程序调用SPK_ON1子程序调用DISPLAY2子程序图3.2中断服务子程序流程图YN调用EEP_WRITE子程序调用EEP_READ子程序60H中的内容加2后送B(一)显示程序一(DISPLAY_OFF)实现功能:LED显示器上无显示。分析:LED显示器中a、b、c、d、e、f、g、dp全不亮,各选通位关闭。程序:DISPLAY_OFF:MOVA,#0FFHMOVP1,A;显示器各段不亮CLRP2.4CLRP2.5CLRP2.6;选通位全部关闭RET(二)显示程序二(DISPLAY_ERR)实现功能:在第三位的LED显示器上显示出错标志E。分析:E的字形码为86H,选通第三位的LED显示器,关闭其余的LED显示器。程序:DISPLAY_ERR:MOVA,#86HMOVP1,A;显示“E”SETBP2.4CLRP2.5CLRP2.6;选通第三位,关闭其余选通位RET(三)显示程序三(DISPLAY)实现功能:将寄存器A中的数据值显示在LED显示器上。分析:1.此显示器是作为显示载卡机余额的,因此涉及的显示字符为0—9。2.A中的数据格式是十六进制,因此要先将其转换为3位BCD码,百位储存在32H中,十位储存在31H中,个位储存在30H中。显示字符0123456789字型码C0H表3.1表3.1LED显示器字形码表A4HB0H99H92H82HF8H80H88H程序流程图:如图(3.3)所示。AA中数据除以100,商在A中,余数在B中A中内容送入32H单元中,得到百位数B中内容送入A中A中数据除以10,结果商在A中,余数在B中A中内容送入31H单元中,得到十位数B中内容送入30H单元中,得到个位数R1=50D32H单元内容送入A中中据A中内容查表得字型码,并送入A中A中内容送入P1口,并选通第一位调用延时10ms子程序31H单元内容送入A中中据A中内容查表得字型码,并送入A中A中内容送入P1口,并选通第二位调用延时10ms子程序30H单元内容送入A中中据A中内容查表得字型码,并送入A中A中内容送入P1口,并选通第三位调用延时10ms子程序R1—1→R1,判断R1=0?开始结束YN图3.3DISPLAY子程序分析:可以通过程序控制P2.0管脚的置低和置高来使蜂鸣器发出声音和关闭。(一)蜂鸣器程序一(SPK_OFF)实现功能:蜂鸣器不响。程序:SPK_OFF: SETBP2.0 RET(二)蜂鸣器程序二(SPK_ON1)实现功能:蜂鸣器响一声,持续时间一秒。程序:SPK_ON1: CLRP2.0 ACALLDELAY1S SETBP2.0 RET(三)蜂鸣器程序三(SPK_ON2)实现功能:蜂鸣器响连续响十声,每声持续时间半秒,间隔时间半秒。程序:SPK_ON2: MOVR1,#0AH;重复次数为10F2: CLRP2.0 ACALLDELAY500MS;蜂鸣器响半秒 SETBP2.0 ACALLDELAY500MS;蜂鸣器不响半秒 DJNZR1,F2 RET读,写操作指令与时序图:1.操作指令:指令开始位操作码地址(8位结构)Read110A6—A0Write表3.2表3.2读,写指令表01A6—A02.时序图:(1)读:图图3.4读指令时序图(2)写:图图3.5写指令时序图如图(3.5)所示,在接收到写指令地址和数据以后,片选信号CS在下降沿的时候器件开动自动时钟去擦除并把数据存放到指定存储器。因为器件有在写入前自动清除的特性,所以没有必要在写入之前将存储器内该地址的内容擦除。开始令R5=0A0H,R7=03H,调用发送子程序(送写指令)令R7=07H,R6=29H调用发送子程序(送地址)令R7=08H,调用发送子程序(送数据)CS=0CS=1结束开始开始令R5=0A0H,R7=03H,调用发送子程序(送写指令)令R7=07H,R6=29H调用发送子程序(送地址)令R7=08H,调用发送子程序(送数据)CS=0CS=1结束开始令R5=0C0H,R7=03H,调用发送子程序(送读指令)令R7=03H,调用接收子程序(送写指令)令R6=29H,R7=07H,调用发送子程序(送地址)A→(60H)结束开始开始SK=0CS=1R5→A左移A,将高位移至C中SK=1等待SK=0YNC→P2.1开始开始SK=1等待SK=0P3.5→C左移A,使C移至A中低位R7—1→R7,判断是否为0?结束YN图3.9接收子程序流程图R7R7—1→R7,判断是否为0?结束结束图3.8图3.8发送子程序流程图程序流程图:如图(3.6),图(3.7),图(3.8),图(3.9)所示。(一)Mifare1非接触式IC智能()卡说明1.Mifare1非接触式IC智能卡功能组成(如图(3.10)所示):整个卡片包含了两个部分:RF接口电路和数字电路部分。(1)RF接口电路:MIFRE1S50CARDICMIFRE1S50CARDICClockData

Energy

波形转换正弦=>方波整流电压调节Modu./DeModu调制/解调POR(复位)EEPORAntiCollisionATRDigitalSection数字电路部分SelectApplicationAuthentication&AccessControlControl&Arithm.Unit

ROM

CryptoUnit卡片天线RAMRF-Interface接口电路图3.10Mifare1非接触式IC智能卡功能组成图包括稳压等,最终输出供给卡片上的各电路。(2)数字电路部分:总共包含ATR模块,AntiCollision模块,SelectApplication模块,Authentication&AccessControl模块,控制及算术运算单元,RAM/ROM单元,数据加密单元和EEPROM存储器及其接口电路八个部分。下面将详细介绍以下三个模块:a.ATR模块:AnswertoRequest(“请求之应答”)卡片的类型(Tagtype)号共2个字节,可能为:0004Hb.SelectApplication模块:主要用于卡片的选择 读写器收到的“SIZE”字节可能为:88Hc.Authentication&AccessControl模块:认证及存取控制模块在确认已经选择了一张卡片时,程序员对卡片进行读写操作之前,必须对卡片上已经设置的密码进行认证,如果匹配,则允许进一步的Read/Write操作。Mifare1卡片上有16个扇区,每个扇区都可分别设置各自的密码,互不干涉。

2.Mifare1卡片的存储结构:

Mifare1卡片的存储容量为8192BIT*1位字长(即1K*8位字长),采用EEPROM作为存储介质,整个结构划分为16个扇区,编为扇区0—15。每个扇区有4个块,分别为块0,块1,块2和块3,每个块有16个字节。如下图(3.11)所示:扇区扇区0块0(厂商标志代码)块1块2块3(A密码+存取控制+B密码)扇区1扇区1Block0Block1Block2Block3(A密码+存取控制+B密码)。。。。。。。扇区扇区15。Block0Block1Block2块3(A密码+存取控制+B密码)图图3.11存储器结构图每个扇区的块3(即第四块)包含了该扇区的密码A(6个字节)、存取控制(4个字节)、密码B(6个字节),是一个特殊的块。其余三个块是一般的数据块。但扇区0的块0是特殊的,是厂商代码,已固化,不可改写。其中: 第0~4个字节为卡片的序列号,第5个字节为序列号的校验码;第6个字节为卡片的容量“SIZE”字节;第7,8个字节为卡片的类型号字节,即Tagtype字节;其他字节由厂商另加定义。

Mifare1卡片的扇区0中的块0(Block0)存储的16个字节的内容可能为:420A7E00368804004481740630373937H(二)MCM读写模块的硬件内核寄存器描述

读取MCM,一般是指向

Mifare1卡请求。MCM实际上是MCU与非接触式IC智能()卡之间信息(数据)交换的“中间人”。任何读取卡片上的数据或写进卡片上的数据均必须通过MCM来传递。写MCM意味着去控制MCM,例如,送一些类型的指令给它。MCM中ASIC内核特殊寄存器一览表如表(3.3)所示。寄存器名地址读(READ)写(WRITE)DATA00H0READ-BYTEWRITE-BYTESTACON01H1DVTEPECEBEAE----SORRFS----11NRFACENABLE02H 2N/A1PRCECR--------BCNTS03H 3N/ABIT-COUNT-SENDBCNTR04H 4N/ABIT-COUNT-RECEIVEBAUDRATE05H 5N/A--------111BRTOC06H 6N/ATIMEOUT-COUNTERMODE07H 7N/A11000P2P1P0P0CRCDATA08H 8CRC-BYTE-READCRC-BYTE-WRITECRCSTACON09H 9CV------------CZC8------------CRKEYDATA0AH 10N/AKEY-BYTE-WRITEKEYSTACON0BH 11----------------AL0--------KS1KS0KEYADDR0CH 12N/AALABA5A4A3A2A1

0DH 13

RCODE0EH 14N/A--------00RC1RC0

0FH 15

表表3.3ASIC内核特殊寄存器一览表下面将详细的介绍几种寄存器:a.DATA寄存器,地址:00H任何传递到MIFARE1卡的数据或来自MIFRAE1卡的数据都必须分别地被写入DATA寄存器或从DATA寄存器中读出。例如,MCU向卡片写数据Xi,则Xi必须首先被写入到DATA寄存器中,然后MCM与Mifare1卡片进行通信,由卡片上的ASIC将DATA寄存器中的数据读取并存放在指定的卡片上的存储器中,从而完成MCU向MIFRAE1卡片写数据的过程。反之亦然。DATA寄存器中有一个16BYTE的FIFO(先进先出)队列寄存器。数据写到DATA寄存器后,被存放在这个16BYTE的FIFO(先进先出)队列寄存器中,等待向卡片上或MCU传送。如要进行传送DATA寄存器中数据,则首先必须先设定要传输多少位或多少字节,即必须对BCNTS寄存器进行有效的正确设置,以确定有多少字节将要被传送。 当卡片上的数据流接收结束或没有被接收时,STACON寄存器中的DV标志被置位“1”如果设置了DV,则STACON寄存器中的出错位将被设置。如果没有相关的出错位被设置,则FIFO寄存器中的数据将被假设为正确,则可以被读出。

b. STACON寄存器,地址:01HSATCON是STATUSCONTROL(状态控制)的缩写,是一个状态控制寄存器。通过将数据写到STACON寄存器中来对MCM进行状态控制。详见下表(3.4)所示:位名名称功能SORSoftReset(软复位)“0”表示无作用“1”复位MCM,自动的清除一切RFSRF-Select(RF选择)“0”RF单元0被选中激活“1”RF单元1被选中激活NRFNORF(无RF)“0”将活动(激活)RF单元接上“1”将活动(激活)RF单元关闭ACAnticollision(防重叠)“0”无作用“1”启动防重叠状态机表表3.4STACON寄存器中的位功能表这里,应该注意,当写数据到STACON寄存器时(即对STACON寄存器进行设置),在写数据到STACON寄存器的这一写周期中,RFS位的设置必须与RF单元相互一致。读取STACON寄存器,将告诉我们一系列的MCM及卡片的当前状况信息。以下是读取STACON寄存器后的一系列标志位表。BitName 位名Name名称Function功能DVDataValid(数据有效)卡上的数据传输到FIFO寄存器中DV位也可以在正确的认证操作完成后而被设置。TETimeoutError(溢出出错)一个定时记数器溢出发生。PEParityError(奇/偶校验错)在通讯时有奇/偶校验错CECRCError(CRC错)在通讯时有CRC错BEBitcountError(位记数器出错)在BCNTR寄存器中有大量的指定位没有收到。AEAuthentication(认证出错)卡的认证应答码不正确或当执行一个取密码操作时指定的ROMKEY(只读存储器中的密码)不正确。表表3.5STACON寄存器中的标志位表在表(3.5)中,仅当DV位被设置有效时(即DV=“1”),TE,PE,CE,BE及AE标志才有效。但有一例外,即当认证正确完成后,AE标志也直接有效。当执行SOR后,所有的这些标志将被清除,且当对MCM的任何一个寄存器执行写周期时,所有的这些标志也将被清除。当对MCM内的任何一个寄存器执行写周期时,所有的这些标志也将被清除;仅当FIFO是空时,DV标志将被写周期清除。 在MCU与MCM,MCM与Mifare1卡片进行数据通信时,经常会出现各种错误。例如,卡片没能认证通过,则会使AE出错位置位,等等。c.BCNTS寄存器,地址:03H BCNTS是英文Bit-Counter-for-Sending的缩写,意为传送时的位计数器(寄存器)。这里的传送指的是CPU向MCM的DATA寄存器写数据。因此BCNTS寄存器实际上是一个字节发送控制器,它控制了MCU向DATA寄存器中写进的数据字节数目。 例如,设置BCNTS=10H,则可向MCM的DATA寄存器写进的数据字节数目为2个(8位字长的数据,因为总的位数目=10H=16D),多余的数据,MCM将不予接收。由于BCNTS寄存器是控制向DATA寄存器写数据的字节数目,因此这一操作必须在数据写入DATA寄存器之前完成。在大量的字节数据被写入DATA寄存器之后,MCM自动地与卡片进行通信。写入DATA寄存器的位数量由BCNTS寄存器制定。

d.BCNTR寄存器,地址:04HBCNTR是英文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寄存器,地址:06HTOC是TimeOutCounter((定)时间溢出记数器)的缩写。对TOC寄存器的设置即对定时时间的控制。写数据至TOC寄存器,可以控制定时溢出记数器。如果用00H写给TOC,即TOC=00H,则将关闭定时溢出记数器。TOC寄存器中的值必须在MCM与MIFARE1卡片通信时被设置。TOC寄存器常用的设置值为:0AH,即定时1ms。TOC寄存器中的值(非零值)将在没有通信时,永久的被递减。因此,在没有通信时,或通信刚结束时,TOC寄存器中的值必须被设置,即设置TOC=0x00H。例如:在FIFO中的数据有效时,就必须这样做。否则将影响STACON寄存器的TE出错标志。如果有溢出出现,则TE标志被设置,DV标志被激活。在完成写数据到DATA寄存器,定时溢出记数器应该经常被初始化。

4. MCM硬件初始化为了与MIFARE1卡通信,必须对MCM各硬件寄存器进行初始化设置。详见表(3.6)所示:寄存器地址初始化设置(16进制值)STACON10x0C0x4CENABLE20xC0BAUDRATE50x0EMODE70xC6RCODE130x02表3.6表3.6硬件寄存器初始化表(三)程序流程在对Mifare1卡片进行读,写操作之前要进行三个步骤:应答(Requst),选择(Select)与认证(Authentication)。因此在程序编写时,分为应答子程序,选择子程序,认证子程序,读子程序,写子程序,停机子程序。1.应答子程序(Request):“AnswertoRequest”(“Request”应答)指令:指令AnswertoRequest(Request的应答)指令代码(hex)相关的出错标志接收卡片上数据Requeststd26TE,BETAGTYPERequestall52表表3.7应答指令表R2=00H时,执行Requeststd操作;R2=01H时,执行Requestall操作。Request指令将通知MCM在天线有效的工作范围(距离)内寻找MIFARE1卡片。如果有MIFARE1卡片存在,这一指令将分别与MIFARE1进行通信,读取MIFARE1卡片上的卡片类型号TAGTYPE(2个字节),由MCM传递给MCU,进行识别处理。可以根据TAGTYPE来区别卡片的不同类型。从一个指定的卡片开始,后续的卡片可以根据TAGTYPE而被选择。当使用“Requeststd”指令来寻卡时,只有那些卡片上没有被设置成“HALT_MODE”(停机模式)的卡片将响应这一指令。Requestall指令是非连续性的读卡指令,适用于那些需要有人工干预的场合。Requeststd指令的使用和Requestall指令刚巧相反,Requeststd指令是连续性的读卡指令,适用于那些不需要有人工干预的场合,因此在本次程序中选用Requeststd指令。分析:除了要按表3.6中的要求对那5个寄存器进行初始化设置外,还要将Bcnts,Bcntr寄存器进行设置。Bcnts表示可向MCM的DATA寄存器写进的数据字节数目,这里要写入的是Requst的指令代码26H或52H,因此可以将Bcnts设置为07H;Bcntr表示从DATA寄存器中读取的数据的字节数目,在这里是读取卡片类型号TAGTYPE,为2个字节,那么Bcntr设置为10H;TOC设置为0AH。另外,还要判断R2的取值,然后执行相应的Requeststd或Requestall操作。(注意:要进行出错判断,若出错,在LED显示器上显示“E”。当数据通信结束后,要将TOC设置为0,即关闭TOC,否则会出现TE错误。其他子程序也要注意这一点,后面将不予说明。)程序流程图:见图(3.12)所示。选择子程序(Select):“SelectTag”选择卡片操作:指令指令代码(hex)相关的出错标志接收卡片上数据SelectTag(选卡片)93TE,BE,PE,CESIZE表表3.8选择指令表在任何时候想实际地与已知序列号的卡片进行通信时,必须使用Select指令,以建立与所选卡的通信。为了允许在Select指令以后对卡片能进行Read/Write等指令的操作,Select指令是很重要的,必须首先被使用。被选择的卡片将给出自己的存储器容量,为已编码的一个字节。Select指令成功的完成后,MCU将得到MCM的DATA寄存器传送来的一个字节长的卡片容量信息SIZE字节。SIZE字节被存储在Mifare1卡片上的第00H扇区中的第00h

块(Block)中,共1个字节(8bits)。 分析:选择一张卡片通常由MCU向MCM200发送“Select”命令来完成。MCU发送“Select”命令后,会将Mifare1卡片的40位长的序列号的前四个字节以及前四个字节的异或结果,同时再重新发送给Mifare1卡,只有本身的序列号和接收的序列号相同的卡片才能被真正地选中。Select指令成功执行后,MCU将得到MCM的DATA寄存器传来的一个字节长的卡片容量信息(SIZE字节)。SIZE字节被存储在MIFARE1卡片上的第00H扇区中的第00H块中。开始读4个字节的序列号值存入40H—43H开始读4个字节的序列号值存入40H—43H四个字节进行异或操作结果送回Mifare卡读SizeTE,BE,PE,CE=1?各寄存器初始化传送Select指令TOC=0AH读STACONDV=1?关闭TOC结束调用DISPLAY_ERR子程序图3.13选择子程序流程图NYYN各寄存器初始化开始R2=00?DV=1?发送RQT_STD指令TOC=0AH读STACON关闭TOC发送RQT_ALL指令结束YNNYYN图3.12应答子程序流程图读Tagtype调用DISPLAY_ERR子程序TE,BE=1?3.认证子程序(Authentication):“Authentication”认证操作:指令Authentication(认证)指令代码(hex)相关的出错标志Auth_1a60TE,BE,PE,CE,AEAuth_1b61表表3.9认证指令表在MCU将运算获得的数据,准备存储到卡片上的存储器之前或MCU希望能读取Mifare1卡片上的数据之前,必须证明读/写请求操作是被允许的。这可以通过选择秘密地存储在MCM的RAM中的密码集(KEYSET)中的一组密码来进行认证而实现。如果这一组密码匹配与Mifare1卡片上的密码,那么这一次的操作才被允许进行。卡片上的存储器的每一个block(128位)都分别的指定了该block的存取条件。这些存取条件是根据密码A或B(它们对整个扇区始终有效)而定。这样一来,不同的操作可能会被允许对一个扇区中的4个不同blocks中的每一个block进行操作。MCM能够存储3个密码集KEYSET0,KEYSET1,KEYSET2。每一个KEYSET又包含了KEYA及KEYB。用户必须在KEYSTACON(0BH地址)寄存器中指定一套密码,即设置KS0,KS1。KS1KS0=00选择KEYSET0KS1KS0=01选择KEYSET1KS1KS0=10选择KEYSET2KS1KS0=11选择KEYSET3表表3.10密码集的选择KEYADDR寄存器(0CH地址)中的AB位用于选择KEYA或KEYB。AB=“1”选择KEYAAB=“0”选择KEYB表表3.11密码的选择KEYADDR寄存器(地址0CH)中的“AB”设置必须匹配“Authentication”命令(指令代码60H和61H)。否则,“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的设置选择与上述的认证命令的指令代码60H和61H的选择无关;KS1和KS0的设置选择与上述的KEYADDR寄存器中AB的设置无关。分析:Mifare1卡的每个扇区的块3包含该扇区的密码A(6个字节)、存取控制(4个字节)、密码B(6个字节),它是一个特殊的块。在选择了一张卡片后,在对卡片进行读写操作之前,还必须对卡片上已经设置的密码进行认证,如果匹配,则允许进一步的Read/Write操作。在这里,将选用密码集KEYSET0,即KS1,KS0=00H;选择用KEYA,即AB=1;则相应的指令代码就只能选用60H。在“Authentication”指令发出之前,必须设置密码控制寄存器KEYSTACON,使AL=1。然后,通过写“Authentication”认证命令代码和写“地址”(Mifare1卡要认证的扇区地址是0—15)到DATA寄存器,认证密码操作的模块便开始启动执行。认证成功后,可对刚刚认证通过的卡片上的这个扇区进行下一步Read/Write等操作。这里选用扇区1。程序流程图:如图(3.14)所示。选中Block选中Block0,设置Bcnts,Bcntr开始寄存器初始化发送读指令30H从DATA中读出数据并保存图3.15MCM_Read子程序流程图TOC=0AH关闭TOC读SRACONDV=1?NYTE,PE,CE,BE=1?调用DISPLAY_ERR子程序结束NY开始寄存器初始化发送认证指令60H设置KEYADDR,选用扇区1,选择KEYA设置KEYSTACON,令KS1,KS0=00H,AL=1TOC=0AH关闭TOC读SRACONDV=1?NYTE,PE,CE,BE,AE=1?调用DISPLAY_ERR子程序结束NY图3.14认证子程序流程图4.读子程序(MCM_Read):“Read”读指令操作:指令指令代码(hex)相关的出错标志接收卡片上数据Read(读)30TE,BE,PE,CEData表表3.12读指令表Read(读)指令允许MCU通过MCM来读取MIFARE1卡片上完整的16个字节的数据块(Datablocks)。只有在预先“Authentication”认证指令完成后,才允许进行对Mifare1卡片上的某一数据扇区进行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(写)A0TE,BE表3.13表3.13写指令表“Write”写指令允许用户写数据到MIFARE卡片上(完整的16个Bytes的数据块(Datablocks))。只有在“Authentication”认证指令完成后,才允许进行对要求的数据扇区或数据块(Block)进行“Write“写指令操作。分析:数据写入扇区1中的Block0中。设置Bcnts,以确定向MCM的DATA寄存器写进的数据字节数目,这里为8位,1个字节,则设置为08H。发送写指令A0H,接着从DATA将数据写入卡内。程序流程图:如图(3.16)所示。N设置N设置Bcnts,Bcntr开始寄存器初始化发送停机指令50H图3.17停机子程序流程图TOC=0AH关闭TOC读SRACONDV=1?NYTE,BE=1?调用DISPLAY_ERR子程序结束NY选中Block0,设置Bcnts开始寄存器初始化发送读指令A0H从DATA中读出数据并保存图3.16MCM_Write子程序流程图TOC=0AH关闭TOC读SRACONDV=1?NYTE,BE=1?结束Y调用调用DISPLAY_ERR子程序6.停机子程序(Halt):“Halt”停机指令:指令指令代码(hex)相关的出错标志Halt(停机)50TE,BE表3.14表3.14停机指令表“Halt”停机指令将MIFARE1卡片设置为“HALTMODE”。例如,卡片已经退出使用等。卡片将保持“HALTMODE”状态,直到被复位。分析:当卡片中的余额不足时,将卡片停机,停止其使用,直到被充值后,才撤消其停机状态。Bcnts设置为10H;Bctnr设置为04H。发送停机指令50H。程序流程图:如图(3.17)。第4章系统的软件调试本次毕业设计使用的调试软件是Medwin,是专为51单片机设计的集成开发系统软件。4.1系统调试软件Medwin用Medwin开发应用程序:Medwin集成开发环境提供了两种方式开发用户应用程序:不使用项目管理的开发方式——对源程序文件直接进行汇编/连接方式。使用项目管理的开发方式——可进行多模块,混合语言编程方式。由于本次设计采用汇编语言进行编程,所以采用方式(1)。由于无仿真器,因此只可以查看程序运行过程中各个寄存器和数据区的变化。步骤如下:(1)关闭当前项目文件。选择主菜单中的“项目管理\关闭当前项目”。(2)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论