_整套24c16单片机读写驱动程序.pdf

上传人:X** 文档编号:61420038 上传时间:2022-11-21 格式:PDF 页数:8 大小:483.76KB
返回 下载 相关 举报
_整套24c16单片机读写驱动程序.pdf_第1页
第1页 / 共8页
_整套24c16单片机读写驱动程序.pdf_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《_整套24c16单片机读写驱动程序.pdf》由会员分享,可在线阅读,更多相关《_整套24c16单片机读写驱动程序.pdf(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、先天下之忧而忧,后天下之乐而乐。范仲淹以铜为镜,可以正衣冠;以古为镜,可以知兴替;以人为镜,可以明得失。旧唐书魏征列传用单片机实现通用存贮器 IC 卡的读写 自动化仪表 2002 本文对AT24系列存贮器和AT89系列单片机的特征及总线状态作为介绍,并以AT24C01与AT89C2051为例详细描述了通用存贮器 IC 卡的工作原理及用单片机对其进行读写操作的基本电路连接和软件编程方法。用存贮器 IC 卡是由通用存贮器芯片封装而成的,由于它的结构和功能简单,生产成本低,使用方便,因此在各领域都得到了广泛的应用。目前用于 IC 卡的通用存贮器芯片多为 E2PROM,其常用的协议主要有两线串行连接协

2、议(I2C)和三线串行链接协议,其中比较常用的是 ATMEL 公司生产的 AT24 系列芯片。以该系列中的 AT24C01 为例,它具有 1k 的存贮容量,适用于 2V5V 的低电压/标准电压的操作,具有低功耗和高可靠性等优点。而 AT89C2051 虽是 ATMEL 公司 89 系列单片机的低档型,但它具有2k 的 FLASH ROM(可重编闪速存贮器)、1288 位内部 RAM 及全静态操作方式,同样也具有低功耗和较强的功能。下面以 AT24C2051 为例,对通用存贮器 IC 卡的工作原理及基本电路连线作一介绍,该线路简单,使用灵活,能可靠地对通用存贮器 IC 卡进行读写。2 硬件特性

3、AT24 系列存贮器的特性 AT24 系列存贮器芯片采用 CMOS 工艺制造,内置有高压泵,可在单电压供电条件下工作。其标准封装为8 脚 DIP 封装形式,各引脚的功能说明如下:SCL:串行时钟。在该脚的上升沿时,系统将数据输入到每个 EEPROM 器件,在下降沿时输出。SDA:串行数据。该引脚为开漏极驱动,可双向传送数据。A0、A1、A2:器件/页面寻址。为器件地址输入端。在 AT24C01/02 中,该引脚被硬连接。Vcc:一般输入+5V 的工作电压。图 1 是符合 ISO7816-2 标准的 IC 卡的触点图(见 IC 卡书 P186)。对于 AT24 系列通用存贮器 IC 卡来说,通常

4、只需使用四个触点。AT24C01 的内部组态为 128 个 8 位字节,而对随机字寻址则需要一个 7 位地址。总线状态及时序 AT24C01 的 SCL 及 SDA 两总线可通过一个电阻上拉为高电平,SDA 上的数据仅在 SCL 为低电平时才能改变。当 SCL 为高电平时,SDA 的改变表示“开始”和“停止”状态。此时,所有地址和数据字都以 8 位串行码方式输入输出 EEPROM。开始状态:SCL 为高电平时,SDA 由高电平转入低电平。该命令必须在其它命令前执行。SCL SDA 停止状态:SCL 为高电平时,SDA 由低电平转入高电平。该命令可终止所有通讯。SCL SDA 确认:相同总线上的

5、设备在收到数据后,以置 SDA 为低电平的方式对其进行确认。SCL SDA 器件寻址 AT24 系列 EEPROM 在开始状态后需紧接一个 8 位器件地址,以进行应读写操作。设备寻址码的高 4 位为1、0、1、0,对于 AT24C01/02,寻址码高 4 位后面的三位是器件寻址码,与它们的硬连线管脚相对应。其身正,不令而行;其身不正,虽令不从。论语万两黄金容易得,知心一个也难求。曹雪芹最低应是读写选择位,置 0 时可激发读操作。AT24 设备寻址码具体的格式如下:1 0 1 0 A2 A1 A0 R/W AT89C2051 芯片 AT89C2051 是 MCS-51 产品的兼容型,它具有 2k

6、 的 FLASH ROM、128 字节 ROM,15 根 I/O 引线、两个 16位定时/计数器、一个五向量两级中断结构、一个全双工串行口、一个精密模拟比较器以及片内振荡电路和时钟电路。它的 P1 口和 P3 口是双向 I/O 口,其中、和带有内部上拉电阻。在 AT89C2051 用作输入端时,将首先向引脚写“1”而使内部 MOS 管截止以便引脚处于悬浮状态,从而可获得高阻抗输入。图 2 为通用存贮器 IC 卡的基本电路连接图。(略)3 读写操作软件 当系统采用6MHz 晶体振荡器时所定义的 I/O 口线及器件地址如下:SCL BIT SDA BIT DEVICEAD_W DATA B;写卡器

7、件地址 DEVICEAD_R DATA B;读卡器件地址 开始条件(START_IC)当 SCL 为高电平时,SDA 由高转为低。程序如下:SCL 0 SDA 在 SCL、SDA 全 1 前提下进入开始,开始完成后,SCL、SDA 全 0 0 START_IC:CLR SCL ;SCL 由高变低,因为 SCL 低电平时才允许 SDA 更改 NOP ;加入空指令延时以确保信号可靠 NOP SETB SDA ;SDA 先高 NOP NOP SETB SCL ;SCL 高,起始条件建立时间大于 NOP NOP CLR SDA ;SDA 低,起始条件锁定时大于 4us NOP NOP CLR SCL

8、;SCL 低,钳住总线,准备发数据 NOP RET 停止条件(STOP_IC)当 SCL 为高电平时,SDA 由低转为高。程序如下:SCL SDA ;在 SCL、SDA 高或低的前提下均可进入停止过程 ;停止过程完成后,SCL、SDA 全 1 STOP_IC:勿以恶小而为之,勿以善小而不为。刘备天行健,君子以自强不息。地势坤,君子以厚德载物。易经CLR SCL ;SCL 低 NOP CLR SDA NOP NOP SETB SCL ;发送结束条件的时钟信号 NOP ;结束总线时间大于 4us(取)NOP SETB SDA ;结束总线 NOP ;保证一个终止信号和起始信号的空闲时间大于 NOP;

9、在 SCL、SDA 高或低的前提下均可进入停止,停止完成后,SCL、SDA 全 1 RET 应答确认信号(MACK_IC)与非应答信号 MNACK_IC 在接收方,每收到一字节后便将 SDA 电平拉低,程序如下:SCL 0 SDA 1 ;应答完成后,SCL=0,SDA=1 应答确认信号(MACK_IC)MACK_IC:CLR SCL NOP CLR SDA ;在第 9 个 SLC 脉冲,将 SDA 置 0 NOP NOP SEIB SCL NOP ;保持数据时间,即 SCL 为高时间大于 NOP CLR SCL NOP SETB SDA ;在 SDA 高或低的任何前提下,应答完成后,SCL=0

10、,SDA=1 NOP RET 发送非应答信号 MNACK_IC MNACK_IC:CLR SCL NOP NOP SETB SDA ;将 SDA 置 1 NOP NOP SETB SCL NOP NOP ;保持数据时间,即 SCL 为高时间大于 NOP NOP NOP 百学须先立志。朱熹万两黄金容易得,知心一个也难求。曹雪芹 CLR SCL NOP SETB SDA NOP RET 24C16 程序资源安排是:R0=字节的循环指针,R2=位数的计数器,R3=卡器件地址,R4=字节地址,R5=字节数或页面长度。R1 可以留作其他循环指针,R6、R7 可以留作 uS 级延时。写一字节数据到 IC

11、卡(WR_BYTE)SCL SDA D7 D6 D0 等待 IC 确认 在下列程序中,参数 A 表示源数据,R2 表示字节位数。WR_BYTE:MOV R2,#08;一字节 8 位数据 CLR SCL NOP NOP WR_BYTE1:RLC A;带进位位左移,C MOV SDA,C;SCL 低电平时改变 SDA 上的数据 NOP SETB SCL;拉高 SCL =把数据发送出去 NOP NOP CLR SCL NOP NOP DJNZ R2,WR_BYTE1;依次发送 A 中的 8 位数据 SETB SDA NOP NOP SETB SCL CLR F0 NOP NOP MOV C,SDA

12、JC WR_BYTE2 SETB F0 ;判断应答位 WR_BYTE2:NOP CLR SCL NOP RET 此子程序的主要作用是按照定义的时序,顺序左移 A 中一字节 8 位数据,并通过引脚传送出去。当一字节发完后,等待 IC 卡发回的确认信号。从 IC 卡读一字节(RD_BYTE)从 IC 卡中读一字节的源程序如下:宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒。洪应明老当益壮,宁移白首之心;穷且益坚,不坠青云之志。唐王勃SCL SDA D7 D6 D0 发停止状态 RD_BYTE:MOV R2,#08 SETB SDA;设备 SDA 为读状态 CLR A;清空 A 寄存器 NOP

13、NOP RD_BTYE1:SETB SCL ;时钟线为高,接收数据位 NOP NOP MOV C,SDA ;读取一位数据到进位位 RLC A ;左移数据到 CLR SCL ;将 SCL 拉低,时间大于 NOP NOP DJNZ R2,RD_BYTE1;依次读出 8 位数据到 A 中 RET;无应答信号 利用该程序可将读出的数据存放在 A 中。需要注意的是:读数据的器件不是通过确认状态来应答的,而是随后产生一个停止状态。字节写入模式写单字节数据(WRITE_BYTE)下列程序入口参数:R3=卡器件地址,R4=目的字节地址,A=待写数据 出口参数:F0 作应答位,F0=1 有应答 占用资源:A、R

14、4、CY、F0 发开始信号-写卡器件地址-写入字节地址-写入单字节数据-发停止信号 WRITE_BYTE:PUSH ACC;保存 A 中的数据 LCALL START_IC;发开始信号 MOV A,R3 ;写入器件地址 8 位 LCALL WR_BYTE JNB F0,RETWRB ;无应答则跳转 MOV A,R4;写入字节地址 8 位 LCALL WR_BYTE JNB F0,RETWRB ;无应答则跳转 POP ACC;恢复待写的 A 中数据 LCALL WR_BYTE;写入单字节数据 LCALL STOP_IC;发停止信号 RET RETWRB:POP ACC LCALL STOP RE

15、T 在收到 8 位数据后,EEPROM 将通过 SDA 来回送确认信号,而传送设备必须用停止状态来终止写操作。这时,EEPROM 将进入一个内时固定存贮器的写入周期并且禁止在此其间的所有输入,直到写操作完成后才对通讯应答。其写入周期可自定义,最大为 10ms。非淡泊无以明志,非宁静无以致远。诸葛亮百川东到海,何时复西归?少壮不尽力,老大徒伤悲。汉乐府长歌行 页面写入模式写多字节数据(WRITE_PAGE)入口参数:R3=卡器件地址,R4=目的字节地址,R5=页面长度。R0=写数据缓冲指针 发开始信号-写卡器件地址-写页面目的地址-连续写(R5)个字节数据-发停止信号 WRITE_PAGE:LC

16、ALL START_IC ;发开始信号 MOV A,R3 ;写卡器件地址 LCALL WR_BYTE JNB F0,IWRNBYTE MOV A,R4 ;写页面目的地址 LCALL WR_BYTE JNB F0,IWRNBYTE WRITE_PAGE1:MOV A,R0 ;连续写(R5)个字节数据 LCALL WR_BYTE JNB F0,IWRNBYTE INC R0 DJNZ R5,WRITE_PAGE1 IWRNBYTE:LCALL STOP_IC ;发停止信号 RET AT24C01/02 可利用上述程序进行 8 字节的页面写入,它的操作类似于写字节。不同的是,它无需在第一个字节送出后

17、以停止状态,不同在收到确认信号后,再传送 7 个字节的数据码,最后以停止状态来终止页面写序列。AT24C04/08/16 的页面为 16 字节。立即性地址读单字节模式(READ_BYTEC)立即地址读模式读一字节数据的程序如下:入口参数:R3=卡器件地址,(字节源地址以芯片内的当前地址)出口数据:读取数据 ACC 开始信号-写出读卡器件-读出默认地址数据-发停止状态应答 READ_BYTEC:LCALL START_IC;开始信号 MOV A,R3 ;写读卡器件地址 LCALL WR_BYTE JNB F0,RETRDB LCALL RD_BYTE ;读出默认地址数据 LCALL MNACK

18、;读完最后一个字节数据需要发非应答信号 RETRDB:LCALL STOP_IC ;发停止状态应答 RET 该程序执行后,其内部数据字地址指针将保持在上次读写操作访问的最后一个地址,并按 1 递增且在芯片上电期间一直有效。只有当地址为页面的最末时,下次访问才滚动到该页面的首地址。选择性地址读单字节模式(READ_BYTER)在下列程序中,R3=卡器件地址,R4=字节源地址 出口数据:读取数据 ACC 程序如下:开始信号-执行空字节写卡器件地址-写入源地址-开始信号-写卡器件地址-立即地址的数据读出停止信号 READ_BYTER:LCALL START_IC ;启动总线 MOV A,R3 ;执行

19、空字节写卡器件地址 LCALL WR_BYTE JNB F0,READ_BYTE3 MOV A,R4 ;写入源字节地址 良辰美景奈何天,便赏心乐事谁家院。则为你如花美眷,似水流年。汤显祖好学近乎知,力行近乎仁,知耻近乎勇。中庸LCALL WR_BYTE LCALL START_IC ;重新启动总线 MOV A,R3 LCALL WR_BYTE ;写卡器件地址 JNB F0,READ_BYTE3 LCALL RD_BYTE ;立即地址数据读出 LCALL MNACK ;读完最后一个字节数据需要发非应答信号 READ_BYTE3:LCALL STOP_IC ;停止信号 RET 读操作模式需要一个字

20、节写序列载入数据地址。在器件和数据地址写入并得到确认后,将再产生另一个开始条件,并送出读操作器件的地址,同时激发一个立即地址读取。立即地址的连续读取 N 个字节数据(READ_BYTES);功能:从卡器件的当前立即字节地址开始读取 N 个数据 入口参数:R3=卡器件地址,(字节源地址默认当前立即地址),R5=N 数据长度 出口参数:R0=目的指针 开始信号-写出读卡器件-(R5)个立即地址的数据读出-停止信号 READ_BYTES:LCALL START_IC ;开始信号 MOV A,R3 ;写出读卡器件 LCALL WR_BYTE JNB F0,BYTESRET READ_BYS2:LCAL

21、L RD_BYTE ;连续立即地址的数据读出 MOV R0,A ;存放数据到目的地址 INC R0 DJNZ R5,READ_BYS1 LCALL MNACK ;读完最后一个字节数据需要发非应答信号 BYTESRET:LCALL STOP_IC ;读完 N 个字节后发停止信号 RET READ_BYS1:LCALL ACK_IC ;收到数据后发确认信号 SJMP READ_BYS2 其中连续读取由立即地址读或选择性地址读激发,并在收到一字节数据后发确认信号应答。当读数器件以停止状态应答时,操作被终止。选择性地址的连续读取 N 个字节数据(READ_BYTES);功能:从卡器件某指定的字节地址开

22、始读取 N 个数据;入口参数:R3=卡器件地址,R4=字节源地址,R5=N 数据长度;出口参数:R0=接收数据目的缓冲区指针 ;占用资源:A、R0、R2、R3、R4、R5、CY IRDNBYTE:LCALL START ;启动总线 MOV A,R3 LCALL WR_BYTE ;发送卡器件地址 JNB F0,RETRDN MOV A,R4 ;指定源字节地址 LCALL WR_BYTE LCALL START ;重新启动总线 MOV A,R3 LCALL WR_BYTE ;写卡器件地址 JNB F0,IRDNBYTE 天行健,君子以自强不息。地势坤,君子以厚德载物。易经大丈夫处世,不能立功建业,几与草木同腐乎?罗贯中RDN1:LCALL RDBYTE ;读操作开始 MOV R0,A INC R0 DJNZ R5,SACK LCALL MNACK ;读完最后一个字节数据需要发非应答信号 RETRDN:LCALL STOP_IC ;发停止信号 RET SACK:LCALL MACK SJMP RDN1 4 总结 该系统结构简单,在实际运行时具有很高的可靠性,同时具有一定的可扩展性,并可通过单片机的串行口经电平转换后直接与计算机相连,以进行数据通讯。另外,也可根据需要连接到其它引脚或卡座触点,如果适当改进电路和程序,还可读写加密卡和 CPU 卡等。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 其他报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com