摘 要:介绍了以单片机AT89C51为核心的IC卡系统的设计。设计了单片机控制IC卡数据读写的软/硬件、LCD显示以及与PC机之间的串口通信。
关键词:AT24C08;AT89C51;I2C;LCD;串口通信
IC卡(Integrated Circuit Card)是将一个集成电路芯片镶在塑料基片中,封装为卡片形式,具有读写数据和存储数据的能力。接触式IC卡是现代智能卡中的一种,它是继条码卡、磁卡等之后出现的一种高性能标识卡,是微电子、计算机及电子信息等高新技术综合发展的产物。IC卡比磁卡存储容量大,可靠性和安全性高,在应用上除了覆盖磁卡的全部应用范围以外,还提供了许多磁卡所不具备的应用特性。正是这些特性,使IC卡在脱机业务处理和联网数据一致性等方面表现出前所未有的优势。现已广泛应用在金融、交通、通信、保安、娱乐等诸多领域。
1 AT24C08卡
存储卡是IC卡的一种,它是一种用可电擦写的可编程内存(E2PROM)为核心的IC卡,能够多次重复使用。AT24C08是ATMEL公司出品的I2C接口、高集成度串行E2PROM内存IC卡。AT24C08具有以下特点:与400 kHz I2C总线兼容、低功耗CMOS技术、1 000 000次编程/擦除周期及可保存数据100年以上。
AT24C08芯片的触点位置与功能符合ISO7816-2标准,触点位置如图1所示,触点功能如表1所示。
2 电路设计与读写控制
2.1 接口电路的设计
本设计采用的单片机是AT89C51[1]。AT24C08卡座与AT89C51的电路连接如图2所示[2]。SLC为串行时钟,在时钟的上升沿,数据写入E2PROM;在时钟的下降沿,数据从E2PROM被读出。SDA为双向数据端口,是一个漏极开路的引脚,满足“线与”的条件,在使用过程中需要加上拉电阻。SW1、SW2为IC卡卡座的1对常开触点,SW1与Vcc连接,SW2与AT89C51的引脚P1.0连接,平时P1.0通过1个电阻连接到地,当有卡插入时,SW1和SW2短接,Vcc将P1.0上拉到高电平,通过对P1.0上的电平查询就可以知道是否有卡插入。
2.2 AT24C08内存读写操作
AT24C08的数据接口完全符合I2C的标准。I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。I2C总线协议规定:只有在总线空闲时才允许启动数据传送。在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,不允许有跳变;且数据线的任何电平变化都将被看作总线的启动或停止信号。I2C总线在传送数据过程中共有以下3种类型信号:
(1)起始信号:当SCL处于高电平时,SDA从高到低地跳变作为I2C总线的启动信号,启动状态应该在操作命令(读/写)之前进行建立。
(2)停止信号:当SCL处于高电平时,SDA从低到高的跳变作为I2C总线的停止信号,表示一种操作的结束,马上即将结束所有的相关通信。
(3)应答信号:AT24C08在接收到8 bit数据后,在第9个脉冲向AT89C51发出1个低电平,表示已收到数据。如图3(a)所示。
通过时序图可看出,要写卡必须由起始信号启动,紧接着送入器件地址,使卡进行读/写操作。对AT24C08卡,器件地址高4位一定为1010,最低位作为读写控制位,“0”表示对IC卡进行写操作,“1”表示对IC卡进行读操作。信息高位先送出,如图3(b)所示。
由图2的接口电路可以看出,AT24C08的时钟、上/下电及读写操作均由单片机控制,因此单片机编程时应符合AT24C08的传输协议和操作命令。本设计首先按照要求编写对AT24C08进行操作的子程序,再编写主程序组成完整的IC卡读写系统[3]。几个主要子程序和IC卡读卡器对AT24C08的操作流程图如图4所示。
3 LCD显示
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16×1、20×2、40×2行等模块。本文用1602字符型液晶显示器显示读卡器读出的信息。1602的引脚说明如表2所示、与单片机AT89C51的接口电路如图5所示。
单片机读出IC卡的数据通过P0口送到液晶显示器显示,可分2行共显示32个字符,也就是16个字节的十六进制数据,通过上位机控制读数据起始地址可移动显示数据。1602可直接显示字符型数据,IC卡读出的十六进制数据需转换成字符型数据再送到液晶屏显示。
4 单片机与计算机的串口通信
4.1 单片机与计算机的硬件接口
PC机串口通常采用RS-232电平,而单片机串口是TTL电平,二者不兼容。所以,接口必须做电平转换处理。在此,采用MAXIM公司的MAX232芯片进行电平转换。AT89C51单片机TXD端连接到MAX232的T1IN端,用于发送数据;PC机的RD端连接到MAX232的T1OUT端,用于接收数据;AT89C51单片机RXD端连接到MAX232的R1OUT端,用于接收数据;PC机的TD端连接到MAX232的R1IN端,用于发送数据。
4.2 用MSComm控件实现串口通信
MSComm控件是Microsoft公司为简化Windows下串行通信编程而提供的ActiveX控件[4]。它提供了一系列标准通信命令的使用接口,可建立起与串口的连接,并可通过串口连接到其他通信设备(如Modem),从而实现发出命令、交换数据以及监视和响应串行连接中发生的事件和错误等功能。MSComm控件也可用于创建电话拨号程序、串行口通信程序和功能完备的终端程序。MSComm控件提供了事件驱动法和查询法2种处理通信的方式。在使用事件驱动法设计程序时,每当有新字符到达、端口状态改变或发生错误时,MSComm控件都将触发事件,应用程序在捕获该事件后通过检查MSComm控件的CommEvent属性可获知所发生的事件或错误,从而采取相应的操作。这种方法的优点是程序响应及时,可靠性高。虽然查询方式实质上还是属于事件驱动,但在有些情况下这种方式显得更为便捷。它适合于较小的应用程序,每当应用程序执行完某一串行口操作后,将不断检查MSComm控件的CommEvent属性以检查执行结果或某一事件是否发生。
本文设计的基于MSC-51单片机的IC卡系统硬件电路,用单片机模拟I2C的时序,使用了C语言编写源程序[5]。通过对单片机和LCD的进一步开发,可以使IC卡的使用能够脱离读卡器终端设备的限制,设计成为手持式的IC卡系统。
参考文献
[1] 罗兴垅,黄隆胜.基于AT89C51控制的0.01℃数显温度计的设计[J].微计算机信息,2006(5-2):70-72.
[2] 余永权.ATMAEL89系列单片机应用技术[M].北京:北京航空航天大学出版社,2002.
[3] 李军.系列单片机高级实例开发指南[M].北京:北京航空航天大学出版社,2004.
[4] 李长林.Visual Basic串口通信技术与典型实例[M].北京:清华大学出版社,2006.
[5] 孙涵芳.MCS-51/96系列单片机原理及应用(修订版)[M].北京:北京航空航天大学出版社,1996.