新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机实现通用存贮器IC卡读写

单片机实现通用存贮器IC卡读写

作者: 时间:2012-07-19 来源:网络 收藏


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中。需要注意的是:读数据的器件不是通过确认状态来应答的,而是随后产生一个停止状态。



评论


相关推荐

技术专区

关闭