摘 要
IC卡是一个正蓬勃发展的边缘产业,一个与我们的生活正越来越密切的
产业。在普及因特网和计算机的大潮涌来时,IC卡扮演着越来越重要的角色。
IC卡读写设备大致可分为两大类:一类为专用读写设备或称脱机读写器。其特点是:充分利用IC卡存储量大,可以独立存储和工作, 不需要和主机相连就可完成数据读写的优点,可与应用设备结合或单独工作。例如:IC卡电表,水表,ATM机, 商场收款机。另一类为通用读写设备,或称联机读写器,是带有单片机和存储器的设备,通过并行或串行口与PC机或应用系统网络相连接。 在运行不同软件时可以读写不同种类的IC卡,组成不同的应用系统。如果配备开发系统软件,可对IC卡做初始规划,数据加密和初始写入,从而构成IC卡应用开发制作环境。在本设计中, 我们讨论通用开发系统——基于ATM89C51单片机的IC卡读/写器的设计。
通过89C51单片机来实现IC卡的读和写,在系统中设计一个复位电路,接在89C51的复位管脚上。复位电路是微机应用中重要的一环,一个好的复位电路对微机抗干扰有重要作用。另外还在单片机上接了一个时钟电路,用来设置单片机内部震荡的时间。
RS232串行接口在本设计中用于单片机与PC机之间的连接, IC卡座用于插卡,实现IC卡与读写器的连接。本设计中所涉及的主要是接触式逻辑加密卡SLE4442卡。
另外一些外围电路的设计使整个IC卡读写器显得完美。
1
Abstract
IC card is the edge of a booming industry, a closely our lives are more and more industries. Popularity of the Internet and computers in the coming tide of time, IC card playing an increasingly important role.
IC card read-write device can be divided into two categories: one for the special read-write device, or offline reader. Its characteristics are: full use of IC card storage capacity, storage and work independently, without the data can be completed and the host connected to the advantages of literacy can be combined with the application of equipment or work alone. For example: IC card meter, water meter, ATM machines, shopping malls cash register. And those for the general read-write device, or on-line reader, is of a microcontroller and memory devices, through parallel or serial port and PC machines connected to the network or application system. Running different software can read and write different types of IC cards, composed of different applications. If equipped with the software development system, IC card can do the initial planning, data encryption and the initial write, so as to constitute production of IC card application development environment. In this design, we discuss the general development system - based on ATM89C51 Microcontroller IC card read / write device design.
Achieved through the 89C51 microcontroller IC card read and write, in the system design of a reset circuit connected to the reset pin on the 89C51. Microprocessor reset circuit is an important part of the application, a good anti-jamming reset circuit plays an important role on the computer. Also being a single chip are connected to the clock circuit, used to set the MCU internal shocks of the time.
RS232 serial interface for microcontroller in the design and the connection between the PC machine, IC card connector for the card, IC card and the reader realize the connection. This design is mainly involved in contactless card SLE4442 logic encryption card.
Other peripheral circuits are designed to make the entire IC card reader seems perfect.
2
目 录
前言 …………………………………………………………….. 3 第一章 概述 ...................................................................... 5
一 IC卡技术 …………………………………………………… 5 二 IC卡应用 …………………………………………………… 8
第二章 系统原理框图 ........................................... 10
一 系统原理框图的绘制 ……………………………………… 10 二 原理图 ……………………………………………………… 13
第三章 硬件部分 ........................... 14
一 AT89C51单片机简介 ……………………………………….. 14 二 RS232串行接口 …………………………………………… 16 三 SLE4442简介 ……………………………………………… 18 四 IC卡座 …………………………………………………… 18 五 外围电路 …………………………………………………… 20
第四章 软件部分 ……………………………………. 25
一 工作过程、流程图 …………………………………………… 25 二 用C51实现的读/写主程序 ....................................................... 27 三 上位PC机通信接口软件 ……………………………………. 34
第五章 总结 …………………………………………….. 36
一 总结 …………………………………………………………… 36 二 致谢 …………………………………………………………… 37 三 参考文献 ……………………………………………………… 38
3
前 言
IC卡是一个正蓬勃发展的边缘产业,一个与我们的生活正越来越密切的产业。在普及因特网和计算机的大潮涌来时,IC卡扮演着越来越重要的角色。
IC卡读写设备大致可分为两大类:一类为专用读写设备或称脱机读写器。其特点是:充分利用IC卡存储量大,可以独立存储和工作, 不需要和主机相连就可完成数据读写的优点,可与应用设备结合或单独工作。例如:IC卡电表,水表,ATM机, 商场收款机。另一类为通用读写设备,或称联机读写器,是带有单片机和存储器的设备,通过并行或串行口与PC机或应用系统网络相连接。 在运行不同软件时可以读写不同种类的IC卡,组成不同的应用系统。如果配备开发系统软件,可对IC卡做初始规划,数据加密和初始写入,从而构成IC卡应用开发制作环境。在本设计中, 我们讨论通用开发系统——基于ATM89c51单片机的IC卡读/写器的设计。
IC卡读/写设备由IC卡卡座,单片机,数据存储器RAM,程序存储器EEPROM,接口电路和外围设备等组成。
IC卡读/写器各部分结构与功能简单介绍如下: 1.IC卡卡座
IC卡卡座是连接IC卡与读写器的。其功能包括对IC卡供电,提供读写信号和传送数据。要求提供方便的插拔方式和可靠的接触,并带有带电插拔,过流保护,插卡检测等能力。IC卡和插座的结构尺寸必须符合国际标准化组织(ISO)7816的标准。对触点数目、位置、信号名称和功能都有明确规定,以保证兼容性。
2.单片机和存储器
读写器中配备单片机和ROM,RAM存储器,构成微机系统,单片机运行ROM中
4
固化的软件,执行与IC卡和上位PC机的通信规程。控制对IC卡的读写,完成IC 卡与主机间数据的格式转换。为减轻单片机负担,提高读写速度,常配置有硬件密文转换和单元。 3.接口电路和外围设备
通用读写器一般与PC机或网络联机工作, 常用标准并行或串行口与上位机连接和通讯。常用的是带有25芯或者9芯插口的RS232- C 型串行接口, 可直接接到PC 机的COM1或COM2上。此时,可利用主机的显示器作监视器,主机键盘作控制和输入,利用主机打印机输出。此时主机与读写器组成了IC卡应用与开发系统,操作与一般微机相仿,但用户界面将随所配软件而有很大不同。 4.IC卡系统软件
本设计的系统软件是通过C51编写的。
5
第一章 概述
一、IC卡技术
IC
卡概述
1. 什么是IC 卡
IC卡是英文集成电路卡的缩写,其大小和名片相当,但比名片稍厚些。国际标准化组织ISO为它制定了国际标准,对卡的长度、宽度及厚度都做了比较明确的规定。制作时,将一个专用的集成电路芯片镶嵌于基片中,封装成形,即为IC卡。IC卡的概念是20世纪70年代初提出来的,法国人 ROLNMO与1970年首先将IC卡芯片放于卡片中。 2. IC卡的分类
(1)根据卡中所镶嵌的集成电路的不同分类 存储卡:卡中的集成电路为EEPROM。
逻辑加密卡:卡中集成电路为带加密逻辑和EEPROM。
CPU卡:卡中的集成电路包括中央处理器CPU、EPROM、随机存储器RAM以及固化在只读存储器ROM中的片内操作系统。 严格的讲只有CPU才是真正的只能卡。 (2)根据卡与外界数据传送的形式分类
IC卡可分为接触型与非接触型。非接触型IC卡又称射频卡。当前使用广泛的是接触型IC卡。在这种卡上,起IC芯片有8个触点可与外界接触;射频卡的集成电路不向外引出触点,因此,它除了包含前述三种IC卡的电路外,还带有射频收/发电路及其相关电路。 (3)根据应用领域分类
IC卡分为金融卡和非金融卡。金融卡又分 为信用卡和现金卡。信用卡由银行发行并管理,持卡人用它作为消费时的支付工具,可使用预先设的的透支限额资
6
金。现金卡可用作电子存折和电子钱包,不允许透支
.
3. IC卡技术 (1)IC卡读/写技术
IC卡是一种集成电路卡,它的读写设备是每个IC卡应用系统不可缺的周边设备。该设备通过IC卡的8个触点向IC卡提供电源与IC卡相互交换信息。虽然IC卡是从磁卡发展而来的,但他在机器读/写性能上却远优与磁卡,无需往复的机械动作即可完成人-机-卡之间的多次会话过程,使卡在应用时操作简单,给人们带来极大的便利。 (2)IC卡的安全技术
信息安全的目的就是保证数据在确定的时间内,在确定的地点,在确定的条件下,只能被却定的对象使用。而IC 卡正是为了解决数据是安全问题而设计的,它采用的是半导体密码存放与软件加密技术,能够有效地阻止卡的非法复制与数据篡改,应用设备设备在脱离网络的情况下,可以对IC卡进行鉴别。 IC卡的信息安全一般具有以下特征: 保密性:既防止未经授权的使用者获取信息;
完整性:防止未经授权的信息改变(更改、删除、增加); 可获取性:防止未经授权的截取信息;
真实型:即通过一系列的技术措施验证信息的真实性; 持久性:即长久时间信息保存的可靠性。 (3)数据存储技术
在一个应用系统的使用中,系统必须对所有持卡人建立一份身份与使用的档案。在磁卡系统中,这组档案存放在中心数据库系统内,没次持卡人使用必须通过终端,以网络形式从
7
数据库系统中提出那分与自己有关的档案,IC 卡的数据存储能路比磁卡要强得多,卡把持卡人有关的大量信息存放在卡中,因而使得IC卡使用的灵活性大大增强,交易的实时性也明显改善。目前,IC卡的存储容量可达近1MB。 4. IC卡的技术特点
(1) 芯片的制造技术与工艺
目前,IC卡用芯片扑片采用较为先进的CMOS,BICMOS等集成电路制造工艺,具有较好的点性能及抗干扰能力,一采用CMOS工艺制造的IC 卡芯片为例,起主要技术指标为; 写入/删除次数最少可大100000次。 数据保存时间最少为10年。 工作电压为5V。 抗静电4000V左右。 噪音容限也较高。 (2) IC 卡座的技术要求
IC卡卡座哈IC 卡应有良好的接触点,应有尽量小的摩擦。 具有生产制造时的质量稳定性。
具有对应用环境(温度、湿度、震动及电磁干扰等)的适应性。 其中正确的工作顺序较为重要。按有关ISO/IEC7816标准规定,在IC卡的触点和读/写设备的触点之前,读/写设备不应对磁卡施加有关点信号,以免造成不可预料的损坏。IC卡读/写设备作为系统和用户交互的接口,必将棉队各种各样复杂的应用环境,如在金融系统应用中的ATM(自动柜员机),有可能放置在露天公共场合,处于高/低温、潮湿、电磁干扰等环境;在电车 、汽车自动售票系统应用中,处于振动、电磁干扰等环境。因此,在设计阶段就应注意;IC卡读/写设备环境适应性问题。
8
二. IC卡的应用
IC卡的应用领域非常广泛。它除了涵盖传统磁卡的全部功能外,还拓展到许多磁卡所不能胜任的领域。这在很大程度上归功与IC卡的大容量数据存储能力和强有力的安全特性。
目前,IC 卡除在金融系统外,在非金融系统也得到了广泛的应用。如在通信领域中的公用电话卡,移动电话中的SIM卡;在交通领域中的驾驶员执照卡、停车收费卡、公交交通设施是自动收费卡及公共交通工具的自动收费卡等;另外在医疗保健、个人身份识别、预收费仪表、校园及消费娱乐领域中也得到了具体的应用。
(1) 通信领域
数字移动电话中的用户识别模式智能卡(SIM卡)及公用电话用IC卡。 (2) 医疗卫生和计划生育管理
卫生部计划发行医疗IC卡;国家计划生育委员会准备发行育龄妇女计划生育IC卡 (3) 企业保险 领域
用于医疗保险、失业保险、养老保险及儿童免疫接种等,目前海南、褡裢等地已发行IC保险卡。 (4)交通领域
用于汽车驾驶员管理、公交路费及公交或地铁自动售票,目前公安部已完成“机动车辆驾驶员违章处理IC卡”的标准起草工作,并已通过专家审定。
(5) 对企、事业单位和社会团体的管理
国家工商局准备发行工商企业监管IC卡,并在部分省市试点。 (6) 企、事业单位内部管理
9
目前已包括单位职工内部管理、场区内部通行控制、校园师生管理、饭店IC卡门锁及饭店内部消费等。这类IC卡以集团、单位内部发行为主。 (7) 公共事业
目前IC卡水表、电气及煤气表已在许多城市使用,今后会进一步推广。 (8) 税务(包括国税和地税)
许多省市已开始使用IC卡进行税金的征收和稽查。 (9) 加油
中国石化总公司和地方石油公司都已有组织地建立IC加油卡收费系统。 随着时间的推移,IC卡的应用范围将会越来越广泛。它给人们的工作和生活带来很大的方便,相信在不远的将来,IC卡会真正走进我们的工作和生活。
10
第二章 原理图
一.系统原理框图的绘制
1.Protel99软件的概述
(1)随着电子技术的飞速发展,新型电子器件和集成电路的永远日趋广泛,
电子电路也变得越来越复杂,这给电路的设计工作带来了更大的难度。因此通过计算机进行电子电路的互助设计成为设计电路板的一个基本手段。Protel99包含众多的服务器,总提上可以分为5种组件,分别为:原理图设计组件、PCB设计组件、布线组件、可边成逻辑器件组件和仿真组件。由于其性能优越,Protel99已成为电路设计不可缺少的理想工具。 (2)下面简单介绍电路原理图的设计步骤。
总体来说,设计一个电路原理图,首先要设置图纸的大小和外形,对电路图进行总体规划,然后在图纸上放置元件,(其中,库里面没有我们所需的元件需要我们自己画)进行布局布线,接着对这个版面进行编辑和调整,最后保存或打印,具体的电路原理图的设计流程如图1所示:
图1
11
设计PCB板首先要启动Protel99-PCB编辑器。启动该编辑器的操作步骤如下:
新建或打开一个设计数据库文件(*.ddb)。 进入设计文件夹Documents。 选择F ile/New命令,打开对话框。
双击该对话框中的
即可创建一个新的元件库文件,默认的文件名
为PCB1。在工作窗口中该文件的图标上单击或在设计浏览器中该文件名上双击,即可进入PCB板编辑器。
然后即可在PCB编辑板上画出所需的电路原理图,如下页所示:
12
二 原理图:
第三章 硬件部分介绍
13
一 AT89C51单片机简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89c51是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C51是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
1.主要特性:
·与MCS-51 兼容
·4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 ·全静态工作:0Hz-24Hz ·三级程序存储器锁定 ·128*8位内部RAM ·32可编程I/O线
·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道
·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路 2.管脚说明:
VCC:供电电压。
14
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能
P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号
15
将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。
3.振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
4.芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
二 RS232串行接口
EIA-RS-232C是由美国电子工业协会EIA制订的一种串行物理接口标准。
RS-232C采用负逻辑,-5~ -15V为逻辑1,+5~+15V为逻辑0。而TTL电 平的“1”和“0”的特征电压分别为2.4V和0.4V,用RS-232C总线进行 串行通信需外接电路实现电平转换。在发送端需用驱动电路将TTL电平转换 成RS-232C电平,在接收端用接收电路将RS-232C电路转换为TTL电平。本 设计是用的TI公司的RS-232C收发器MAX232,可用单一+5V电源供电实现 电平转换。RS-232C在设计中主要永远用于PC机与IC卡读/写器之间的通信,
框图如下
16
RS-232C芯片的引脚结构如图5所示:
图5
图5中的C1、C2、C3、C4及V+、V—是电源变换电路部分。
在实际应用中,器件对电源噪音很敏感。因此,VCC必须要对地加去耦电容,
其值为0.1μF 。电容C1、C2、C3及C4取同样的数值的钽电解电容,用以提
高抗干扰能力,在连接时必须尽量靠近器件。
MAX232的13、14管脚为串行异步通信发送及接受引脚。
三 SLE4442卡简介
SLE4442卡内部有一个256 8bit EEPROM,不可逆的4个写保护字节,具
17
备密码保护功能,可以随时读取主存储器内容;在校验成功后,可读保护存储器、读写安全存储器和写主存储器。
SLE4442有一个密码逻辑,用以控制对存储器的读写。为此,SLE4442包含一个4字节加密存储区,该存储区有一个错误计数器EC(0-2位)和三个字节的参考数据,这三个字节作为一个整体,称为可编程密码(PSV)。整个数据区除了参考数据,其它的数据都能被读取,在校验数据与内部参考数据比较正确后才能进行读写操作,连续三次比较错误后,错位计数器将阻止任何比较尝试,从而也消除了任何擦写操作。
四 IC卡座
IC卡座引脚如图6所示,其中引脚SW1、SW2为微动开关在无IC卡状态时,处与断开状态;有卡插入时,IC卡卡座上的微动开关闭合。因此,此开关往往是用来判断是否插IC卡的传感器件。
其引脚VCC:工作电压;
18
SCL(CLK):串行时钟;
GND:接地;
SDA(I/O):串行数据(输入/输出);
SW1、SW2:微动开关
本设计中与逻辑有关的引出端先只有2条:SCL和SDA。所有的地址、数
据及读/写控制命令等信号均从SDA端输入/输出。为了区分线上的数据、地址、
操作命令以及各种状态的“开始”与“结束”,卡片内设计就多个逻辑控制单元。
其中,启动与停止逻辑单元产生控制读/写操作的“开始”与“停止”标志信号。
“开始”状态:当SCL处于高电平时,SDA从高电平转向低电平,即产生“开始”标志信号。
“停止”状态:当SCL处于高电平时,SDA从低电平转向高电平,即产生一个“停止”标志信号,如图6所示:
图6 读/写的启动与停止时序
19
SDA和SCL通常各自通过一个电阻拉到高电平,当SCL为高电平时,对应的SDA上的数据有宵;而当SCL为低电平时,允许SDA上的数据变化。 数据输入/输出应答逻辑单元产生数据输入/输出操作应答信号。操作时所有的地址和数据字均一8位码串行输入/输出于卡片。卡片没收到一个8位码长的地址或数据后都以置SDA线为低电平方式“确认”应答信号,其波形如图7所示
图7
五 外围电路
(1)状态灯
IC卡的上电一般是可知的,即对IC卡读/写时,须给IC卡上电(送电源),因此,IC卡的上电控制比较简单。由于IC卡读/写电流很小,一般为几个A,因此其实现可按照图8所示。由单片机89C51的P14信号通过小功率三极管9012控制系统的+5V电源切入IC卡座。当IC卡上电后,发光二极管L2被点亮,起读/写指示作用。每次对IC卡读/写完成后。即及时先电,以减少插拔时带电的可能性,要保证IC卡能任意插拔(有可能处于带电状态),不致IC卡损坏,必须使IC卡拔电过程处于断电的状态。要做到这点,必须保证IC卡的下电迅速及时
20
图8
(2)蜂鸣器
一般所指的蜂鸣器是以压电陶瓷为主要元件的。压电陶瓷是一类有将压力与电流相互转换能力的特殊陶瓷。这种能力缘于其特殊的晶体结构。当压电陶瓷在一定方向上受到一个压力使其晶体结构发生形变时,它就会在内部产生一个电流,并且电流的变化与压力的变化密切相关。反之亦然。所以利用这一特性,在压电陶瓷上通过一定频率的电流,就会引起压电陶瓷微小形变,这一形变带动空气发生振动,如果频率适当,就可以被人耳所听见,也就是产生了蜂鸣声。
本设计当中蜂鸣起的做用是IC卡与单片机是否连接。
将IC卡插进卡座时,IC卡座与单片机之间的连接无误是蜂鸣器会响。在取出IC卡,即IC卡与单片机断开连接,蜂鸣器也要响。具体连接图如图9所示:
21
图9
(3) 电源电路
U1=220V,U2=8V,Uc1=1.2U2=9.6V,UO =5V
功率稳压电源由电源变压器、整流电路、滤波电路和稳压电路四个部
分组成,如图10所示
+ 电 源 + 整 流 + 滤 波 + 稳 压 +
22
u1 u2 u3 uI U0 _ 变压器 _ 电 路 _ 电 路 _ 电 路 _
u1 u2 u3 uI U0
0 t 0 t 0 t 0 t 0 t
图10稳压电源的组成框图及整流与稳压过程
(1).电源变压器
电源变压器的作用是将来自电网的220V交流电压u1变换为整流电路所需要的交流电压u2。电源变压器的效率为:
P2 P1其中:P2是变压器副边的功率,P1是变压器原边的功率。
(2).整流和滤波电路
在稳压电源中一般用四个二极管组成桥式整流电路,整流电路的作用是将交流电压u2变换成脉动的直流电压u3。滤波电路一般由电容组成,其作用是把脉动直流电压u3中的大部分纹波加以滤除,以得到较平滑的直流电压UI。UI与交流电压u2的有效值U2的关系为:
UI(1.1~1.2)U2 在整流电路中,每只二极管所承受的最大反向电压为: URM2U2 流过每只二极管的平均电流为: IDIR0.45U2 2R其中:R为整流滤波电路的负载电阻,它为电容C提供放电通路,放电时间常数RC应满足:
RC(3~5)T 2 23
其中:T = 20ms是50Hz交流电压的周期。 (3)稳压电路
由于输入电压u1发生波动、负载和温度发生变化时,滤波电路输出的直流电压UI会随着变化。因此,为了维持输出电压UI稳定不变,还需加一级稳压电路。稳压电路的作用是当外界因素(电网电压、负载、环境温度)发生变化时,能使输出直流电压不受影响,而维持稳定的输出。稳压电路一般采用集成稳压器和一些外围元件所组成。采用集成稳压器设计的稳压电源具有性能稳定、结构简单等优点。
集成稳压器的类型很多,在小功率稳压电源中,普遍使用的是三端稳压器。按输出电压类型可分为固定式和可调式,此外又可分为正电压输出或负电压输出两种类型。
(4)固定电压输出稳压器
常见的有CW78(LM78)系列三端固定式正电压输出集成稳压器;CW79(LM79)系列三端固定式负电压输出集成稳压器。三端是指稳压电路只有输入、输出和接地三个接地端子。型号中最后两位数字表示输出电压的稳定值,有5V、6V、9V、15V、18V和24V。稳压器使用时,要求输入电压UI与输出电压UO的电压差UI – UO ≥2V。稳压器的静态电流Io = 8mA。当UO = 5 ~ 18V时,UI的最大值UIMAX= 35V;当UO=18 ~ 24V时,UI的最大值UIMAX = 40V。
第四章 软件部分
24
一.工作过程 软件结构设计及其分析
(1)读/写器软件结构
读/写器的读/写操作由上位PC机进行控制,通过串行通信的命令字节来实现。集体规定我诶:如握手信号为0AAH,则读卡;如握手信号为0BBH,则写卡。读/写器的主程序框图如图11所示。其中,在读/写卡开始时,设置读写卡标志;在通信开始时,设置通信标志。避免数据不全或错误数据读入或写入。另外,所以的IC卡数据是先存放在IC卡的读缓冲区和写缓冲区的。“有卡插入否”是用过判断P33引脚的高低电平来实现的。为了保证读卡的可靠性,必须进行软件“去抖”处理。一旦有卡插入,则设置读/写卡标志(有卡);在通信时,设置正在通信标志。目的是我为了避免带电插卡。本系统中关键的软复位是通过在外中断INT0服务函数中设置软复位标志、在主函数中强制跳转到函数首实现的。
图11 主程序流程图
25
拔卡处理是通过设置成高优先级的下降沿触发的INT0中断来实现的。其程序
如图12所示:
图12 拔卡处理中断子程序
串行通信才用3线制软握手方式
(2)软件系统分析
为保证IC卡读/写过程准确可靠,除要保证读/写函数严格按照IC卡的读/写时序外,还须采用“重读”和“复读”措施。即读IC卡是,采用读2次的方式,如2次相符,则数据有效,否则再进行第3次读,写IC卡时,先将数据写入,再回读比较,否则重写一次,以免偶然的写失导致得出IC卡失效的错误结论。
如何使上、下位机均不死机或能简单恢复正常工作呢?对于作为下位机的IC卡读/写器,利用IC卡能随意插拔,再结合IC卡的拔卡处理是一个高级中断的特点,将IC卡的拔卡中断程序设计成2个分支:(1)非IC卡读/写且非与上位机通信状态;(2)在与上位机通信或正在对IC卡读/写状态。第1种情况下,中断子程序是简单的鞍鼻卡BEEP告警后,直接中断返回;第2种情况,则会引起系统工作时常甚至死机,在恢复中断环境后,用强制跳转指令强制从主程序开始执行,达到复位的效果。程序框图如图 12所示。
为确保串行通信的可靠性,应着重从上、下位机通信软件的以下问题入手—
26
—合理选择通信波特率。由于上、下位机通信的数据量很小(最多为IC卡的容量),因此通信波特率可选低一些,如2400;但要高度重视下位机(即IC卡读/写器)的波特率参数整顶问题。对于51系统CPU,尤其要注意电源管理寄存器中SMOD位的设置。以2400波特率为例,当SMOD=0时,波特率参数为0F9H,实际波特率为2232,此时波特率相对误差是7%;而当SMOD=1时,波特率参数为0F3H,实际波特率为2401,此时波特率相对误差是0.16%,满足正常通信所规定的波特率相对误差小于5%的要求。
二 用C51实现的读/写主程序
#include #include #define uchar unsigned char #define uint unsigned int / * IC卡信号输入/输出*/ Sbit scl=P17; Sbit sda=P16; / *I/O口定义*/ Sbit ICOUT=P32; Sbit ICIN=P33; Sbit COMM=P34; Sbit BELL=P35; Sbit PWR=P14; /*波特率选择*/ Sbit BACD=P12; /*24c01~24c16读/写驱动程序*/ Sbit a0=ACC-0; Sbit a1=ACC-1; Sbit a2=ACC-2; Sbit a3=ACC-3; Sbit a4=ACC-4; Sbit a5=ACC-5; Sbit a6=ACC-6; Sbit a7=ACC-7; / *读/写数据缓冲区,24C01最多为128B * Uchar buf[16]; Uchar flag; / * 标志定义* / Sbit IC_WR=flag-0; 27 Sbit ONCOMM=flag-1; Sbit RST=flag-2; Void start_ic(void) { Sda=1; Scl=1; Delay(2); Sda=0; Delay(6); } Void stop_ic(void) { Sda=0; Scl=1; Delay(6); Sda=1; Delay(6); Scl=0; Sda=0; } Void ack_ic(void) { Sda=0; Delay(3); Scl=1; Delay(3); Scl=0; Sda=1; } / * 读字节函数,无应答信号 * / Unsigned char rd24(void) { sda=1; scl=1;a7=sda;scl=0; Scl=1;a6=sda;scl=0; Scl=1;a5=sda;scl=0; Scl=1;a4=sda;scl=0; Scl=1;a3=sda;scl=0; Scl=1;a2=sda;scl=0; Scl=1;a1=sda;scl=0; Scl=1;a0=sda;scl=0; Sda=1;scl=1;scl=o; Return(ACC); } 28 / * 写字节函数 * / Void wd24(unsigned char dd) { ACC=dd; Sda=a7;scl=1;scl=0; Sda=a6;scl=1;scl=0; Sda=a5;scl=1;scl=0; Sda=a4;scl=1;scl=0; Sda=a3;scl=1;scl=0; Sda=a2;scl=1;scl=0; Sda=a1;scl=1;scl=0; Sda=a0;scl=1;scl=0; Sda=1;scl=1; While(sda==1); SCL=0; } / * 随机地址地字节函数,address为预读单元地址 * / Uchar read_buter(uchar address) { Uchar x; Start_ic(); Wd24(0a0); Wd24(address); Start_ic(); Wd24(0a1); X=rd24(); Stop_ic(); Return(x); } / * 从指定地址开始顺序读块地址数据,数据存入全局缓冲区中buf,n为数据字节数 * / Uchar read_bytes(uchar address,uchar n) { Uchar a,y; For(y=0;y a=read_byter(address,y); buf[y]=a; } } / * * / / * 字节写入模式写函数,其中address为单元地址,dd为数据 * / Void write_byte(uchar address,uchar dd) { Start_ic(); Wd24(0a0); Wd24(address); Wd24(dd); Stop_ic(); } / * 串行通信子程序 * / / * 波特率2400,8位数据位,1位停止位,无校验位 * / / * 先用握手字节y,然后发送x个数据 * / / * 待发送数据在trdata缓冲区中 * / Void comm.(uchar x,uchar y) { Uchar i,a; Uint j; While(1) {TI; while(RI= =0); RI=0; A=SBUF; If(a!=y)goto[1]; For(j=0;i For(j=0;j<12500;j++); } } / * 主程序初始化函数 * / Void init(void) { RSR=0; PWR=1; IC_WR=0; ONCOMM=0; EX0=1; TMOD=0x20; 30 SCON=0x50; TH1=0xf3;TL1=0xf3; If(BAUI)==0 { PCON=0x08; } Else { PCON=0x00; } TR1=1; EA=1; } / * 将数据缓冲区16B发往上位机 * / / * 波特率2400,8位数据位,1位停止位,无校验为2 * / / * 待发送数据在buf缓冲区 * / Void transfer(void) { Uchar i; Uint j; For(i=0;i<16;i++) { SBUF=buf[i]; While(TI= =0); TI=0; FCR=0;j<1000;j++); } } / * 接收16B存入缓冲区 * / / * 波特率2400,8位数据位,1位停止位,无校验位 * / / * 缓冲区为buf * / Void teceive(void) { Uchar I,a; For(i=0;i<16;i++) { while(RI= =0); RI=0; A=SBUF; Buf[i]=a; } } / * 将缓冲区的n字节写入IC卡address开始的区域 * / Void write_ic(uchar address,uchar n) { 31 Uchar x,y; For(y=0;y / * 拔卡中断程序,主要完成IC卡下电及读/写复位 * / Void int_0(void)interrupt 0 using 1 { While(! ICOUT); Delay(10); If(! ICOUT) { If(IC_WR ONCOMM) { PWR=1; BELL=0; Delay(10); BELL=1; RST==1; } } } / * 延时函数,延时ms数由N决定,但不同的系统需要调整相应参数 * / Void delay(uchar n) { Uchar i,j,k; For(k=o;k Uchar a; Fuwei: init( ); While(! ICIN); Delay(10); While(! ICIN); IC_WR=1; / * 开始读IC卡16B并存入缓冲区 * / PWR=0; Read_bytes(0,16); PWR=1; 32 / * 等待与上机位建立 通信联系 * / ONCOMM=1; While(RI= =0); RI=0; A=SBUF; Switch(a) { case 0xaa: SBUF=0xaa; While(! TI); TI=0; Transfer( ); Break; Case 0xbb: SBUF=0xbb; While(! TI); TI=O; Receive( ); PWR=0; Write_ic(0,16); PWR=1; Break; Default: SBUF=0xcc; While(! TI); TI=0; } ONCOMM=0; While(! RST); Goto fuwei; } 采用fanklincC51编译的命令如下: >C51 IC.C >L51 IC.OBJ 三 上位PC机通信接口软件 在Windows 9x的串行通信实现一般有3种方式: (1) 利用Windows 9x的API接口函数。 (2) 对于RAD开发系统(如VB),可利用ActiveX串行通信控件。 (3) 利用DLL动态链接库,直接操作串行端口。 上述3种方式各有特点。这里讨论采用第3种方式实现的串行通信接口,具有应用灵活的特点。 下面给出基于Delphi4.0的串行通信DLL程序: Library Mycomdll; 33 Use SysUtils; Classes; Const COM1: =$ 3f8; COM2: =$2f8; Var COM: Word;{DLL中全局变量} Procedure Outb(Const Port:Word;onst Dbyte:Byte);pascal; Begin Asm MOV DX,Port MOV AL,Dbyte OUT DX,AL End; End; Function Inb(Const Port:Word):Byte;pascal; Begin Asm MOV DX,Port MOV AL,Dbyte OUT DX,AL End; End; Function Inb(Const Port:Word):Byte;pascal; Begin Asm MOV DX,Port IN AL,DX MOV @Resullt,AL End; End; {串行口初始化,COM1,COM2可选,波特率2400,4800可选} Procedure CommInit(Consst Port:Byte;Const Band:String);Stdcall; Var BAUDL,BAUDH:Byte; Begin If Port=1 then COM:=COM1; Else COM:=COM2; If BAUD=’2400’ then Begin BAUDL:=$30; BAUDH:=$00; 34 End; Else Begin BAUDL:=$18; BAUDH:=$00; End; Outb(COM+3,$80); Outb(COM,BAUDL); Outb(COM+1,BAUDH); Outb(COM+3,$03); End; {发送一字节} Procedure SendByte(Const Dbyte:Byte);Stdcall; Var Status:Byte; Begin Repest Status:=Inb(COM+5); Until((Status and $20)=$20); Outb(COM,Dbyte); End; Function ReceiveByte:Byte;Stdcall; Vor Status,Res:Byyte; Begin Repear: Status:=Inb(COM+5); Until((Status and $01)=$01); Res:=Inb(COM); ReceiveByte:=Res; End; {以下用EXPORT引出输出过程或函数} Export CommInit; Export SendByte; Export ReceiveByte; Begin End. 35 第五章 总结 一. 总结 这次的毕业设计,我选择的方向是单片机,在老师的耐心指导下,经过坚持不懈的努力,我熟悉了单片机,并重新学了两门课程<<单片机>>和< 通过这次毕业设计,使我受到了一次用专业知识、专业技能分析和解决问题系统的锻炼,使我在综合知识的选用方面,在设计硬件的基本思想、方法方面都向前迈了一大步,为日后成为合格的应用型人才打下了良好的基础。 36 这次在指导老师的帮助下,基本完成了任务,在硬件及软件的设计方面有了一定的提高,为今后走上的工作岗位打下了专业基础。在这次的毕业设计中,让我深深地体会到硬件设计不是一件简单的事情,它需要设计者具有全面的专业知识,缜密的思维,严谨的工作态度以及较高分析问题、解决问题的能力,而我在这些方面都存在很大的不足。 在这,我要衷心感谢刘老师中给予我的极大帮助,使我能够完成此次的毕业设计。同时,我也要感谢我的同学,为我们的良好协作,相互帮助,才得以把这次毕业设计工作完成。 二. 致谢 大学三年眨眼而过。随着这大学期间最后一份答卷的完成,我们短暂的大学生活也将划上一个圆满的句号。回想起来,点点滴滴都是那样的刻骨铭心。 首先,我非常感谢我的指导老师刘艺柱在我们的设计上花费了不少的时间和精力。在刘老师悉心指导下,我们的设计进行的非常顺利。在此,我衷心的感谢刘老师。 其次,在本次设计中我查阅了大量的资料,巩固了所学的专业知识,拓宽了知识面,特别是在本设计中应用的一些芯片,使我对芯片的结构、原理和应用有了更深的了解。在设计的制作和与同学的交流中使我认识到了自己缺陷和不足,我会在以后的工作生活中努力改进。 最后,由于时间和能力有限,在设计中难免会有错误和不足,希望老师和同学给予批评和指正。 此外,我还要感谢所有对我传授过知识的老师,没有你们的教诲,也没有我今天的学业成果。谢谢你们!! 37 三. 参考文献 1 王卓人,邓晋均,刘宗祥, 《IC卡的技术与应用》,北京:电子工业出版社,1999 2 王爱英《智能卡技术》,北京:清华大学出版社,2000 3 何立民等 《单片机高级教程》,北京:北京航空航天大学出版社,2000.8 4 陈志斌 卓家靖 基于单片机和CPLD的嵌入式脉冲发生器设计,北京,《微计算机信息》,2005。 5 沈红伟 《单片机应用系统设计实例与分析》,科学出版社,2005. 6 邵贝贝等译 《嵌入式实时操作系统μC/OSII(第2版) 》,电子工业出版社,2003.1 7 万光毅 严义 《片机实验与实践教程 》,科学出版社,2006.7 8 周坚 《 单片机轻松入门 》 ,西安电子科技大学出版社,2002.2 9 李刚林 凌姜苇 《51系列单片机系统设计与应用技巧》 ,北京航空航 38 天大学出版社,2003.1 10 何立民 《单片机应用技术选编(10) 》,电子工业出版社,2003.1 11 刘启中 李荣正 王力生 王威 《 PIC单片机原理及应用 》,清华大学出 版社,2005.2 39 因篇幅问题不能全部显示,请点此查看更多更全内容