附录整套24c16单片机读写驱动程序.docx

上传人:b****6 文档编号:15807153 上传时间:2023-07-08 格式:DOCX 页数:15 大小:46.09KB
下载 相关 举报
附录整套24c16单片机读写驱动程序.docx_第1页
第1页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第2页
第2页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第3页
第3页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第4页
第4页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第5页
第5页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第6页
第6页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第7页
第7页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第8页
第8页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第9页
第9页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第10页
第10页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第11页
第11页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第12页
第12页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第13页
第13页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第14页
第14页 / 共15页
附录整套24c16单片机读写驱动程序.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

附录整套24c16单片机读写驱动程序.docx

《附录整套24c16单片机读写驱动程序.docx》由会员分享,可在线阅读,更多相关《附录整套24c16单片机读写驱动程序.docx(15页珍藏版)》请在冰点文库上搜索。

附录整套24c16单片机读写驱动程序.docx

附录整套24c16单片机读写驱动程序

附录-整套24c16单片机读写驱动程序

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

自动化仪表2002Vol.23No.6P.37-41

本文对AT24系列存贮器和AT89系列单片机的特征及总线状态作为介绍,并以AT24C01与AT89C2051为例详细描述了通用存贮器IC卡的工作原理及用单片机对其进行读写操作的基本电路连接和软件编程方法。

用存贮器IC卡是由通用存贮器芯片封装而成的,由于它的结构和功能简单,生产成本低,使用方便,因此在各领域都得到了广泛的应用。

目前用于IC卡的通用存贮器芯片多为E2PROM,其常用的协议主要有两线串行连接协议(I2C)和三线串行链接协议,其中比较常用的是ATMEL公司生产的AT24系列芯片。

以该系列中的AT24C01为例,它具有1k的存贮容量,适用于2V~5V的低电压/标准电压的操作,具有低功耗和高可靠性等优点。

而AT89C2051虽是ATMEL公司89系列单片机的低档型,但它具有2k的FLASHROM(可重编闪速存贮器)、128×8位内部RAM及全静态操作方式,同样也具有低功耗和较强的功能。

下面以AT24C2051为例,对通用存贮器IC卡的工作原理及基本电路连线作一介绍,该线路简单,使用灵活,能可靠地对通用存贮器IC卡进行读写。

2硬件特性

2.1AT24系列存贮器的特性

AT24系列存贮器芯片采用CMOS工艺制造,内置有高压泵,可在单电压供电条件下工作。

其标准封装为8脚DIP封装形式,各引脚的功能说明如下:

SCL:

串行时钟。

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

SDA:

串行数据。

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

A0、A1、A2:

器件/页面寻址。

为器件地址输入端。

在AT24C01/02中,该引脚被硬连接。

Vcc:

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

图1是符合ISO7816-2标准的IC卡的触点图(见IC卡书P186)。

对于AT24系列通用存贮器IC卡来说,通常只需使用四个触点。

AT24C01的内部组态为128个8位字节,而对随机字寻址则需要一个7位地址。

2.2总线状态及时序

AT24C01的SCL及SDA两总线可通过一个电阻上拉为高电平,SDA上的数据仅在SCL为低电平时才能改变。

当SCL为高电平时,SDA的改变表示“开始”和“停止”状态。

此时,所有地址和数据字都以8位串行码方式输入输出EEPROM。

开始状态:

SCL为高电平时,SDA由高电平转入低电平。

该命令必须在其它命令前执行。

SCL

SDA

停止状态:

SCL为高电平时,SDA由低电平转入高电平。

该命令可终止所有通讯。

SCL

SDA

确认:

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

SCL

SDA

2.3器件寻址

AT24系列EEPROM在开始状态后需紧接一个8位器件地址,以进行应读写操作。

设备寻址码的高4位为1、0、1、0,对于AT24C01/02,寻址码高4位后面的三位是器件寻址码,与它们的硬连线管脚相对应。

最低应是读写选择位,置0时可激发读操作。

AT24设备寻址码具体的格式如下:

1010A2A1A0R/W

2.4AT89C2051芯片

AT89C2051是MCS-51产品的兼容型,它具有2k的FLASHROM、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口线及器件地址如下:

SCLBITP1.7

SDABITP1.6

DEVICEAD_WDATA10100000B;写卡器件地址

DEVICEAD_RDATA10100001B;读卡器件地址

3.1开始条件(START_IC)

当SCL为高电平时,SDA由高转为低。

程序如下:

SCL

0

SDA在SCL、SDA全1前提下进入开始,开始完成后,SCL、SDA全0

0

START_IC:

CLRSCL;SCL由高变低,因为SCL低电平时才允许SDA更改

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

NOP

SETBSDA;SDA先高

NOP

NOP

SETBSCL;SCL高,起始条件建立时间大于4.7us

NOP

NOP

CLRSDA;SDA低,起始条件锁定时大于4us

NOP

NOP

CLRSCL;SCL低,钳住总线,准备发数据

NOP

RET

3.2停止条件(STOP_IC)

当SCL为高电平时,SDA由低转为高。

程序如下:

SCL

SDA;在SCL、SDA高或低的前提下均可进入停止过程

;停止过程完成后,SCL、SDA全1

STOP_IC:

CLRSCL;SCL低

NOP

CLRSDA

NOP

NOP

SETBSCL;发送结束条件的时钟信号

NOP;结束总线时间大于4us(取4.7us)

NOP

SETBSDA;结束总线

NOP;保证一个终止信号和起始信号的空闲时间大于4.7us

NOP;在SCL、SDA高或低的前提下均可进入停止,停止完成后,SCL、SDA全1

RET

3.3应答确认信号(MACK_IC)与非应答信号MNACK_IC

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

SCL

0

SDA1;应答完成后,SCL=0,SDA=1

应答确认信号(MACK_IC)

MACK_IC:

CLRSCL

NOP

CLRSDA;在第9个SLC脉冲,将SDA置0

NOP

NOP

SEIBSCL

NOP;保持数据时间,即SCL为高时间大于4.7us

NOP

CLRSCL

NOP

SETBSDA;在SDA高或低的任何前提下,应答完成后,SCL=0,SDA=1

NOP

RET

发送非应答信号MNACK_IC

MNACK_IC:

CLRSCL

NOP

NOP

SETBSDA;将SDA置1

NOP

NOP

SETBSCL

NOP

NOP;保持数据时间,即SCL为高时间大于4.7us

NOP

NOP

NOP

CLRSCL

NOP

SETBSDA

NOP

RET

24C16程序资源安排是:

R0=字节的循环指针,R2=位数的计数器,

R3=卡器件地址,R4=字节地址,R5=字节数或页面长度。

R1可以留作其他循环指针,R6、R7可以留作uS级延时。

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

SCL

SDAD7D6┉D0等待IC确认

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

WR_BYTE:

MOVR2,#08;一字节8位数据

CLRSCL

NOP

NOP

WR_BYTE1:

RLCA;带进位位左移,A.8->C

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

NOP

SETBSCL;拉高SCL>=4.7uS把数据发送出去

NOP

NOP

CLRSCL

NOP

NOP

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

SETBSDA

NOP

NOP

SETBSCL

CLRF0

NOP

NOP

MOVC,SDA

JCWR_BYTE2

SETBF0;判断应答位

WR_BYTE2:

NOP

CLRSCL

NOP

RET

此子程序的主要作用是按照定义的时序,顺序左移A中一字节8位数据,并通过引脚传送出去。

当一字节发完后,等待IC卡发回的确认信号。

3.5从IC卡读一字节(RD_BYTE)

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

SCL

SDAD7D6┉D0发停止状态

RD_BYTE:

MOVR2,#08

SETBSDA;设备SDA为读状态

CLRA;清空A寄存器

NOP

NOP

RD_BTYE1:

SETBSCL;时钟线为高,接收数据位

NOP

NOP

MOVC,SDA;读取一位数据到进位位

RLCA;左移数据到ACC.0

CLRSCL;将SCL拉低,时间大于4.7us

NOP

NOP

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

RET;无应答信号

利用该程序可将读出的数据存放在A中。

需要注意的是:

读数据的器件不是通过确认状态来应答的,而是随后产生一个停止状态。

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

下列程序入口参数:

R3=卡器件地址,R4=目的字节地址,A=待写数据

出口参数:

F0作应答位,F0=1有应答

占用资源:

A、R4、CY、F0

发开始信号---写卡器件地址---写入字节地址---写入单字节数据---发停止信号

WRITE_BYTE:

PUSHACC;保存A中的数据

LCALLSTART_IC;发开始信号

MOVA,R3;写入器件地址8位

LCALLWR_BYTE

JNBF0,RETWRB;无应答则跳转

MOVA,R4;写入字节地址8位

LCALLWR_BYTE

JNBF0,RETWRB;无应答则跳转

POPACC;恢复待写的A中数据

LCALLWR_BYTE;写入单字节数据

LCALLSTOP_IC;发停止信号

RET

RETWRB:

POPACC

LCALLSTOP

RET

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

这时,EEPROM将进入一个内时固定存贮器的写入周期并且禁止在此其间的所有输入,直到写操作完成后才对通讯应答。

其写入周期可自定义,最大为10ms。

3.7页面写入模式写多字节数据(WRITE_PAGE)

入口参数:

R3=卡器件地址,R4=目的字节地址,R5=页面长度。

R0=写数据缓冲指针

发开始信号---写卡器件地址---写页面目的地址---连续写(R5)个字节数据---发停止信号

WRITE_PAGE:

LCALLSTART_IC;发开始信号

MOVA,R3;写卡器件地址

LCALLWR_BYTE

JNBF0,IWRNBYTE

MOVA,R4;写页面目的地址

LCALLWR_BYTE

JNBF0,IWRNBYTE

WRITE_PAGE1:

MOVA,@R0;连续写(R5)个字节数据

LCALLWR_BYTE

JNBF0,IWRNBYTE

INCR0

DJNZR5,WRITE_PAGE1

IWRNBYTE:

LCALLSTOP_IC;发停止信号

RET

AT24C01/02可利用上述程序进行8字节的页面写入,它的操作类似于写字节。

不同的是,它无需在第一个字节送出后以停止状态,不同在收到确认信号后,再传送7个字节的数据码,最后以停止状态来终止页面写序列。

AT24C04/08/16的页面为16字节。

3.8立即性地址读单字节模式(READ_BYTEC)

立即地址读模式读一字节数据的程序如下:

入口参数:

R3=卡器件地址,(字节源地址以芯片内的当前地址)

出口数据:

读取数据ACC

开始信号---写出读卡器件---读出默认地址数据---发停止状态应答

READ_BYTEC:

LCALLSTART_IC;开始信号

MOVA,R3;写读卡器件地址

LCALLWR_BYTE

JNBF0,RETRDB

LCALLRD_BYTE;读出默认地址数据

LCALLMNACK;读完最后一个字节数据需要发非应答信号

RETRDB:

LCALLSTOP_IC;发停止状态应答

RET

该程序执行后,其内部数据字地址指针将保持在上次读写操作访问的最后一个地址,并按1递增且在芯片上电期间一直有效。

只有当地址为页面的最末时,下次访问才滚动到该页面的首地址。

3.9选择性地址读单字节模式(READ_BYTER)

在下列程序中,R3=卡器件地址,R4=字节源地址

出口数据:

读取数据ACC

程序如下:

开始信号--执行空字节写卡器件地址---写入源地址

---开始信号--写卡器件地址--立即地址的数据读出—停止信号

READ_BYTER:

LCALLSTART_IC;启动总线

MOVA,R3;执行空字节写卡器件地址

LCALLWR_BYTE

JNBF0,READ_BYTE3

MOVA,R4;写入源字节地址

LCALLWR_BYTE

LCALLSTART_IC;重新启动总线

MOVA,R3

LCALLWR_BYTE;写卡器件地址

JNBF0,READ_BYTE3

LCALLRD_BYTE;立即地址数据读出

LCALLMNACK;读完最后一个字节数据需要发非应答信号

READ_BYTE3:

LCALLSTOP_IC;停止信号

RET

读操作模式需要一个字节写序列载入数据地址。

在器件和数据地址写入并得到确认后,将再产生另一个开始条件,并送出读操作器件的地址,同时激发一个立即地址读取。

3.10立即地址的连续读取N个字节数据(READ_BYTES)

;功能:

从卡器件的当前立即字节地址开始读取N个数据

入口参数:

R3=卡器件地址,(字节源地址默认当前立即地址),R5=N数据长度

出口参数:

R0=目的指针

开始信号--写出读卡器件---(R5)个立即地址的数据读出---停止信号

READ_BYTES:

LCALLSTART_IC;开始信号

MOVA,R3;写出读卡器件

LCALLWR_BYTE

JNBF0,BYTESRET

READ_BYS2:

LCALLRD_BYTE;连续立即地址的数据读出

MOV@R0,A;存放数据到目的地址

INCR0

DJNZR5,READ_BYS1

LCALLMNACK;读完最后一个字节数据需要发非应答信号

BYTESRET:

LCALLSTOP_IC;读完N个字节后发停止信号

RET

READ_BYS1:

LCALLACK_IC;收到数据后发确认信号

SJMPREAD_BYS2

其中连续读取由立即地址读或选择性地址读激发,并在收到一字节数据后发确认信号应答。

当读数器件以停止状态应答时,操作被终止。

3.11选择性地址的连续读取N个字节数据(READ_BYTES)

;功能:

从卡器件某指定的字节地址开始读取N个数据

;入口参数:

R3=卡器件地址,R4=字节源地址,R5=N数据长度

;出口参数:

R0=接收数据目的缓冲区指针

;占用资源:

A、R0、R2、、R3、R4、R5、CY

IRDNBYTE:

LCALLSTART;启动总线

MOVA,R3

LCALLWR_BYTE;发送卡器件地址

JNBF0,RETRDN

MOVA,R4;指定源字节地址

LCALLWR_BYTE

LCALLSTART;重新启动总线

MOVA,R3

LCALLWR_BYTE;写卡器件地址

JNBF0,IRDNBYTE

RDN1:

LCALLRDBYTE;读操作开始

MOV@R0,A

INCR0

DJNZR5,SACK

LCALLMNACK;读完最后一个字节数据需要发非应答信号

RETRDN:

LCALLSTOP_IC;发停止信号

RET

SACK:

LCALLMACK

SJMPRDN1

4总结

该系统结构简单,在实际运行时具有很高的可靠性,同时具有一定的可扩展性,并可通过单片机的串行口经电平转换后直接与计算机相连,以进行数据通讯。

另外,也可根据需要连接到其它引脚或卡座触点,如果适当改进电路和程序,还可读写加密卡和CPU卡等。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2