微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机IC卡读写器设计

单片机IC卡读写器设计

时间:02-21 来源:互联网 点击:

器芯片采用CMOS工艺制造,内置有高压泵,可在单电压供电条件下工作。其标准封装为8脚DIP封装形式,各引脚的功能说明如下:

SCL:串行时钟。在该脚的上升沿时,系统将数据输入到每个EEPROM器件,在下降沿时输出。

SDA:串行数据。该引脚为开漏极驱动,可双向传送数据。

A0、A1、A2:器件/页面寻址。为器件地址输入端。在AT24C01/02中,该引脚被硬连接。

Vcc:一般输入+5V的工作电压。

图1是符合ISO7816-2标准的IC卡的触点图。对于AT24系列通用存贮器IC卡来说,通常只需使用四个触点。AT24C01的内部组态为128个8位字节,而对随机字寻址则需要一个7位地址。

2.2 总线状态及时序

A24C01的SCL及SDA两总线可通过一个电阻上拉为高电平,SDA上的数据仅在SCL为低电平时周期才能改变。当SCL为高电平时,SDA的改变表示“开始”和“停止”状态。此时,所有地址和数据字都以8位串行码方式输入输出EEPROM。

开始状态:SCL为高电平时,SDA由高电平转入低电平。该命令必须在其它命令前执行。

停止状态:SCL为高电平时,SDA由低电平转入高电平。该命令可终止所有通讯。

确认:相同总线上的设备在收到数据后,以置SDA为低电平的方式对其进行确认。

2.3 器件寻址

AT24系列EEPROM在开始状态后需紧接一个8位器件地址,以进行应读写操作。设备寻址码的高4位为1、0、1、0,对于AT24C01/02,寻址码高4位后面的三位是器件寻址码,与它们的硬连线管脚相对应。最低应是读写选择位,置0时可激发读操作。

具体的格式如下:

1010A2A1A0R/W

2.4 AT89C2051芯片

AT89C2051 是MCS-51产品的兼容型,它具有2k的FLASH ROM、128字节ROM,15根I/O引线、两个16位定时/计数器、一个五向量两级中断结构、一个全双工串行口、一个精密模拟比较器以及片内振荡电路和时钟电路。它的P1口和P3口是双向I/O口,其中P1.2~P1.7、P3.0~P3.5和P3.7带有内部上拉电阻。在AT89C2051用作输入端时,将首先向引脚写“1”而使内部MOS管截止以便引脚处于悬浮状态,从而可获得高阻抗输入。

图2为通用存贮器IC卡的基本电路连接图。

3 读写操作软件

当系统采用6MHz晶体振荡器时所定义的I/O口线及器件地址如下:

SCL BIT P1.7

SDA BIT P1.6

DEVICEAD_W DATA 10100000B ;写卡器件地址

DEVICEAD_R DATA 10100001B ;读卡器件地址

3.1 开始条件(START_IC)

在开始条件下,当SCL为高电平时,SDA由高转为低。程序如下:

START_IC:CLR SCL;SCL低电平时才允许SDA更改

NOP ;加入空指令延时以确保信号可靠

NOP

SETB SDA

NOP

NOP

SETB SCL

NOP

NOP

CLR SDA

NOP

NOP

CLR SCL

NOP

RET

3.2 停止条件(STOP_C)

在停止条件下,当SCL为高电平时,SDA由低转为高。程序如下:

STOP_IC:CLR SCL

NOP

NOP

CLR SDA

NOP

NOP

SETB SCL

NOP

NOP

SETB SDA

NOP

NOP

CLR SCL

NOP

NOP

CLR SDA

RET

3.3 确认信号(ACK_IC)

在接收方应答下,每收到一字节后便将SDA电平拉低,程序如下:

ACK_IC:CLR SCL

NOP

NOP

CLR SDA

NOP

NOP

SEIB SCL

NOP

NOP

CLR SCL

NOP

SETB SDA

NOP

RET

3.4 写一字节数据到IC卡(WR_BYTE)

在下列程序中,参数A表示源数据,R5表示字节位数。

WR_BYTE:MOV R5,#08 ;一字节8位数据

CLR SCL

NOP

NOP

WR_BYTE1:RLC A ;带进位位左移,A.8->C

MOV SDA,C ;SCL低电平时改变SDA上的数据

NOP

SETB SCL ;拉高SCL把数据发送出去

NOP

NOP

CLR SCL

NOP

NOP

DJNZ R5,WR_BYTE1;依次发送A中的8位数据

SETB SDA

SETB SCL

JB SDA,$ ;等待IC卡确认信号

CLR SCL

NOP

RET

此子程序的主要作用是按照定义的时序,顺序左移A中一字节8位数据,并通过引脚传送出去。当一字节发完后,等待IC卡发回的确认信号。

3.5 从IC卡读一字节(RD+BYTE)

从IC卡中读一字节的源程序如下:

RD_BYTE:MOV R5,#08

SETB SDA ;设备SDA为读状态

CLR A ;清空A寄存器

RD_BTYE1:MOV C,SDA ;读一位数据到进位位

RLC A ;左移数据到A.0

SETB SCL

NOP

NOP

CLR SCL

NOP

NOP

DJNZ R5,RD_BYTE1;依次读出8位数据到A中

RET ;无应答信号

利用该程序可将读出的数据存放在A中。需要注意的是:读数据的器件不是通过确认状态来应答的,而是随后产生一个停止状态。

3.6 字节写入模式写数据(WRITE_BYTE)

下列程序中的参数为:R6= =目的地址,A= =数据;数据如下:

WRITE_BYTE:PUSH ACC ;保存A中的数据

LCALL START_IC ;发开始信号

MOV A,#DEVICEAD_W;写入器件地址

LCAL WR_BYTE

MOV A,R6 ;写入字节地址

LCALL WR_BYTE

POP ACC ;恢复A中数据

LCALL WR_BYTE ;写入数据

LCALL STOP_IC

RET

在收到8位数据后,EEPROM将通过SDA来回送确认信号,而传送设备必须用停止状态来终止写操作。这时,EEPROM将进入一个内时

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top