51基于单片机的电子闹钟设计EEPROM电子钟掉电保存怎么做

用51单片机内部EEPROM实现掉电保存数据不需要外部电路,如24C02等芯片更加方便。

所需积分/C币:7 上传时间: 资源大小:21KB
不知道你什么数据类型,需要多大存储空间,89系列太老了用新的吧.

一粒金砂(初级), 积分 4, 距离下一级还需 1 积分

一粒金砂(初级), 积分 4, 距离下一级还需 1 积分


一粒金砂(高级), 积汾 400, 距离下一级还需 100 积分

一粒金砂(高级), 积分 400, 距离下一级还需 100 积分

16k你在开玩笑么?89C52总共也没16K的空间 你怎么存

五彩晶圆(初级), 积分 2841, 距離下一级还需 659 积分

五彩晶圆(初级), 积分 2841, 距离下一级还需 659 积分

5楼版主都说了,每次写入都要重新设置新地址如果地址没有变,第二次写叺肯定会把第一次的数据给覆盖掉

一粒金砂(中级), 积分 34, 距离下一级还需 166 积分

一粒金砂(中级), 积分 34, 距离下一级还需 166 积分

赞成楼上的说法设定一个地址变量,每次写完数据后地址自增就解决了

不确定一定行你试试吧,大概是这个意思


宗旨:技术的学习是有限的分享的精神是无限的。

        24C02:256 个字节的 EEPROM一般情况下,EEPROM 拥有 30 万到 100 万次的寿命基于 I2C 通信协议的器件。I2C 是一个通信协议它拥有严密的通信时序逻輯要求,而EEPROM 是一个器件只是这个器件采样了 I2C 协议的接口与单片机相连而已,二者并没有必然的联系EEPROM 可以用其它接口, I2C 也可以用在其它佷多器件上

第一步,首先是 I2C 的起始信号接着跟上首字节,也就是我们前边讲的 I2C 的器件地
址并且在读写方向上选择“写”操作。

第二步发送数据的存储地址。24C02一共 256 个字节的存储空间地址从 0x00~0xFF,我们想把数据存储在哪个位置此刻写的就是哪个地址。
第三步发送要存储的数据第一个字节、第二个字节??注意在写数据的过程中,
EEPROM 每个字节都会回应一个“应答位 0”来告诉我们写 EEPROM 数据成功,如果没有囙应答位说明写入不成功。

在写数据的过程中每成功写入一个字节,EEPROM 存储空间的地址就会自动加 1当加到 0xFF 后,再写一个字节地址会溢出又变成了 0x00。

第一步首先是 I2C 的起始信号,接着跟上首字节也就是我们前边讲的 I2C 的器件地址,并且在读写方向上选择“写”操作这個地方可能有同学会诧异,我们明明是读数据为何方向也要选“写”呢刚才说过了,24C02 一共有 256 个地址我们选择写操作,是为了把所要读嘚数据的存储地址先写进去告诉 EEPROM 我们要读取哪个地址的数据。这就如同我们打电话先拨总机号码(EEPROM 器件地址),而后还要继续拨分机號码(数据地址)而拨分机号码这个动作,主机仍然是发送方方向依然是“写”。

第二步发送要读取的数据的地址,注意是地址而非存在EEPROM 中的数据通知EEPROM 我要哪个分机的信息。
第三步重新发送 I2C 起始信号和器件地址,并且在方向位选择“读”操作
这三步当中,每一個字节实际上都是在“写”所以每一个字节EEPROM 都会回应一个“应答位 0”。

第四步读取从器件发回的数据,读一个字节如果还想继续读丅一个字节,就发送一个“应答位ACK(0)”如果不想读了,告诉 EEPROM我不想要数据了,别再发数据了那就发送一个“非应答位NAK(1)”。

和写操作规則一样我们每读一个字节,地址会自动加 1那如果我们想继续往下读,给EEPROM 一个 ACK(0)低电平那再继续给 SCL 完整的时序,EEPROM 会继续往外送数据如果我们不想读了,要告诉 EEPROM 不要数据了那我们直接给一个NAK(1)高电平即可。这个地方大家要从逻辑上理解透彻不能简单的靠死记硬背了,一萣要理解明白梳理一下几个要点: A、在本例中单片机是主机,24C02 是从机; B、无论是读是写 SCL 始终都是由主机控制的; C、写的时候应答信号甴从机给出,表示从机是否正确接收了数据; D、读的时候应答信号则由主机给出表示是否继续读下去。

do //用寻址操作查询当前是否可进行讀写操作 //等待上次写入操作完成 do //用寻址操作查询当前是否可进行读写操作 //按页写模式连续写入字节 //所以检测低3位是否为零即可 break; //到达页边界時跳出循环,结束本次写操作

我要回帖

更多关于 基于单片机的电子闹钟设计 的文章

 

随机推荐