• 1.53 MB
  • 2022-04-22 13:43:18 发布

基于射频卡的电子门锁设计.doc

  • 67页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'基于射频卡的电子门锁设计毕业设计开题报告题 目基于射频卡的电子门锁设计学生姓名安林峰学号20097362班级方0953-4专业自动化 一、研究背景锁具经过漫长的发展,随着近代电子科学技术的进步,这个有着几千年历史的古董终于驾着新技术的帆船,承载着传统锁具的功用与现代电子的实用而跨入现代人们生活的科学便利化时代。门锁在发展的过程中种类有很多,门锁因控制技术不同,分为机械锁和电子锁两大类。传统的机械锁以其价格低廉和使用的方便性成为普通大众首选锁具,但是由于传统机械锁是用钥匙开启,所以锁体必须要有锁孔,而自从有锁以来,历代梁上君子都能运用一定的工具和技巧,轻易打开锁具,尤其是当今世界,各种先进的开锁工具层出不穷,开锁技术也更出神入化,传统的机械锁在社会发展过程中已经不能更好的保护使用者的安全了。而电子锁安全性较高,具有防盗报警功能的电子密码锁与传统的机械式密码锁相比,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。电子锁的表面一般都是密封的,防暴力破坏的能力强,也防止非法把异物插入锁内导致不同程度的破坏。在锁具的发展过程中电子锁优点显而易见,能很好的补充传统机械锁的不足之处,已经迅速占据锁具市场,进而取代机械锁成为主导门禁产品。门锁作为安全防范产品必须具有安全性和稳定性。安全性来衡量:抵抗故意破坏、恶作剧和蓄意的撬、钻等暴力破坏。在此方面,机械锁和电子门锁的机械强度一般都能够达到要求。但是电子门锁的控制部分使用电子电路,执行部分使用电磁铁和锁体,与传统的机械门锁相比,电子门锁在当下优点主要包括:电子门锁由于其保密性高,使用灵活性好,安全系数高,不用金属钥匙,安全可靠,使用方便。本设计即是设计一种基于射频卡的电子门锁,可很好的满足门锁的安全性和稳定性。二、国内外研究现状1.国外研究现状及特点本世纪70年代初期,国外研制成脱胎于机械锁的电子锁,并迅速应用于各种安全防盗领域,目前发达国家已经大规模地应用基于电子锁的智能门禁系统,可以通过多种更加安全、更加可靠的方法来实现门禁的管理。国外当下电子锁可分为磁卡门锁、IC卡门锁和射频卡门锁。在欧美日等经济发达国家,电子锁已成为具有规模效益的重要产业。目前,其销售额已占到锁具总销售额的七成以上,全球交易额已达50亿美元。 国外的电子锁具技术成熟,计算机、微电子、光刻、纳米等技术正在快速地、不断地向锁具产业注入,使锁具的安全性、可靠性不断得到提高。2.我国研究现状及特点作为锁具产业的重要构成并使之成为产业提升的重要因素的电子锁,国内研究和生产起步并不算晚。据有关资料记载,是始于80年代初天津、苏州等地的一些高等学府,直到90年代初,前后用了10年的时间,才迟迟进入普通电子锁的小批量生产,至今高保密级别电子锁的核心器件仍完全依赖进口,不利于我国电子锁产业的提升和发展。从国内生产电子锁之日起,锁的功能在较长的一段时间,仅是作了小的变化(如报警等)直到近年才出现用进口 专用芯片研发的计算机高保密级别的电子锁,实现系统网络监管。虽然现国内高档电子锁市场仍被国外产品所占领,但是国内制锁行业正对传统的锁具从设计、工艺材料等全方位的进行一场变革。可以预见,伴随着消费水品的不断提高,在科研人员的共同努力下,射频卡电子门锁会很快引导整个中国锁具市场,这将极大的提高了管理者的工作效率和管理区域内的安全程度。三、主要技术指标1.主要工作本设计包括硬件设计和软件设计两大部分。硬件部分:电源模块负责将DC12V电源转化成DC5V电源,设计电源电路。选用STC12C5204AD型单片机作为主控制芯片。继电器型号选择DC5V型产品,设计出驱动电路。射频模块采用WM-17TD模块,连接天线板接收射频卡的刷卡信号,设计该模块与单片机的接口电路。显示模块显示卡号和门锁状态,设计出显示电路。软件部分:编写主程序、显示程序、单片机与射频卡模块之间的通信程序等,实现控制功能。2.采用的方法、手段根据设计要求,电源电压选择DC12V,采用7805芯片将DC12V电源转化成DC5V电源。选用STC12C5204AD型单片机作为主控制芯片,采用SKDIP28封装。射频模块采用WM-17TD模块,将该模块与单片机串行通讯口直接相连。显示模块采用LCD1602显示,使用单片机的P1口和P2口与LCD1602相连。对以上各个电路使用Protel作图软件绘制出电路原理图,生成PCB图,做出实物。四、预期达到的结果刷卡时将从卡里读出的数据进行校验,校验正确后,吸合门锁继电器,模拟开门;如果校验失败,则门锁继电器不动作。指导教师签字时间  年 月日 摘 要本设计是以单片机为控制芯片,设计了射频卡电子门锁控制系统,以便于提高门锁的安全性。系统由主控模块、电源模块、射频模块、显示模块、门锁驱动模块五部分组成。单片机作为主控芯片,直接与射频卡之间进行数据传送,控制其他模块工作。电源模块将输入电源12V转换成5V电源,为电路中各模块提供电源;射频模块负责读取卡的信息,并和单片机进行数据传送;显示模块采用LCD1602显示器,显示卡号;驱动模块采用三极管驱动DC5V继电器动作,实现模拟开门。软件部分采用KeilC软件编程,能够实现单片机对各个模块控制。最终实现:刷卡时,单片机对卡号进行校验,校验成功后,上传卡号并显示刷卡的卡号,同时驱动继电器动作,实现模拟开门。关键词:射频卡 单片机 液晶显示器 AbstractThisdesignwithaRadioFrequencycardelectriclockcontrolsystemtakessingle-chipmicrocomputerasthecontrolchiptopromotethesecurityofdoors.Thesystemconsistsofthefollowingfiveparts:themastercontrolmodule,thepowersupplymodule,theRadioFrequencymodule,theshowmoduleandthelockdriversmodule.Asthemasterchip,thepowersupplymoduletakescontroloverothermodulesandperformsdatatransferwithRadioFrequencycarddirectly.Thepowersupplymoduleconvertstheincomingpowerfrom12Vinto5Vaswellasprovidespowersourcetoeachmodulesintheelectriccircuit.TheRadioFrequencymoduleisinchargeofreadingtheinformationofthecardaswellasperformingthedatatransferwithsingle-chipmicrocomputer.TheshowmoduleadoptsmonitorLCD1602todisplaycardnumber.ThedrivemoduleadoptstriodedriverDC5Vrelayactuationtorealizeanalogdooropening.ThesoftwareadoptsKeilCsoftwareprogrammingpartiallytofulfillthecontrolofsingle-chipmicrocomputeroverothermodules.Thefinalrealizationofdesign:whenswipingthecard,microcomputercheckscardnumber,ifthecheckissuccessful,itwilluploadsthecardnumberanddisplaysthecreditcardnumber,simultaneously,drivestherelayforactionandrealizessimulatingopenofthedoor.Keywords:Radiofrequencycard MCU LCD I 第1章 绪 论1.1 射频卡门锁研究背景锁具经过漫长的发展,随着近代电子科学技术的进步,这个有着几千年历史的古董终于驾着新技术的帆船,承载着传统锁具的功用与现代电子的实用而跨入现代人们生活的科学便利化时代。门锁因制锁技术与应用不同,分为机械锁和电子锁两大类。传统的机械锁以其价格低廉和使用的方便性成为普通大众首选锁具,但是由于传统机械锁是用钥匙开启,所以锁体必须要有锁孔,而自从有锁以来,历代梁上君子都能运用一定的工具和技巧,轻易打开锁具,尤其是当今世界,各种先进的开锁工具层出不穷,开锁技术也更出神入化,传统的机械锁在社会发展过程中已经不能更好的保护使用者的安全了。电子锁在安全技术防范领域具有防盗报警功能,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。在电子锁上,锁的表面一般都是密封的,防暴力破坏的能力强,也防止非法把异物插入锁内导致不同程度的破坏。在锁具的发展过程中电子锁优点显而易见,能很好的补充传统机械锁的不足之处,已经迅速占据锁具市场,进而取代机械锁成为主导门禁产品。随着我国对外开放的不断深入,高档建筑发展很快,高档锁具市场的前景乐观。我国锁具行业对锁具高新技术的投入正逐年增大,高档锁的市场需求也逐年增加。在安防工程中,门禁系统的锁具产品是关系到整个系统安全性的重要设备,所以锁具产品的优劣也关系了整个安防工程的质量和验收。电子锁正是当下电子产品与家居产品在技术方面结合后产生的一种锁具行业划时代的科技成果。电子门锁是电子元件和机械结构相结合的一种新颖门锁。集合了计算机技术、智能卡技术、精密电磁技术,是当今世界上最先进的门锁之一,在使用的方便性、防非法开启、智能管理等方面是机械锁无法比拟的。电子门锁的控制部分使用电子电路,执行部分使用电磁铁和锁体,与传统的机械门锁相比,电子门锁在当下优点主要包括:电子门锁由于其保密性高,使用灵活性好,安全系数高,不用金属钥匙,安全可靠,使用方便。当然相比之下其缺点也是显而易见的,缺点主要有以下几个方面:锁定时可能存在被打开,61 解锁时又可能存在不能被打开,用指纹或脸部扫描等人体器官等技术,严重存在危害使用者人身安全隐患,密码单一,密码钥匙之间可以说无兼容,密码更换复杂,电子产品抗干扰性能差,容易受强冷热、强电磁、强静电和湿度等影响。本设计即是设计一种基于射频卡的电子门锁,可很好的满足门锁的安全性和稳定性。1.2 电子门锁的发展市场上常见的电子门锁主要是磁卡、接触式IC卡、射频卡电子门锁。磁卡门锁是使用类似于我们银行卡、信用卡一类的卡,在卡上有条黑色的磁带作为储存“电子钥匙”的载体,但由于磁带会在与其他带磁性的物体放在一起时会存在消磁的情况,导致“电子钥匙”消失或减弱而不能正常使用开门,带来极大的不便。IC卡门锁是使用IC卡作为储存“电子钥匙”的载体,最多用于储值公共电话卡,这个技术对于现在是很成熟的,比磁卡要强,能永久的记录“电子钥匙”,直到芯片损坏为止。由于IC卡是接触式感应,在长期的使用和读取器的摩擦,会出现IC卡金手指损坏,导致不能使用,而且在一般家庭也能难维护,所以一般都不用于家庭,多用于酒店和商务场所。射频卡门锁按芯片分为:RF57、MIFARE-1、MIFARE-0等射频卡,由于是非接触式,所以一般只要不是把卡折成两半都能永久使用。在射频卡门锁上,锁的表面一般都是密封的,防暴力破坏的能力强,也防止非法把异物插入锁内导致不同程度的破坏。再者,射频卡中有快速防冲突机制,能防止卡片之间出现数据干扰,因此,读写器可以同时处理多张射频卡。这提高了应用的并行性,无形中提高了系统工作速度。智能卡在电子门锁中的应用也同样经历了三个阶段。综合上述三个门锁的优缺点磁卡门锁的传统市场已逐渐消失,接触式IC卡门锁的使用已经相当普遍,但是与射频卡门锁相比仍有不足,射频卡门锁目前全国的正处在上升期。射频卡读卡方便快捷,锁和卡的使用寿命长,完成“一卡通”系统的配套厂商众多,射频卡锁肯定是电子门锁的主流产品。61 第2章 基于射频卡的电子门锁设计要求及方案2.1 设计要求电源模块主要负责将DC12V电源转换成DC5V电源,使单片机、字符液晶LCD1602、继电器以及射频卡模块能够正常工作。射频卡模块读取射频卡信息,将读取的信息通过串口传送给单片机,单片机读取射频卡的信息并进行校验,校验成功后,使LCD1602字符液晶显示器显示射频卡卡号,并且驱动继电器动作。要求设计出该系统的硬件电路和软件部分,并做出实物。2.2 设计方案设计方案主要包括硬件和软件两部分。其中硬件系统主要由单片机、继电器、射频卡模块、显示几部分组成。系统框图如图2-1所示。射频卡DC12V显示模块单片机射频卡模块电源模块门锁驱动图2-1系统框图硬件部分:电源电压选择DC12V,电源模块需要将DC12V电源转化成DC5V电源,选用STC12C5204AD型单片机作为主控制芯片,负责与射频模块传输数据,控制门锁控制电路。为了降低成本用继电器代替电控锁来模拟开锁和关锁状态,继电器型号选择DC5V型产品。射频卡模块采用WM-17TD射频模块,在接收模块上连接天线,天线型号采用M1ANT20-2天线板。显示模块采用LCD1602字符液晶显示,主要对射频卡的卡号进行显示,显示门锁状态。61 软件部分:使用KeilC软件编程,实现功能主要分为三部分:显示部分、继电器驱动部分和射频模块。刷卡后,天线把信息传送给射频模块,单片机通过串口对射频模块读取的信息进行校验,校验成功后上传卡号并且对卡进行读写,同时单片机对继电器进行驱动,使继电器进行动作,单片机把上传的卡号通过LCD1602字符液晶显示器进行显示。61 第3章系统主要元器件介绍3.1 单片机介绍系统采用STC12C5204AD系列单片机。单片机内部包含中央处理器(CPU),程序存储器(Flash),数据存储器(SRAM),定时/计数器,UART串口,I/O接口,高速A/D转换,PCA,看门狗及片内R/C振荡器和外部晶体振荡电路模块。是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。STC12C5204AD系列单片机几乎包含数据采集和控制中所需的所有单元模块,可称得上一个片上系统[1]。主要特性如下:(1)增强型8051CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051。(2)工作电压:5.5V-3.3V。(3)工作频率范围:0-35MHz,相当于普通8051的0~420MHz。(4)用户应用程序空间8K字节。(5)片上集成256字节RAM。(6)通用I/O口(27/23/15/13/11个),复位后为:准双向口/弱上拉(普通8051传统I/O口)。可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏。每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55mA。(7)ISP(在系统可编程)/IAP9(在应用可编程),无需专用编程器,无需专用仿真器。可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片。(8)有EEPROM功能。(9)看门狗。(10)内部集成MAX810专用复位电路(外部晶体20M以下时,复位脚可直接1K电阻到地)。(11)内置一个掉电检测电路,在P1.2口有一个低压门槛比较器。5V单片机为1.32V,误差为+/-5%,3.3V单片机为1.30V,误差为+/-3%。(12)时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为+/-5%到+/-10%以内)用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟。常温下内部R/C振荡器频率为:11MHz~15.5MHz。(13)共4个16位定时器,两个与传统8051兼容的定时器/计数器,61 16位定时器T0和T1再加上2路PCA模块可再实现2个16位定时器。(14)2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟。(15)外部中断I/O口6路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断PCA模块,PowerDown模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,PCA0/P3.7,PCA1/P3.5。(16)PWM(2路)/PCA(可编程计数器阵列2路)。---也可用来当2路D/A使用。---也可用来再实现2个定时器。---也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持)。(17)A/D转换,8位精度ADC,共8路,转换速度可达300K/S(每秒钟30万次)。(18)通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口。(19)工作温度范围:-40-+85℃(工业级)/0-75℃(商业级)。(20)封装:SKDIP28有23个I/O口,I/O口不够时,可用2到3根普通I/O口线外接74HC164/165/595(均可级联)来扩展I/O口。STC12C5204AD芯片引脚如图3-1所示。图3-1STC12C5204AD引脚图P0端口(P0.0~P0.7):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线,此时,P0口是真正的双向口。在FlashROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。P1端口(P1.0~P1.7):P1口是一个带内部上拉电阻的8位双向I/O口。P161 的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。此外,P1.0和P1.1还可以作为定时器/计数器2的外部输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体见表3-1。P2端口(P2.0~P2.7):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX@DPTR”指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行“MOVX@R1”指令)时,P2口引脚上的内容(就是专用寄存器SFR区中的P2寄存器的内容),在整个访问期间不会改变。在对FlashROM编程和程序校验期间,P2也接收高位地址和一些控制信号。表3-1P1.0和P1.1口引脚复用功能引脚号功能特性P1.0T2(定时器/计数器2外部计数输入),时钟输出P1.1T2EX(定时器/计数器2捕获/重装触发和方向控制)P3端口(P3.0~P3.7):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。在对FlashROM编程或程序校验时,P3还接收一些控制信号。P3口除作为一般I/O口外,还有其他一些复用功能,如表3-2所示。RST:复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机的复位初始化操作。看门狗计时完成后,RST引脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚也用作编程输入脉冲。在一般情况下,ALE61 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址位8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOV指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。:外部程序存储器选通信号()是外部程序存储器选通信号,低电平有效。/VPP:访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,必须接GND。注意加密方式1时,将内部锁定位Vcc:运行和程序校验时接电源正端。Vss:接地。XTAL1:输入到单片机内部振荡器的反响放大器。当采用外部振荡器时,对HMOS单片微机,此引脚应接地;对CHMOS单片机,此引脚作驱动端。XTAL2:反相放大器的输出,输入到内部时钟发生器。当采用外部振荡器时,XTAL2接收振荡器信号,对CHMOS单片机,此引脚应悬浮。P3口各个引脚功能如表3-2所示。表3-2P3口引脚复用功能引脚号复用功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0的外部输入)P3.5T1(定时器1的外部输入)P3.6(外部数据存储器写选通)P3.7(外部数据存储器读选通)61 3.2 MAX232芯片和RS-232介绍3.2.1 MAX232的电气特性MAX232是一种把PC机的串行口RS232信号电平(-10,+10V)转换为单片机所用的TTL信号电平(0,+5V)的芯片,其中232是电荷泵芯片,可以完成两路TTL/RS-232电平的转换,它的9、10、11、12引脚是TTL电平端,用来连接单片机[2]。下面来介绍一下MAX232引脚图和引脚定义,引脚图如图3-2所示。图3-2MAX232引脚图其内部结构基本可分三个部分:第一部分是电荷泵电路。由1~6脚和4只电容构成。功能是产生+12V和-12V两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7~14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚DNG、16脚VCC(+5V)。3.2.2 RS-232串口的电气特性RS-232串口的原理图如图3-3所示,引脚功能如下:第1脚:DCD载波检测。主要用于Modem通知计算机其处于在线状态,即Modem检测到拨号音,处于在线状态。61 第2脚:RXD此引脚用于接收外部设备送来的数据;在你使用Modem时,你会发现RXD指示灯在闪烁,说明RXD引脚上有数据进入。图3-3RS-232引脚图第3脚:TXD此引脚将计算机的数据发送给外部设备;在你使用Modem时,你会发现TXD指示灯在闪烁,说明计算机正在通过TXD引脚发送数据。第4脚:DTR数据终端就绪;当此引脚高电平时,通知Modem可以进行数据传输,计算机已经准备好。第5脚:GND信号地。第6脚:DSR数据设备就绪;此引脚高电平时,通知计算机Modem已经准备好,可以进行数据通讯了。第7脚:RTS请求发送;此脚由计算机来控制,用以通知Modem马上传送数据至计算机;否则,Modem将收到的数据暂时放入缓冲区中。第8脚:CTS清除发送;此脚由Modem控制,用以通知计算机将欲传的数据送至Modem。第9脚:RIModem通知计算机有呼叫进来,是否接听呼叫由计算机决定。使用RS-232特性如下:(1)RS-232串口通讯最远距离是50英尺。(2)RS-232可做到双向传输,全双工通讯,最高传输率20kbps。(3)RS-232上采用传送的数字量采用负逻辑,且与地对称。3.3 LCD显示器液晶是一种特殊物质态,它不同于固体(晶体),又不同于液体和气体,有人把液晶称为第四态,简称“LC”,用它制成的液晶显示器件称为LCD[2]61 。液晶显示必须通过环境光来显示信息,其本身并不发光,因此,功耗很低,只要求液晶周围有足够的光强。必要时,可选用背光源来保证LCD显示信息。液晶必须由交流电压驱动,使用直流驱动会损坏LCD。液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。本次设计系统显示部分采用LCD1602液晶显示,是一种专门用于显示字母、数字、符号等点阵式LCD。1602LCD主要技术参数:显示容量为16×2个字符,工作电流为2.0mA(5.0V),模块最佳工作电压:5.0V,字符尺寸2.95×4.35(W×H)mm。一般1602字符型液晶显示器实物如图3-4所示。图3-4LCD液晶显示器引脚图如图3-5所示。图3-5液晶显示器的管脚第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10kΩ的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。61 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的[3]。LCD1602的操作时序如表3-3所示。表3-31602操作时序RSR/W操作说明00写入指令码D0~D701读取输出的D0~D7状态字10写入数据D0~D711从D0~D7读取信息3.4 WM-17TD射频刷卡模块3.4.1 射频卡工作原理非接触式IC卡又称射频卡,是世界上最近几年发展起来的一项新技术,它成功地将射频识别技术和IC卡技术结合起来,解决了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破。卡片的电气部分只由一个天线和ASIC组成,没有其它外部器件。天线:卡片的天线是只有几组绕线的线圈,很适于封装到ISO卡片中。ASIC:卡片的ASIC由一个高速(106KB波特率)的接口,一个控制单元和一个8K位EEPBOM组成。M1卡是射频卡中的一种,Ml射频卡的工作原理是:读写器向Ml卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可作为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。61 3.4.2 射频模块及其工作方式17TD读写模块是一款可以读写MifareOne卡的读写设备,这款读写卡器有两种操作模式:主动上传模式和被动上传模式,模块上电时默认为主动上传模式。主动上传模式:当有人刷卡时,模块主动上传卡号,当计算机发送检测卡命令后模块就转入被动上传模式。被动上传模式:这时模块不再主动上传卡号,只有计算机发送检测卡命令时模块才返回是否有卡的命令上传卡号。发送检测卡命令会使模块进入被动上传模式,模块断电重新上电后可以恢复到主动上传卡号的状态。射频模块与单片机通讯时直接使用串口中断接收数据。默认使用主动上传模式,这时当有人刷卡时模块主动上传卡号,当计算机发送检测卡命令后模块就转入被动上传模式。实物图如图3-6所示。图3-6模块实物图射频接收模块有9个引脚:第1脚:VCC为5V电源。第2脚:接单片机中断(可接可不接)。第3脚:悬空。第4脚:数据发送引脚。第5脚:数据接收引脚。第6脚:GND接地。第7脚:接天线板TXT1。第8脚:接天线板TXT2。第9脚:天线接收引脚。61 3.4.3 射频模块存贮结构射频卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,我们也将16个扇区的64个块按绝对地址编号为0~63。存贮结构如下图3-7所示。图3-7存贮位置结构图第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改。每个扇区的块0、块1、块2为数据块,可用于存贮数据。每个扇区的块3为控制块,包括了密码A、存取控制、密码B。具体结构如图3-8所示。A0A1A2A3A4A5  FF078069    B0B1B2B3B4B5密码A(6字节) 存取控制(4字节)密码B(6字节)图3-8块3具体结构图每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控制位。61 3.4.4 射频模块通讯协议3.4.4.1配置模块命令配置模块命令用于设置模块的串口波特率和是否300毫秒延时,当关闭300毫秒延时的时候必须发关卡命令关卡,否则模块将不能进行下一轮的自动寻卡。当不知道模块的配置参数时用下述波特率挨个测试配置命令即可,模块接收到正确的配置命令返回成功配置命令后模块不再工作必须重新上电才可以正常工作。具体格式如下:命令头:固定为2个字节的AAFF。命令类型:1字节的FE。波特率:00:240001:480002:960003:1920004:5760005:115200300毫秒延时:00表示关闭300毫秒延时,FF表示打开300毫秒延时。校验码:1个字节,从命令头的第一个字节到命令参数的最后一个字节的异或结果。命令总长度:6个字节长度。成功返回:BBFFFE校验码。3.4.4.2上传卡号命令上传卡号命令指模块通过天线读到卡后会主动通过此命令发送给主机。具体格式如下:命令头:固定为2个字节的BBFF。命令类型:1字节的00。卡号:4字节的卡号,顺序自左至右从高到低。校验码:1个字节,从命令头的第一个字节到命令参数的最后一个字节的异或结果。命令总长度:8个字节长度。3.4.4.3读卡命令读卡命令用于读取卡片中指定数据块的16个字节数据。具体格式如下:命令头:固定为2个字节的AAFF。命令类型:1字节的10。块号:要读取的块号。密码类型:A密码或B密码,A密码时为60,B密码时为61。密码:要读取块号的密码。61 校验码:1个字节,从命令头的第一个字节到命令参数的最后一个字节的异或结果。命令总长度:12个字节长度。读取正确后模块返回:BBFF1016字节数据校验码。读取失败后模块返回:BBFFA0校验码。密码验证失败后模块返回:BBFFA1校验码。3.4.4.4写卡命令写卡命令用于将16个字节的数据写入卡片中的指定数据块。具体格式如下:命令头:固定为2个字节的AAFF。命令类型:1字节的20。块号:要写入的块号。密码类型:A密码或B密码,A密码时为60,B密码时为61。密码:要写入块号的密码。数据:16字节的数据。校验码:1个字节,从命令头的第一个字节到命令参数的最后一个字节的异或结果。命令总长度:28个字节长度。写入正确后模块返回:BBFFAF校验码。写入失败后模块返回:BBFFA0校验码。密码验证失败后模块返回:BBFFA1校验码。3.4.4.5检测卡命令检测卡命令用于检测卡片是否在刷卡区,同时可以选择检测卡片的方式,发送此命令后模块就不会再主动上传卡号,必须发送此命令模块才返回当前模块上是否有卡,模块重新上电可以使模块回到主动上传卡号的状态。具体格式如下:命令头:固定为2个字节的AAFF。命令类型:1字节的70。检卡方式:检测卡片的方式26:只能检测到一次52:只要卡片在刷卡区总是可以检测到。校验码:1个字节,从命令头的第一个字节到命令参数的最后一个字节的异或结果。命令总长度:5个字节长度。检测到卡返回:BBFF704个字节卡号校验码。61 无卡返回:BBFFA0校验码。3.4.4.6关卡命令关卡命令用于使模块回到主动寻卡状态。具体格式如下:命令头:固定为2个字节的AAFF。命令类型:1字节的40。校验码:1个字节,从命令头的第一个字节到命令参数的最后一个字节的异或结果。命令总长度:4个字节长度。3.5 DC5V继电器继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。当输入量(如电压、电流)达到规定值时,使被控制的输出电路导通或断开的电器。具有动作快、工作稳定、使用寿命长、体积小等优点。广泛应用于电力保护、自动化、运动、遥控、测量和通信等装置中。根据题目要求实现通过对射频卡的密码校验来驱动门锁使房门打开,但是实际条件有限,考虑到门锁工艺、成本以及时间等方面的因素,门锁驱动部分使用DC5V的继电器代替,继电器选用的是JQC-3F-C型号额定电压DC5V,最大转换电流15A,最大转换电压DC16V。继电器原理图如图3-9所示。第1脚:GND接地。第2脚:VCC电源。第3脚:接1kΩ再连接电源VCC。第4脚:接三极管触发极。第5脚:GND接地。图3-9继电器原理图61 3.6 稳压芯片7805三端稳压集成电路,实物如图3-10所示,由于系统采用12V电源供电,但是系统供电电源为5V,在电源模块需要将12V电压转换成5V电源给系统供电,根据7805稳压芯片的工作特性,在此选择7805作为电压转换芯片。顾名思义,三端IC是指这种稳压用的集成电路,只有三条引脚输出,分别是输入端、接地端和输出端。图3-107805稳压芯片实物图7805稳压芯片主要技术参数如表3-4所示。表3-47805稳压芯片技术参数参数符号典型值单位输出电压Vo5.0V静态电流IQ5.0mA输入输出电压差Vo2.0V输出阻抗Ro15mΩ短路电流1SC230mA峰值电流1PK2.2mA用78/79系列三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。该系列集成稳压IC型号中的78或79后面的数字代表该三端集成稳压电路的输出电压,如7806表示输出电压为正6V,7909表示输出电压为负9V。61 当制作中需要一个能输出1.5A以上电流的稳压电源,通常采用几块三端稳压电路并联起来,使其最大输出电流为N个1.5A,但应用时需注意:并联使用的集成稳压电路应采用同一厂家、同一批号的产品,以保证参数的一致。另外在输出电流上留有一定的余量,以避免个别集成稳压电路失效时导致其他电路的连锁烧毁。在实际应用中,应在三断集成稳压电路上安装足够大的散热器(当然小功率的条件下不用)。当稳压管温度过高时,稳压性能将变差,甚至损坏。61 第4章硬件电路设计4.1单片机最小系统如图4-1所示为单片机最小系统的电路图。主要由电源电路、复位电路和晶振电路组成。图4-1单片机最小系统单片机通常有上电复位和按键复位两种复位方法。本系统复位电路采用上电复位,通过电容与电阻串接方式来实现,选择0.1uF的电容和1kΩ电阻如图4-1联接,构成微分电路,在联接处与单片机复位引脚联接。上电时,由于电容两端的电压不能突变,所以单片机复位引脚会得到一个瞬时高电平,此后随着电容两端电压升高,复位引脚电平会慢慢降低,直到电压为0V,复位结束,单片机开始执行内部程序,高电平维持时间由电容与电阻的取值决定,只要这个时间足够宽,单片机就能正常复位。每个单片机系统里都有晶振,全称叫晶体震荡器,在单片机系统中,晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。晶振部分主要元器件包括2个33pF电容和1个11.0592MHz晶振组成[4]。为了使单片机能够更加稳定的工作,在PCB图布局时尽量使晶振靠近单片机,两个电容对称分布在晶振两侧。61 4.2继电器驱动电路如图4-2所示为继电器驱动电路。Q1为型号9012的PNP型三极管,基极与单片机P2.1连接构成了继电器的驱动电路,D5为继电器放电回路二极管,其型号是1N4007的硅整流二极管。继电器选用的是JQC-3F-C型号,额定电压DC5V,最大转换电流15A,最大转换电压DC16V。为了防止继电器内部线圈产生的感应电流把三极管烧毁在继电器两端并联一个续流二极管。工作原理:要让继电器动作,必须给继电器施加电压。由于单片机驱动能力弱不足以直接驱动继电器,所以用三极管放大电流电压。单片机编程中使P2.1口输出低电平,PNP三极管导通进而使继电器线圈通入5V电源使继电器的触点动作,最后使继电器动作指示灯D4点亮。图4-2继电器驱动电路4.3射频模块电路如图4-3是本设计的射频模块的电路。系统射频模块选用WM-17TD型号的射频模块。卡片的电气部分只由一个天线和ASIC(IC)组成。卡片的天线是只有几组绕线的线圈,很适于封装到IS0卡片中。卡片的ASIC由一个高速(106KB波特率)的RF接口,一个控制单元和一个定容量的EEPROM组成。工作原理为读写器电路向IC卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可作为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。61 读写器接取的数据通过串行口传送到单片机中,单片机把接收的卡号进行校验,校验成功后执行显示和驱动部分的控制。图4-3射频模块驱动电路4.4电源电路如图4-4是本设计的电源模块,系统中的显示模块、单片机模块和射频模块电源由电源模块供给电源,电压大小为DC5V。设计要求需要将DC12V电源转换成DC5V电源,电源电路使用7805稳压芯片转换最为简单。7805稳压芯片前后都需要加上电解电容和普通电容,作用是消除低频和高频干扰波。在稳压芯片前面加入电源指示灯,更直观判断电源是否正常接入电路[5]。在实际应用中,由于电压转换产生很强的热量,调试硬件电路时由于7805芯片不能及时散热导致在通电一段时间后7805稳压芯片被烧毁,通过查阅资料,在7805稳压芯片前面加入散热电阻,电阻大小为68R/2W,可以很好的解决这一难题。图4-4电源电路原理图4.5LCD显示电路如图4-5是本设计的液晶显示的驱动电路。选择LCD1602型号字符液晶显示器。供电电压为DC5V。LCD字符液晶显示器选用显示容量为16*2个字符,1602LCD分为带背光和不带背光两种,其61 控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,在电路中连接有10kΩ的电位器,通过电位器可以调节显示字符的亮度。由于此处液晶显示的是卡号和读写卡的状态,所以本系统采用的是LCD1602型号的静态显示器。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。图4-5LCD液晶显示电路61 第5章软件设计系统软件部分包括主程序部分,射频卡上传卡号部分和LCD显示部分。主程序部分主要是对射频模块和显示模块操作,驱动继电器动作。射频卡上传卡号部分是对射频卡卡号进行上传卡号。LCD显示部分主要是显示上传的卡号以及门锁状态。5.1主程序模块如图5-1所示,进入主程序后先对串口和LCD显示进行初始化,然后判断中断是否执行,若中断执行则对卡号进行校验,通过查询方式校验卡号,校验成功后,对卡进行读写操作,同时把门锁打开并显示门锁状态处于开锁状态,LCD此时显示“OPEN”字符,延时数秒后门锁自动关锁,LCD显示“CLOSE”字符,清显示。开始1延时串口和LCD显示初始化NY串口中断是否执行?2显示上传的卡号发送检测卡命令检测卡片?NY361 读写卡开门锁显示门锁状态关闭门锁显示门锁状态延时清显示231图5-1主程序流程图中断标志位RI=1?标志位Sinterrupt=1RI=0校验卡号是否正确?标志位Sinterrupt=0NNYY开始返回5.2射频卡上传卡号图5-2中断程序流程图61 如图5-2所示为串口中断程序流程图。执行串口中断校验卡号,清中断标志位,如果校验正确,标志位Sinterrupt=1;如果校验卡号错误,标志位Sinterrupt=0。5.3LCD显示模块显示初始化,主要包括设置显示方式、延时、清理显示缓存和设置显示模式。设置显示地址,指字符所要显示的位置,写所要显示的字符。LCD液晶显示系统流程图如图5-3所示。开始显示是否结束?预设数据显示在指定区域调整指针指向LCD的下一行清显示RAM区置显示行初值,显示指针指向第一行N待显示数据送入缓冲区Y返回图5-3LCD显示流程图61 本次设计的显示部分主要包括对门锁状态和上传的卡号进行显示。门锁状态通过显示字符串程序执行。对卡号显示有点困难,接收的卡号为16进制数据,因为LCD显示器只能显示字符,所以需要将16进制数据转换成ASCII码,然后显示卡号。61 第6章结 论在本次毕业设计过程中,很大程度上提高了自己的动手能力,遇到的硬件和软件上的问题在老师和同学的帮助下一一得到解决。以下是我在毕业设计的总结以及出现的问题跟大家分享一下。首先通过这几个月的学习,无论是硬件的选取、接线、焊接,还是软件的编程和调试都很好的实现了任务书里面要求完成的任务,从而把理论和实际能很好的结合,能够把在制作实物的过程中出现的问题解决。由于设计经验的不足和所掌握知识的限制,系统的某些功能设计构想还没有完整的表达出来,硬件电路、软件部分都还存在着不足和需要改进的地方。硬件部分:在PCB布局图的时候考虑不周全,有些元器件在后期需要但是在布局的时候并未添加。焊接技术不够熟练,焊接的元器件有虚接等故障,在以后的工作中需要增加自己的动手能力。软件部分:在编写程序过程中,虽然在功能上实现了设计要求所要实现的功能,但是程序并不精简,许多繁琐的程序在熟练掌握编程软件情况下可以更加精简,在以后学习中应该加强自己的编程能力,熟练使用编程软件。可以相信,射频卡门锁的出现,让越来越多的现代人感受到科技在真实生活中的广泛性。任何新技术、新产品的面世并不是一步到位,而是在不断的技术进步与完善后才得以以完美的形式展现在世人面前。射频卡门锁正是当下电子产品与家居产品在技术方面结合后产生的一种锁具行业划时代的科技成果。大家只要加大电子锁的安全性、通用性,方便性和易移植性方向的研发,射频卡门锁将完全取代机械锁日子指日可待。61 参考文献[1]高峰.单片微型计算机原理与接口技术[M].第二版.北京:科学出版社,2009.[2]赵广林.常用电子元器件识别/检测/选用一读通.北京[M].电子工业出版社,2009.[3]范红刚,魏学海,任思璟.51单片机自学笔记[M].北京:北京航空航天大学出版社,2010.[4]谢自美.电子线路设计实验测试(第二版).武汉:华中理工大学出版社,2000.[5]ShirleyPA.Anintroductiontoultrasonicsensing[J].Sensors,1989.[6]康华光.《电子技术基础》(模拟部分第五版)[M].高等教育出版社,2005.[7]周坚.单片机轻松入门[M].第二版.北京:北京航空航天大学出版社,2007.[8]刘卫国.C语言程序设计[M].北京:铁道大学出版社,2008.[9]徐爱钧,彭秀华《KeilCx51V7.0单片机高级语言编程与uVision2应用实践》[M].电子工业出版社,2004.[10]戴佳,戴卫恒.51单片机C语言应用程序设计实例精讲[M].北京:电子工业出版,2006.[11]吴晓峰.射频识别技术[M].北京:电子工业出版社,2006.[12]夏继强.单片机实验与实践教程[M].北京:北京航空航天大学出版社,2001.[13]StephanZwahlen.ConstantinnovationsdemandedbyPCBtools:IndustialDiamondReview[J],2004.[14]蒋鸿雁.微波与射频技术试验教程[M].广州:中山大学出版社,2008.[15]周明德.微机原理与接口技术[M].人民邮电出版社,2006.61 致 谢行文至此,我的这篇论文已接近尾声,毕业设计是我大学本科学习的过程向学校、社会交出的一张总结答卷。它不仅是我对大学四年所学知识的总结,也是把所学知识融会贯通运用到实践中的一次尝试,是衡量我四年学习成果的一个必要标准。在学校的学习生活即将结束,回顾四年来的学习经历,面对现在的收获,我感到无限欣慰。通过此次的毕业设计,使我深刻的巩固以往的所学的专业知识。在毕业设计过程中,通过翻阅有关电路图绘制方面的书集,拓宽了我的知识面,并且在算法实现过程中经过了反复思考的过程。这让我能够深刻的体会到基础的理论知识与实际实现还是存在的差异,实际应用中还要考虑各个方面的因素,这给我以后的学习和工作奠定了坚实的基础。在本论文的写作过程中,我的导师老师倾注了大量的心血,从选题到开题报告,从写作提纲,到一遍又一遍的指出稿中的具体问题,严格把关,循循善诱,同时在制作实物过程中,遇到的好多问题在马老师的悉心指导下一一得到解决,在此我表示衷心感谢。同时我还要感谢在我学习期间给我极大关心和支持的各位老师以及关心我的同学和朋友。由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正!61 附 录附录A 外文资料AT89C51In-CircuitProgrammingThisapplicationnoteillustratesthein-circuitprogrammabilityoftheAtmelAT89C51Flash-basedmicrocontroller.Guidelinesfortheadditionofin-circuitprogrammabilitytoAT89C51applicationsarepresentedalongwithanapplicationexampleandthemodificationstoitrequiredtosupportin-circuitprogramming.AmethodisthenshownbywhichtheAT89C51microcontrollerintheapplicationcanbereprogrammedremotely,overacommercialtelephoneline.Thecircuitrydescribedinthisapplicationnotesupportsfivevoltprogrammingonly,requiringtheuseofanAT89C51-XX-5.ThestandardAT89C51requires12voltsforprogramming.ThesoftwareforthisapplicationmaybeobtainedbydownloadingfromAtmel’s.GeneralConsiderationsEA/VPPmustbeheldhighduringprogramming.Inapplicationswhichdonotutilizeexternalprogrammemory,thispinmaybepermanentlystrappedtoVCC.Applicationsutilizingexternalprogrammemoryrequirethatthispinbeheldlowduringnormaloperation.RSTmustbeheldactiveduringprogramming.Ameansmustbeprovidedforoverridingtheapplicationresetcircuit,whichtypicallyassertsRSTonlybrieflyafterpowerisapplied.PSENmustbeheldlowduringprogramming,butmustnotbedrivenduringnormaloperation.ALE/PROGispulsedlowduringprogramming,butmustnotbedrivenduringnormaloperation.Duringprogramming,AT89C51I/Oportsareusedfortheapplicationofmodeselect,61 addressesanddata,possiblyrequiringthatthecontrollerbeisolatedfromtheapplicationcircuitry.Howthisisdoneisapplicationdependentandwillbeaddressedhereonlyingeneralterms.PortUsedforInputDuringprogramming,thecontrollermustbeisolatedfromsignalssourcedbytheapplicationcircuitry.Abufferwiththreestateoutputsmightbeinsertedbetweentheapplicationcircuitryandthecontroller,withthebufferoutputsthree-statedwhenprogrammingisenabled.Alternately,amultiplexermightbeusedtoselectbetweensignalsources,withsignalsappliedtothecontrollerbyeithertheapplicationcircuitryortheprogrammercircuitry.PortUsedforOutputNocircuitchangesarerequirediftheapplicationcircuitrycantoleratethestatechangeswhichoccurattheportduringprogramming.Ifthepriorstateoftheapplicationcircuitrymustbemaintainedduringprogramming,alatchmightbeinsertedbetweenthecontrollerandtheapplicationcircuitry.Thelatchisenabledduringprogramming,preservingthestateoftheapplicationcircuitry.AnApplicationExampleThisapplicationwasselectedforitssimplicityandabilitytoshowgraphicallytheresultsofin-circuitreprogramming.Thetexttobedisplayedisprogrammedintothecontrolleraspartofitsfirmware,andcannotbechangedwithoutreprogrammingthedevice.Thedisplayedtextispresentedinoneoftwomodesselectedbythefour-positionDIPswitch.Inthefirstmode,onecharacteratatimeentersthedisplayfromtherightandmovesquicklytotheleftthrougheachelementofthedisplaytoitsfinalpositionintheassembledmessage.Inthesecondmode,themessagemovesthroughthedisplay,fromrighttoleft,withthedisplayactingasawindowontothemessage.Thismodeisfamiliarasthemethodoftenusedindisplaysofstockprices.TheoutputconsistsoffourDL1414T,four-digit,17-segmentalphanumericdisplays61 withintegraldecodersanddrivers.Thisyields16totaldisplayelements,eachcapableofdisplayingdigits0-9,theuppercasealphabet,andsomepunctuationcharacters.ThedisplayablecharactercodesareASCII20H-5FH.Apower-onresetcircuitanda6-MHzcrystaloscillatorcompletetheapplication.Neitherexternalprogrammemorynorexternaldatamemoryisused.ModificationstotheApplicationtoSupportIn-CircuitProgrammingFigure2showstheapplicationmodifiedforin-circuitprogramming.Wheninactive,willneitherdrivenorexcessivelyloadtheapplication.Sincetheapplicationdoesnotuseexternalprogrammemory,EA/VPPonthecontrollerisconnectedtoVCC.Thismeetstherequirementforprogramming.Theresetcircuithasbeenmodifiedbytheadditionoftwotransistors,whichallowRSTonthecontrollertobeforcedhighbytheprogrammer.PSENandALE/PROG,unusedinthebasicapplication,areunderthedirectcontroloftheprogrammer.ProgrammingrequiresprogrammeraccesstoallofthefourAT89C51I/Oports,asdocumentedinthedatasheet.Theprogrammerisconnecteddirectlytothosecontrollerpinswhichareunusedbytheapplication,whileaccesstopinsusedbytheapplicationrequiresspecialtreatment,asexplainedinthefollowingparagraphs.TheleastsignificantfourbitsoftheaddressgeneratedbytheprogrammeraremultiplexedontoportoneofthecontrollerwiththedatafromtheDIPswitch.Notethatthefourresistorsaddedattheswitcharenotrequiredinthebasicapplication,sincetheAT89C51providesinternalpull-upsonportone.Duringthenormaloperationoftheapplication,controllerportszeroandtwoprovidedataandcontrolsignals(respectively)tothedisplays.Duringprogrammingandprogramverification,theprogrammerassertscontrolofportzeroandpartofporttwo.Theprogrammerisconnectedtoportszeroandtwowithoutbuffering,since,wheninactive,itspresencedoesnotaffectthenormaloperationoftheapplication.61 Atransparentlatchhasbeenaddedbetweenporttwoofthecontrollerandthedisplaycontrolinputs.Thelatchholdsthedisplaycontrolsignalsinactiveduringprogramming,whicheliminateserraticoperationofthedisplaysduetoprogrammeractivityonportszeroandtwo.Noisolationofthedisplaydatainputsisrequired,sincedataappliedtotheinputsisignoredwhenthecontrolsignalsareinactive.TheAT89C51resetcircuit,inputmultiplexerandoutputlatcharecontrolledbyasinglesignalgeneratedbytheprogrammer.Duringprogramming,resetisasserted,themultiplexerswitchesinputs,andthelatchfreezesthedisplaycontrollines.Toensurethatthedisplaycontrollinesareinaknownstatebeforetheyarelatched,anAT89C51externalinterruptisusedtoallowtheprogrammertosignaltheapplicationbeforeassertingreset.Theapplicationfirmwarerespondstotheinterruptbydisplayingamessageanddeactivatingthedisplaycontrollines.Afterprogramming,whenresetisdeasserted,thecontrollerportsarehighasthelatchbecomestransparent.Sincethedisplaycontrolinputsareinactivehigh,thedisplaycontentsarenotdisturbeduntilthenewprogramwritesthedisplay.Althoughnotessentialtothisapplication,itmightbeimperativeinsomeapplicationsthatthestateoftheperipheralcircuitrynotbedisturbedduringprogramming.TheProgrammerTheprogrammer(Figure3)generatestheaddresses,dataandcontrolsignalsnecessarytoprogramtheAT89C51embeddedintheapplication.TheprogrammercircuitryconsistsofanAT89C51andanRS-232leveltranslator.Thecontrollerrunsat11.0592MHz,whichallowstheserialporttooperateatanumberofstandardbaudrates.AMaximMAX232linedriver/receiverproducesRS-232levelsattheserialinterfacewhilerequiringonlyafivevoltsupply.Manyofthesignalsgeneratedbytheprogrammerareconnecteddirectly,withoutbuffering,totheAT89C51intheapplication.Thesesignals,wheninactive,arenotthreestated,butarepulledhigh.TheAT89C51hasinternalpull-upsofapproximatelythreeKohmsonportsone,twoandthree.Becauseportzerodoesnothaveinternalpull-ups,61 externalpull-upsoftenKohmshavebeenaddedtopermitproperoperationofprogramverificationmode.Thesampleapplicationoperatescorrectlyinthisenvironment.Ifrequiredforcompatibilitywithanapplication,programmersignalsmaybebufferedwiththree-statebufferssimilartothe74xx125.TheAT89C51intheprogrammerdoesnotutilizeexternalprogramordatamemory,whichwouldrequiresacrificingneededI/Opins.ThisrequiresthatprogramcodeandI/Obuffersbekeptsmallenoughtofitinon-chipmemory.RemoteProgrammingOveraCommercialTelephoneLineTheprogrammeranddisplayapplicationdescribedpreviouslyareconnectedtoaphonelineviaamodemataremotesite.Usingapersonalcomputerwithamodem,ausercanuploadanewprogramcontaininganewmessage,whichisprogrammedintotheAT89C51embeddedintheapplication.Whenprogrammingiscomplete,theapplicationexecutesthenewprogram,whichdisplaysthenewmessage.LocalStationThelocalstationinthetestconfigurationconsistsofanIBMPCAT-classcomputerconnectedtoaHayes-compatible,Prometheus1200baudmodem.Themodemwasselectedbecauseitwasinexpensiveandavailable.Afastermodemmaybeusedifdesired,althoughoncethefiletransmissiontimeisreducedbelowoneminute,furtherreductionsintransmissiontimedonotfurtherreduceconnecttimecharges.Apossibleadvantagetohighertransmissionspeedsistheautomaticerrordetectionandcorrectionavailableinsomehighspeedmodems.ProcommPlusversion2.01,acommercialdatacommunicationspackage,isusedtoconfigurethemodem,setupcommunicationsparameters,andestablishalinkwiththeremotemodem.ProcommPlusincludesamacrolanguagecalledASPECT,whichallowstheusertowriteandcompilescriptswhichimplementcustomfiletransferprotocols.AsimpleASPECTscriptwaswrittentoreadthecontentsofaprogramfileanduploadittotheremoteprogrammer.Thefiletransferprotocol(FTP)implementedisasimplesend-and-wait,61 packet-orientedprotocol.ThetransmitandreceivemodesoftheFTPareillustratedbytheflowchartsinfigures4and5,respectively.Thetransmittersendseachpacketwithoutflowcontrolandwaitsforaresponse.Theprogrammer(thereceiver)readsanddissectsthepacketwhilecalculatingachecksum.Ifthecalculatedchecksumisvalid,theprogrammeracknowledgesthepacketbysendinganACK.Ifthechecksumisinerror,theprogrammernegativelyacknowledgesthepacketbysendingaNAK.UponreceiptofanACK,thetransmittersendsthenextpacket.IfthetransmitterreceivesaNAK,itresendsthesamepacket.Transmissionproceedsinthismanneruntiltheentirefilehasbeentransferred.TheprogrammermightrespondtoapacketbysendingaCAN,whichindicatesthatanon-recoverableerrorhasoccurredandthatthetransmittershouldimmediatelyabortthefiletransfer.Iftheprogrammerfailstorespondtoapacketwithinalimitedperiodoftime,thetransmitterwillresendthesamepacket.Thetransmitterwillcontinuetoresendthesamepacketuntilavalidresponseisreceivedoruntiltheallowednumberofattemptsisexceeded,atwhichtimethefiletransferisaborted.Aftereachpacketisreceivedandvalidatedbytheprogrammer,thedatacontainedinthepacketisprogrammedintotheAT89C51controllerintheapplication.Afterprogramming,thedataisreadbackfromthecontrollerandverifiedagainstthereceivedpacketdata.Successfulverificationindicatessuccessfulprogramming,causingtheprogrammertosendACKtothetransmitter.Ifprogrammingfails,theprogrammersendsCANtosignalthetransmittertoabortthefiletransfer.ThesimplicityoftheFTPreducestheamountofAT89C51programmemoryusedintheprogrammer.Thesend-andwaitnatureoftheFTPallowsinter-packetdelaysduetoAT89C51programanderasetimestobeeasilyabsorbed.Supportforprogramverificationistransparent,requiringnoexplicitcommandorresultcodes,oradditionaldatatransfers.ThefileswhichareuploadedtotheprogrammerarecreatedwiththetoolsintheIntelMCS-51SoftwareDevelopmentPackagefortheIBMPC.IncludedinthepackagearetheMCS-51MacroAssembler,MCS-51RelocatorandLinker,andausefulutility,OH.OHconvertsanabsolute8051objectfiletoanequivalentASCIIhexadecimalobjectfile.61 TherecordsinthehexfileproducedbytheOHutilityserve,unchanged,asthepacketsintheFTPdescribedabove;noservicefieldsneedtobeadded.Thecolonwhichbeginseachrecordservesasthepacketsignaturefield.Theloadaddressfieldservesasthepacketsequencenumber.Achecksumisprovidedasthelastfieldineachrecord.Sinceseven-bitASCIIcodingisutilized,theeighthbitofeachbyteisavailabletobeusedforparitychecking.BecausetheAT89C51intheprogrammerdoesnotutilizeexternaldatamemory,necessarypacketbufferingmustbedoneusinginternalRAM.LimitedmemoryprecludestheuseofconventionalFTPswhichutilizepacketsof128bytesandlarger.Thehexpacketformatusedinthisapplicationlimitspacketdatafieldsto16orfewerentries,requiringlittlememoryforbuffering.Thereadyavailabilityofautilityforcreatingthepacketizedprogramfile,combinedwithsmallpacketsizeandadequateerrorchecking,makesthehexpacketformatanearidealsolutionforthisapplication.AdisadvantageistheuseofASCII,whichrequireseachprogramdatabytetobeexpressedastwohexcharacters.Thisdemandsthatnearlytwiceasmanybytesbetransferredasmightotherwiseberequired.Thisisnotaseverelimitation,however,sincetypicalfiletransfertimesarelessthanoneminute.Overall,thesimplicityofthecustomFTP/hexpacketformatimplementationoutweighsthedrawbacks.RemoteStationTheremotestationinthetestconfigurationconsistsofthedisplayapplicationandprogrammercircuits,describedpreviously,connectedtoaHayes-compatible,Prometheus1200baudmodem.Duringnormaloperation,theapplicationexecutesitsinternalprogramwhilethemodemandprogrammermonitorthephonelineforincomingcalls.Afteracallhasbeendetectedandaconnectionestablished,theprogrammerforcestheapplicationtosuspendexecutionofitsprogram.ThenewprogramisthendownloadedandprogrammedintotheAT89C51embeddedintheapplication.Whenprogrammingiscomplete,theapplicationisallowedtobeginexecutionofitsnewprogram,andtheprogrammerreturnstomonitoringthephonelineforthenextcall.61 Theprogrammerpowersupwithitsprogrammingcontroloutputsinactive,allowingtheapplicationtorunnormally.Afterconfiguringthemodemtoanswerincomingcalls,theprogrammerputsitselftosleep.Theprogrammerwillnotdisturbtheapplicationuntilanewprogramistobedownloaded.TheprogrammercontrolsthemodembysendingASCIIcommandstringsovertheserialinterface,towhichthemodemrespondswithHayes-styleASCIInumericcodes.ThesoftwareisdesignedforusewithHayes-compatiblemodems,whichincludesthePrometheusProModem1200usedhere.Theserialinterface,throughwhichtheprogrammerconnectstothemodem,supportstwohandshakingsignals,DTRandDSR.Onpowerup,theprogrammerassertsDTR,towhichthemodemrespondsbyassertingDSR.Ifthemodemshouldfailtorespondtoanycommand,includingthecommandtohangup,theprogrammerdeassertsDTR,whichforcesthemodemtodroptheline.Themodemmonitorsthephonelinewhiletheprogrammersleeps,waitingforanincomingcall.Whenacallisdetected,themodemanswersandattemptstoestablishcommunicationwiththecaller.Ifaconnectionisestablished,themodemsendsacodetotheprogrammer,wakingitup.Theprogrammerverifiestheconnectcodeandbeginspollingforavalidpacketheader.Incomingpacketsmustarrivefewerthanthirtysecondsapart,orthemodemdropstheline(hangsup)andtheprogrammerreturnstosleep,waitingforthenextcall.Ifthecallerhangsup,thethirtysecondperiodmustexpirebeforeanothercallwillbeanswered.Callsincomingduringtheresetdelayperiodareignored.Ifavalidpacketheaderisreceivedpriortotheexpirationoftheresetdelayperiod,theprogrammerwillattempttoreadandvalidatetheincomingpacket.Atanytimeduringpacketreception,aninvalidcharacter,parityerrorortimeoutduringcharacterreceptionwillcausethepartialpackettobedeclaredinvalidanddiscarded.Twopackettypesaredefined:dataandend-of-file.Adatapacketcontainsfivefieldsinadditiontothepacketheader,oneofwhichisavariablelengthdatafield.Thedatafield61 containsprogramdatatobewrittenintotheAT89C51controllerintheapplication.Theloadaddressfieldcontainstheaddressatwhichthedataistobewritten.Theend-of-filepacketcontainsthesamefieldsasthedatapacket,exceptthatthedatafieldisempty.Thispackettypehasspecialmeaningtotheprogrammer,asexplainedbelow.Anypacketwhichcontainsaninvalidrecordtype,recordlengthorchecksumisinvalid.Programdataaccumulatedduringtheprocessingofaninvalidpacketisdiscarded.TheprogrammersendsaNAKtothetransmittertosignalreceptionofaninvalidpacketandresumespollingforavalidpacketheader.Receiptofthefirstvaliddatapacketcausestheprogrammertointerrupttheapplicationcontroller.Thecontrollerrespondstotheinterruptbyabandoningexecutionofitsusualprogramanddisplayingamessageindicatingthatprogrammingistakingplace.Ifthisisthefirstvaliddatapacketsincepowerwasappliedoranend-of-filepacketwasreceived,theprogrammerassertsthecontrolsignalsnecessarytoerasetheprogrammemoryintheapplicationcontroller.Theprogrammerthenplacesthecontrollerinprogrammingmode.Thefirstandsubsequentvaliddatapacketsaredissectedastheyarereceivedandthedatawhichtheycontainisprogrammedintotheapplicationcontrollerattheaddressindicatedinthepacketloadaddressfield.Afterprogramming,thedataisreadbackfromthecontrollerandverifiedagainstthereceivedpacketdata.Successfulverificationindicatesthatprogrammingwassuccessful,causingtheprogrammertosendACKtothetransmitter.Theprogrammerthenresumespollingforavalidpacketheader,subjecttothethirtysecondresetdelay.Ifprogrammingfails,theprogrammersendsCANtosignalthetransmittertoabortthefiletransfer.Themodemdropsthelineandtheprogrammerreturnstosleep,waitingforthenextcall.Theapplicationcontrollerisleftinprogrammingmode,preventingitfromexecutingtheincompleteorinvalidprogramwhichitcontains.ItisimportanttonotethatinvalidpacketsareNEVERprogrammedintotheapplicationcontroller.Todosowouldrequirethattheprogrammemoryinthecontroller61 becompletelyerasedbeforetheerrorcouldbecorrected,causingthenon-recoverablelossofallpreviousprogramdata.Uponreceiptofanend-of-filepacket,theprogrammerreturnsitscontroloutputstotheinactive,poweronstate,allowingtheapplicationcontrollertobeginexecutionofthenewprogram.Theprogrammerthenresumespollingforavalidpacketheader,subjecttothethirtysecondresetdelay.Ifavalidpacketisreceivedpriortotheexpirationofthethirtyseconddelay,anotherprogrammingcyclebegins,whichcanonlybeterminatedbythereceptionofavalidend-of-filepacket.Iftheresetdelayexpirespriortothereceptionofavalidend-of-filepacket,themodemwilldropthelineandtheprogrammerwillreturntosleep,waitingforthenextcall.Inthiscase,theapplicationcontrollerisleftinprogrammingmode,preventingitfromexecutingitsprogram.Toreturntheapplicationtonormaloperation,anothercallmustbereceived,andavalidprogramfileuploaded,terminatedbyanend-of-filepacket.    from:http://wenku.baidu.com/view/9a7975f27c1cfad6195fa793.html   61 单片机在编程电路中的应用本应用指南说明了AtmelAT89C51是可在线可编程的微控制器。它为电路编程提出了相应的例子,程序的修改需要在线编程的支持。这类显示方法在应用程序中的AT89C51单片机可通过电话线远程控制。该应用指南所描述的电路只支持5v电压下编程。此应用软件可以到Atmel进行下载。总论在编程期间必须重视EA/VPP这一脚。在不使用外部程序存储器的应用程序中,这脚可能会永久接到VCC。应用程序使用的外部程序存储器要求这一脚为低电平才能正常运行。RST在编程期间必须为高电平。应该提供一种方法使得电路通入电源以后,使RST代替主要的复位电路起到复位的作用。在编程过程中,PSEN必须保持低电平,在正常运行期间绝不能使用。ALE/PROG在编程过程中输出低电平,在正常运行期间绝不能使用。在编程过程中,AT89C51的I/O端口是用于模式应用程序,地址和数据选择的,可能需要该控制器从应用的电路隔离。如何做到这一点取决于应用程序。输入端口在编程过程中,控制器必须与应用电路的信号来源隔离。带有三个输出状态的缓冲区会在应用程序之间插入电路和控制器,同时在编程时缓冲区输出三种状态。一个多路复用器可用于信号源之间进行选择,适用于任何一方的应用电路或编程控制器电路的信号。输出端口如果应用的电路可以允许端口在编程过程中的状态变化,则不需要改变电路。如果应用电路的状态不变化,必须事先在编程过程中的保持不变,可能在控制器和应用电路中插入锁存。锁存在编程期间是可用的,并保存应用程序的电路状态。应用实例此应用程序有在电路重新编程时将结果以图表的形式显示的简单能力。文本显示被设计作为其硬件的一部分,不能在无改编情况下变化。61 显示的文本可在4位DIP开关选择两种模式之一中进行。在第一种模式的时候,进入一个字符从右边显示和快速移动,通过每个元素显示其在最后的装配位置的左侧。在第二个模式,信息在信息窗口中右到左移动显示。这种模式与常常在股票价格的显示器所使用的方法类似。输出包括四个DL1414T,4位17段的积分解码器和驱动程序的字母数字显示器。这就产生了16名显示元素,每个数字有0-9的显示能力,是大写字母,标点符号和一些字符。可显示字符的ASCII码,范围为20H-5FH。上电复位电路和一个6MHz的晶体振荡器完成应用软件程序。无论外部程序存储器或外部数据存储器都时可用的。支持应用程序的修改。编程器在休眠时,既不会驱动,也不会加载应用程序。由于应用程序不使用外部程序存储器,EA/VPP脚接VCC电源。复位电路被两种转换器改变状态,此转换器允许编程时RST接高电平。在基本应用时未使用的PSEN和ALE/PROG,是被程序员直接控制的。编程器的编程需要获得所有数据表中记录的AT89C51的I/O端口。编程器是与那些应用程序未使用的控制器的引脚相连的,而这些应用程序的引脚需要最低有效位的四所产生的地址是可获得的,如下段所述。由编程器生成的最小的四位地址是与DIP转换的数据在控制器的端口多路复用的。请注意,加在开关上的四个电阻在基本应用中并不是必须的,因为AT89C51的端口上提供一个内部上拉电阻。在应用程序的正常运作时,控制器端口0,1个分别在显示器上提供数据和控制信号。在编程和程序验证时,编程受端口0和端口2的一部分控制。程序设计器连接端口0和1,没有缓冲,因为,在不活动时,它的存在不影响应用程序的正常运作。透明锁存器被加在了控制器的两个端口之间做输入控制。锁存持有的显示控制信号在编程过程中不反应,从而消除端口0和2由于程序控制器的活动造成操作失误。显示数据输入是不能被孤立的,因为数据应用到输入被忽略时,控制信号无效。AT89C51单片机复位电路,输入多路复用器和输出锁存器是由程序控制器生成一个单一的信号来控制的。在编程过程中,复位键生效,多路开关信号输入,以及冻结显示锁存控制线。61 为确保控制线显示在已知的状态前锁定,AT89C51的外部中断是用来允许程序控制器在复位之前向应用程序发出信号。应用程序固件响应中断显示一条消息,关闭显示控制线。编程后,当复位生效,当锁存可视控制器端口输出高电平。由于显示控制输入不为高电平,直到新的程序写入显示器内部不被打乱。虽然这个应用程序是没有必要的,它可能在某些应用中必须指出,在编程过程中不会扰乱外围电路的状态。程序控制器程序控制器生成的地址,数据和控制信号,对嵌入到程序中的AT89C51有重要作用。程序控制器电路由一个AT89C51和一个RS-232电平转换器组成。该控制器运行在11.0592兆赫兹,此频率允许串口运行在一个标准波特率下。一个MAXIMMAX232线路驱动器/接收器产生RS-232水平,而只需要5伏的电源系统。程序控制器所产生的信号许多只需直接连接到AT89C51,无需缓冲。这些信号,在不活动时,不再是三种状态,但被接高电平。AT89C51的端口1,2,3内部有大约3000欧姆的上拉电阻,因为端口0没有内部上拉电阻,所以外部10千欧姆的上拉电阻已经加上并允许适当的程序认证模式操作。示例应用程序在这种环境下可正常运行。如果有需要的应用程序兼容性,程序发出的信号可能在类似74xx125三态缓冲缓冲区内缓冲。AT89C51的程序不使用外部程序或数据存储器,这需要牺牲所需要的I/O引脚。这就要求程序代码和I/O缓冲区保持足够小以适合片上存储器。商业电话线远程编程。编程器和前面描述的显示应用是与通过调制解调器连接在远程站点电话线相连的。使用链接调制解调器的个人电脑,用户可以上传包含一个新的消息的程序,这个信息被变成进了嵌入到应用程序的AT89C51中。当编程完成后,应用程序执行新的程序,它显示新信息。本地配置61 测试配置的本地配置包括一台IBM个人电脑级的计算机连接到与Hayes兼容的,普罗米修斯1200波特的调制解调器。选择此调制解调器,因为它是廉价可得。更快的调制解调器如果需要的话可使用更快速的调制解调器,尽管一旦该文件的传输时间低于1分钟,进一步削减的传输时间不会进一步降低连接时间费用。更高的传输速度的可能优势是在某些高速调制解调器内的自动错误检测和纠正。ProcommPlus版本2.01,是一个商业数据通信软件包,用于配置调制解调器,建立通讯设置参数,并建立与远程调制解调器的链接。ProcommPlus包括所谓的宏语言方面,它允许用户编写实现自定义的文件传输协议的脚本。一个简单的脚本编写用来读取一个程序文件的内容,并上传到远程编程器。文件传输协议(FTP)的实施,是一个简单的发送和等待的,数据包导向的协议。FTP模式发送和接收的是用数字4和5,如流程图所示。不在流程控制下发射器发送每个数据包,并等待响应。在计算校验和时那个程序控制器(接收器)读取并剖析了数据包。如果计算出的校验和是有效的,程序员通过发送一个ACK承认此数据包。如果校验和错误,程序员通过发送一个NAK来否定。当接收一个ACK后,发射器发送下一个数据包。如果传送者接收到NAK,它重新发送相同的数据包。以这种方式传输,直到整个文件已被移交。程序控制器可能通过发送一个CAN来响应数据包,CAN表明一个不可恢复的错误发生,而发射机应立即中止文件传输。如果程序员没有在有限的时间内响应到一个数据包,发送器将重新发送相同的数据包。发射器将继续重发,直到接收到一个有效的反应,或者,超出文件传输被中止的时间。每个数据包接收和通过程序员验证后,数据包中包含的数据被加载到的AT89C51单片机控制器编程。编程后,数据从控制器读回并对接收的数据包进行验证。成功的审查表明,成功的程序设计,使程序员发送ACK给传送者。如果编程失败,程序员发送CAN向传送者发送信号中止文件传输。简单的FTP减少了AT89C51的程序在编程时使用的内存量。由于AT89C51的编程和擦除时间可以很容易地吸收,FTP发送和等待的性质允许跨包延迟。对程序验证的支持是透明的,不需要明确的命令或结果代码,或转让的其他数据。上传到程序控制器的文件是用英特尔MCS-61 51软件开发包来创建的。在包中包括了MCS-51宏汇编,MCS-51单片机Relocator和连接器,以及一个有用的工具,OH。OH将8051绝对目标文件转换为为等效的ASCII十六进制目标文件。远程配置在测试配置中的远程配置包括显示应用程序和程序员电路,如前所述,连接到一个与Hayes兼容的普罗米修斯1200波特调制解调器。在正常操作时,应用程序执行其内部程序,而调制解调器和程序员监测来电电话线。通话被检测到并连接建立后,程序器强迫暂停其程序的执行。新的程序就被下载并嵌入到应用程序中的AT89C51的编程。当编程完成后,应用软件程序获准开始其新的程序执行,而程序控制器返回监督下一个通话的电话线。程序控制输出无效时程序控制器上电,允许应用程序正常运行。在配置调制解调器接听来电后,程序控制器停止工作。是程序控制器不会影响到程序直到一个新的程序应用程序被下载。程序员通过发送控制在串行接口上的ASCII命令字符串来控制调制解调器,对此调制解调器响应海斯式调制解调器的ASCII数字代码。该软件是专为与海斯兼容使用的调制解调器,其中包括这里使用的1200普罗米修斯ProModem。串行接口,程序员通过它连接到调制解调器,它支持两个握手信号,DTR和DSR。上电时,程序控制器判定DTR,断定为DTR后调制解调器响应。如果调制解调器不响应任何命令,包括命令挂断,程序控制器抬高DTR点位,强制调制解调器下降。当程序控制器停止工作后,监测调制解监听电话线,等待来电呼叫。当检测到输入,调制解调器响应并试图与输入建立通信。如果建立了连接,调制解调器发送一个代码,唤醒程序控制器。程序控制器验证连接的代码,并开始审查有效的数据包报头。传入数据包必须在少于30秒内到达,否则调制解调器挂断和程序控制器继续停止工作,等待下一次呼叫。如果来电挂断,在得到下一次呼叫之前,三十秒时间必须终止。在复位延迟时间传入是被忽略的。如果复位延迟时间结束之前收到一个有效的数据包报头,程序控制器将尝试读取和验证传入的数据包。在数据包的接收过程中的任何时间,无效字符,奇偶校验错误或超时的时间内接待字符将导致部分数据包被宣布无效,并丢弃。61 两个数据包类型定义:数据和最终文件。数据包包含五个领域,除了包报头,是一个可变长度的数据字段。数据字段包含程序的数据在应用程序中被写入在AT89C51的控制器。负载地址字段中包含数据写入的地址。末端文件包中包含与数据包相同的领域的文件,但该数据字段是空的。这包类型对程序控制器具有特殊的意义,如下所述。任何包含有效文种的数据包,记录长度或校验和无效。程序数据在一个无效的数据包被丢弃的处理过程中被积累。编程器给传送者发送一个NAK作为信号数据包的接收和恢复为一个有效的数据包报头审查的警示信号。第一个有效数据的接收引起编程器中断应用程序控制器。该控制器的中断响应放弃其正在运行的程序,并显示一条消息,表明程序已经被替代。如果这是由于接收了末端文件或者是电源触发从而接收的第一个有效的数据包,运用必要的控制信号清除在应用控制器内的记忆程序。然后编程器在程序模式中放置控制器。当接收到第一个和其后的有效数据程序包时,将它们分开,它们包含的数据被编程到程序包负载地址域中的地址中的应用控制器内。编程后,从控制器内将数据读回并与接收到的数据包中的数据进行比较。成功的核查表明,方案是成功的,导致编程器向传送者发送ACK信号。由于30秒的复位延迟,编程器重新对有效的数据包报头进行测试。如果编程失败,编程器向传送者发送信号CAN中止文件传输。调制解调器掉线,程序器继续休眠等待下一次呼叫。应用控制在程序模式中被保留,用以阻止它包含的不完整的或无效的程序。重要的是要注意,无效的数据包永远不会规划到应用程序控制器。这样做将要求错误被纠正之前,编程器中的记忆程序被彻底抹掉,造成先前所有数据的不可恢复。根据末端文件的接收,编程器向闲置的状态电源返回其控制输出,允许应用程序控制器,开始执行新的程序。然后编程器在三十秒延迟之下重新开始对一个数据包报进行审查。如果一个有效的数据包在30秒延迟之前接收,另一个只能被接受一个有效的末端文件而终止的程序循环开始执行。61 如果复位在收有效末端文件之前终止,那么调制解调器会掉线,编程器停止工作,等待下一次传入。在这种情况下应用控制器被保留在程序设计模式,以防止它执行这个程序。要返回应用程序的正常运行,另一个传入必须被接收,一个有效的程序文件被上传,由末端文件包终止。出处:http://wenku.baidu.com/view/9a7975f27c1cfad6195fa793.html61 附录B 电路原理图61 附录C PCB布局图61 附录D 源程序#include"reg52.h"#defineucharunsignedchar#defineuintunsignedint#defineLCD_DataP1#defineBusy0x80//用于检测LCD状态字中的Busy标识/********函数声明*****************************************************/voidWriteDataLCD(unsignedcharWDLCD);//写数据voidWriteCommandLCD(unsignedcharWCLCD,BuysC);//写命令unsignedcharReadDataLCD(void);//读数据unsignedcharReadStatusLCD(void);//读状态voidLCDInit(void);//初始化bitSinterrupt;//定义中断标志位voidwrite_hexnum(unsignedcharn);//定义卡号转换函数voidDisplayOnlyChar(unsignedcharX,unsignedcharY,unsignedcharnum);//相应坐标显示卡号voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData);//相应坐标显示字节内容voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData);//相应坐标开始显示一串内容voidDelay5Ms(void);//延时voidDelay400Ms(void);//延时/**************定义引脚*************************************************/sbitJDQ=P3^4;sbitLCD_RS=P2^4;sbitLCD_RW=P2^3;sbitLCD_E=P2^2;unsignedcharCARD[28];unsignedcharcodeOP[]={"OPEN"};unsignedcharcodeCL[]={"CLOSE"};unsignedcharCARDPASS[6]={0xff,0xff,0xff,0xff,0xff,0xff};//默认密码unsignedchar61 DAT[]={0X01,0X02,0X03,0X63,0X00,0X00,0X00,0X00,0Xff,0Xff,0Xff,0Xff,0X01,0X02,0X03,0X04};//所要下载数据可通过串口修改ucharcodeaa[]={0xaa,0xff,0x70,0x26,0x03};intreceive=0,sbuf_value,Comparison,ls,dp;/***********串口初始化*************************************************/voidInitUART(){SCON=0x50;//串口工作方式1,8位异步收发,波特率可变,无校验位。TMOD|=0x20;//8位自动重装定时器PCON|=0x80;//SMOD=1;波特率加倍TH1=0xFA;//Baud:4800fosc=11.0592MHzTR1=1;//定时器1工作ES=1;//开串口中断EA=1;//开总中断}/***********LCD初始化*************************************************/voidLCDInit(void){LCD_Data=0;WriteCommandLCD(0x38,0);//三次模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,1);//显示模式设置,开始要求每次检测忙信号WriteCommandLCD(0x08,1);//关闭显示WriteCommandLCD(0x01,1);//显示清屏WriteCommandLCD(0x06,1);//显示光标移动设置WriteCommandLCD(0x0C,1);//显示开及光标设置}/***********写数据***************************************************/voidWriteDataLCD(unsignedcharWDLCD)61 {ReadStatusLCD();//检测忙LCD_Data=WDLCD;LCD_RS=1;LCD_RW=0;LCD_E=0;//若晶振速度太高可以在这后加小的延时LCD_E=0;//延时LCD_E=1;}/***********写指令****************************************************/voidWriteCommandLCD(unsignedcharWCLCD,BuysC)//BuysC为0时忽略忙检测{if(BuysC)ReadStatusLCD();//根据需要检测忙LCD_Data=WCLCD;LCD_RS=0;LCD_RW=0;LCD_E=0;LCD_E=0;LCD_E=1;}/***********读状态****************************************************/unsignedcharReadStatusLCD(void){LCD_Data=0xFF;LCD_RS=0;LCD_RW=1;LCD_E=0;LCD_E=0;LCD_E=1;while(LCD_Data&Busy);//检测忙信号return(LCD_Data);}/***********按指定位置显示一个字符**************************************/61 voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData){Y&=0x1;X&=0xF;//限制X不能大于15,Y不能大于1if(Y)X|=0x40;//当要显示第二行时地址码+0x40;X|=0x80;//算出指令码WriteCommandLCD(X,0);//这里不检测忙信号,发送地址码WriteDataLCD(DData);}/********按指定位置显示一串字符****************************************/voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData){unsignedcharListLength;ListLength=0;Y&=0x1;X&=0xF;//限制X不能大于15,Y不能大于1while(DData[ListLength]>=0x20)//若到达字串尾则退出{if(X<=0xF)//X坐标应小于0xF{DisplayOneChar(X,Y,DData[ListLength]);//显示单个字符ListLength++;X++;}}}/*********短延时********************************************************/voidDelay5Ms(void){unsignedintTempCyc=5552;while(TempCyc--);}61 /**********长延时*******************************************************/voidDelay400Ms(void){unsignedcharTempCycA=5;unsignedintTempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);}}////////////////////////////////////////////////////////////////函数:voidREADCARD(ucharnum,uchartype,uchar*password)无返回值//作用:读卡NUM块中的数据//num:块号,type:密码类型(A为0X60,B为0X61),password:密码(新卡默认为六个0XFF)/////////////////////////////////////////////////////////////voidREADCARD(ucharnum,uchartype,uchar*password){uchari;CARD[0]=0XAA;CARD[1]=0XFF;CARD[2]=0X10;CARD[3]=num;CARD[4]=type;CARD[5]=password[0];CARD[6]=password[1];CARD[7]=password[2];CARD[8]=password[3];CARD[9]=password[4];CARD[10]=password[5];CARD[11]=0;for(i=0;i<11;i++)61 {CARD[11]^=CARD[i];SBUF=CARD[i];while(TI==0);TI=0;}SBUF=CARD[11];while(TI==0);TI=0;}////////////////////////////////////////////////////////////////函数:voidWRITECARD(ucharnum,uchartype,uchar*password,uchar*carddat)无返回值//作用:向第NUM块写入数据//参数num:块号,type:密码类型(A为0X60,B为0X61),password:密码(默认为六个0XFF),carddat:写入的数据/////////////////////////////////////////////////////////////voidWRITECARD(ucharnum,uchartype,uchar*password,uchar*carddat){uchari;CARD[0]=0XAA;CARD[1]=0XFF;CARD[2]=0X20;CARD[3]=num;CARD[4]=type;CARD[5]=password[0];CARD[6]=password[1];CARD[7]=password[2];CARD[8]=password[3];CARD[9]=password[4];CARD[10]=password[5];for(i=0;i<16;i++){CARD[11+i]=carddat[i];}for(i=0;i<27;i++){61 CARD[27]=CARD[27]^CARD[i];SBUF=CARD[i];while(TI==0);TI=0;}SBUF=CARD[27];while(TI==0);TI=0;}/***********发送一个字节子函数******************************************/voidsend_data(uchardat){SBUF=dat;//发送一个字节datwhile(!TI);//等待发送完毕TI=0;//发送标志位TI清零}/***********发送射频模块配置指令****************************************/voidsend(uchardat){SBUF=dat;//发送一个字节datwhile(!TI);//等待发送完毕TI=0;//发送标志位TI清零}/***********接收的16进制卡号转换成ASCII码******************************/voidwrite_hexnum(unsignedcharn){if(n>=10)WriteDataLCD("A"+n-10);elseWriteDataLCD("0"+n);}/***********按指定位置显示卡号****************************************/voidDisplayOnlyChar(unsignedcharX,unsignedcharY,unsignedcharnum){Y&=0x1;X&=0xF;//限制X不能大于15,Y不能大于161 if(Y)X|=0x40;//当要显示第二行时地址码+0x40;X|=0x80;//算出指令码WriteCommandLCD(X,0);//这里不检测忙信号,发送地址码write_hexnum(num>>4);//高位write_hexnum(num&0xf);//低位}voidmain(){uinti,num;InitUART();//串口初始化Delay400Ms();//启动等待,等LCD讲入工作状态LCDInit();//初始化Delay5Ms();//延时片刻(可不要)while(1){if(Sinterrupt){for(i=0;i<5;i++){send(aa[i]);}num=CNUM[3];DisplayOnlyChar(5,0,num);num=CNUM[4];DisplayOnlyChar(8,0,num);num=CNUM[5];DisplayOnlyChar(11,0,num);num=CNUM[6];DisplayOnlyChar(14,0,num);WRITECARD(12,0X60,CARDPASS,DAT);READCARD(30,0x60,CARDPASS);JDQ=0;DisplayListChar(0,0,OP);61 for(i=0;i<5;i++)//延时{Delay400Ms();}JDQ=1;DisplayListChar(0,1,CL);Sinterrupt=0;}for(i=0;i<5;i++)//延时{Delay400Ms();}WriteCommandLCD(0x01,1);//显示清屏}}/***************串口中断接收卡号***********************************/voidCom_In()interrupt4{if(RI){RI=0;sbuf_value=SBUF;switch(receive){case0://bb{if(sbuf_value==0xbb){receive++;CARD[0]=sbuf_value;Comparison=Comparison^sbuf_value;send_data(sbuf_value);}61 else{receive=0;Comparison=0;ls=0;}}break;case1://ff{if(sbuf_value==0xff){receive++;CARD[1]=sbuf_value;Comparison=Comparison^sbuf_value;end_data(sbuf_value);}else{receive=0;Comparison=0;ls=0;}}break;case2://00{if(sbuf_value==0x00){receive++;ls=3;CARD[2]=sbuf_value;send_data(sbuf_value);61 Comparison=Comparison^sbuf_value;dp=4;}else{receive=0;Comparison=0;ls=0;}}break;case3://接收数据{if(dp){CARD[ls]=sbuf_value;Comparison=Comparison^sbuf_value;ls++;dp--;send_data(sbuf_value);}else{CARD[ls]=sbuf_value;if(Comparison==sbuf_value)//校验{receive=0;Comparison=0;ls=0;Sinterrupt=1;}else{61 receive=0;Comparison=0;ls=0;Sinterrupt=0;}}}break;default:{receive=0;Comparison=0;ls=0;}break;}}}61'