0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何进行AT24C02存储芯片的串行E2PROM读写

Wildesbeast 来源:网络整理 作者:佚名 2020-05-05 16:03 次阅读

24C02中带有片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。

;这是将0600H地址中以下的8个数据写到24C02的01H为首址单元中去的汇编程序

ORG 0000H

SCL BIT P3.4;定义24C02的串行时钟线

SDA BIT P3.5;定义24C02的串行数据线

LJMP START

START:LCALL STAR;调用

MOV R2,#08H;一个数据有8位

MOV DPTR,#0600H;定义源数据的位置

LOOP:MOV A,#00H

MOVC A,@A+DPTR

LCALL SDATA

LCALL ACK

JC LOOP

INC DPTR

DJNZ R2,LOOP

LCALL STOP;调用停止子程序

STAR:SETB SDA

SETB SCL

NOP

NOP

NOP

NOP

CLR SDA

NOP

NOP

NOP

NOP

CLR SCL

RET

SDATA:MOV R0,#08H

LOOP0:RLC A

MOV SDA,C

NOP

NOP

SETB SCL

NOP

NOP

NOP

NOP

CLR SCL

DJNZ R0,LOOP0

RET

ACK:SETB SDA

NOP

NOP

SETB SCL

NOP

NOP

NOP

NOP

MOV C,SDA

CLR SCL

RET

STOP:CLR SDA

NOP

NOP

NOP

NOP

SETB SCL

NOP

NOP

NOP

NOP

SETB SDA

NOP

NOP

NOP

NOP

RET

ORG 0600H

DB 0A0H,10H,01H,02H,03H,04H,05H,06H

END

读写子程序如下:

;写串行E2PROM子程序EEPW

; R3=10100000(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000)

; (R4)=片内字节地址

; (R1)=欲写数据存放地址指针

; (R7)=连续写字节数n

EEPW: MOVP1,#0FFH

CLRP1.0;发开始信号

MOVA,R3;送器件地址

ACALL SUBS

MOVA,R4;送片内字节地址

ACALLSUBS

AGAIN: MOVA,@R1

ACALL SUBS;调发送单字节子程序INC R1

DJNZR7,AGAIN;连续写n个字节

CLR P1.0;SDA置0, 准备送停止信号

ACALLDELAY ;延时以满足传输速率要求

SETB P1.1 ;发停止信号

ACALLDELAY

SETB P1.0

RET

SUBS: MOVR0,#08H ;发送单字节子程序

LOOP: CLRP1.1

RLCA

MOVP1.0,C

NOP

SETBP1.1

ACALL DELAY

DJNZR0,LOOP ;循环8次送8个bit

CLRP1.1

ACALL DELAY

SETBP1.1

REP: MOVC,P1.0

JCREP;判应答到否,未到则等待

CLR P1.1

RET

DELAY: NOP

NOP

RET

;读串行E2PROM子程序EEPR

;(R1)=欲读数据存放地址指针

;; R3=10100001(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000)

;(R4)=片内字节地址

;(R7)=连续读字节数

EEPR: MOVP1,#0FFH

CLRP1.0;发开始信号

MOVA,R3;送器件地址

ACALL SUBS ;调发送单字节子程序

MOVA,R4;送片内字节地址

ACALL SUBS

MOVP1,#0FFH

CLRP1.0;再发开始信号

MOVA,R3

SETBACC.0;发读命令

ACALL SUBS

MORE: ACALL SUBR

MOV@R1,A

INCR1

DJNZ R7,MORE

CLRP1.0

ACALL DELAY

SETB P1.1

ACALL DELAY

SETBP1.0 ;送停止信号

RET

SUBR: MOV R0,#08H ;接受单字节子程序

LOOP2: SETB P1.1

ACALL DELAY

MOVC,P1.0

RLCA

CLRP1.1

ACALL DELAY

DJNZ R0,LOOP2

CJNE R7,#01H,LOW

SETB P1.0;若是最后一个字节置A=1

AJMP SETOK

LOW: CLRP1.0;否则置A=0

SETOK: ACALL DELAY

SETB P1.1

ACALL DELAY

CLRP1.1

ACALL DELAY

SETBP1.0;应答毕,SDA置1

RET

程序中多处调用了DELAY子程序(仅两条NOP指令),这是为了满足I2C总线上数据传送速率的要求,只有当SDA数据线上的数据稳定下来之后才能进行读写(即SCL线发出正脉冲)。另外,在读最后一数据字节时,置应答信号为“1”,表示读操作即将完成。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储芯片
    +关注

    关注

    11

    文章

    794

    浏览量

    42425
  • AT24C02
    +关注

    关注

    0

    文章

    79

    浏览量

    24097
  • E2PROM
    +关注

    关注

    0

    文章

    29

    浏览量

    18395
收藏 人收藏

    评论

    相关推荐

    什么是存储芯片?有什么作用呢?

    存储芯片是一种用于存储数据的集成电路芯片,也被称为存储芯片
    的头像 发表于 02-29 09:09 883次阅读

    什么是SD NAND存储芯片?

    前言   大家好,我们一般在STM32项目开发中或者在其他嵌入式开发中,经常会用到存储芯片存储数据。今天我和大家来介绍一款存储芯片,我这里采用(雷龙) CS创世 SD NAND 。   SD
    发表于 01-05 17:54

    单片机IIC总线及AT24C02的应用

    电子发烧友网站提供《单片机IIC总线及AT24C02的应用.doc》资料免费下载
    发表于 11-16 09:24 2次下载
    单片机IIC总线及<b class='flag-5'>AT24C02</b>的应用

    STM32基础知识:IIC总线操作EEPROM存储模块AT24C02

    本文是IIC总线的实际应用,将带领读者一步一步阅读AT24C02数据手册,看时序图了解如何使用IIC接口EEPROM存储模块AT24C02,并编写代码使用STM32驱动这个模块。
    的头像 发表于 10-26 14:25 1023次阅读
    STM32基础知识:IIC总线操作EEPROM<b class='flag-5'>存储</b>模块<b class='flag-5'>AT24C02</b>

    STM32速成笔记(11)—EEPROM(AT24C02)

    AT24C01/02/04/08/16...是一个1K/2K/4K/8K/16K位电可擦除PROM,内部含有128/256/512/1024/2048个8位字节,AT24C01有一个8
    的头像 发表于 10-24 15:12 733次阅读
    STM32速成笔记(11)—EEPROM(<b class='flag-5'>AT24C02</b>)

    STM32软件模拟IIC通信AT24C02,能读不能写?

    我在使用STM32软件模拟IIC通信,读写AT24C02的时候,出现了能读不能写的情况,一番纠结无果后,直接用上了正点原子的例程,仍然是能读不能写,我怀疑板子出问题了,但是换了一块板子也是同样的情况
    发表于 10-09 19:34

    怎么用AT24C02存一个大于256的数?

    是设计一个红外计数器的,就差这个计数器计数的保存 存到AT24C02里面好像就最多就255,一到256就清零了
    发表于 09-27 06:22

    AT24C04芯片驱动程序原理

    1.芯片简介 24c02是一种串行电可擦除只读存储器(以下数据均以AT24C02为例),即eeprom
    的头像 发表于 09-11 11:36 1238次阅读
    AT<b class='flag-5'>24</b>C04<b class='flag-5'>芯片</b>驱动程序原理

    STM32 IIC读写AT24C02(三)

    现在我们已经实现了AT24C02的单字节读写,但是对于对于2K内存来说,如果对全部数据的读取或者写入都只用单字节读写来完成,这样就会很不方便。
    发表于 07-22 10:33 539次阅读
    STM32 IIC<b class='flag-5'>读写</b><b class='flag-5'>AT24C02</b>(三)

    STM32 IIC读写AT24C02(二)

    上次已经完成了IIC读写AT24C02的协议层,现在开始编写读写AT24C02的驱动函数。先从单字节的读写开始。
    发表于 07-22 10:31 755次阅读
    STM32 IIC<b class='flag-5'>读写</b><b class='flag-5'>AT24C02</b>(二)

    STM32 IIC读写AT24C02(一)

    要用IIC读写AT24C02,首先要了解IIC是什么。
    发表于 07-22 10:28 572次阅读
    STM32 IIC<b class='flag-5'>读写</b><b class='flag-5'>AT24C02</b>(一)

    24C02驱动【掉电保存】

    24C02是一个2Kbit的串行EEPROM存储芯片,可存储256个字节数据。工作电压范围为1.8V到6.0V,具有低功耗CMOS技术,自定时擦写周期,1000000次编程/擦除周期,
    的头像 发表于 07-17 09:24 987次阅读
    <b class='flag-5'>24C02</b>驱动【掉电保存】

    存储芯片是什么 存储芯片的分类及发展历史

    存储芯片是半导体行业中非常重要的一类产品,我们日常所有的电子设备基本都会用到存储器。据WSTS预测,2023年全球存储芯片市场规模将达到1675亿美元,占比约30%;其中中国存储器市场
    发表于 07-07 10:27 8372次阅读
    <b class='flag-5'>存储芯片</b>是什么 <b class='flag-5'>存储芯片</b>的分类及发展历史

    存储芯片的原理_分类及应用

    存储芯片是指集成电路中用来存储数据的芯片,它可以存储数字信号,包括二进制码、字符、图像、声音等信息。存储芯片广泛应用于电子产品中,如计算机、
    的头像 发表于 06-02 09:24 9073次阅读

    几种flash存储芯片的用途和分类

    IIC EEPROM------容量小,采用的是IIC通信协议;用于在掉电时,存系统配置参数,比如屏幕亮度等。常用芯片型号有 AT24C02、FM24C02、CAT24C02等,其常见
    的头像 发表于 05-15 08:38 2012次阅读