对 E2PROM存储器AT24C02 的学习

一、概念和原理

        你看,考到了咱们才要学,别嫌多。

        这个小蜜蜂视频教程好像没讲,我们回归老朋友江科大的视频去看,也是可以的。

然后下面的都是写时序要用到的概念,大家可以作了解,但是大赛会给出写好的底层驱动函数。

说明:1. E2PROM意为电可擦除可编程的只读存储器,掉电不丢失;

        下面是芯片的原理图。

说明:1.写保护要给低电平解开,不然没法用;

2.SCL和SDA则用来组成我们最基础的时序;

        下面这个地址总线和数据总线的概念可以了解一下,意思就是左边地址总线第一根给高电平,竖线只连接前三个点,数据总线就会输出11100000。(右边不管)

        以上都是用以写那个I2C总线的数据帧要用到的,而这些数据帧是组成我们下面AT24C02数据帧的基石。(下面这张图就是上面I2C数据帧的稍作修改)

        下面就是比赛会提供的有关AT24C02芯片的资料,大家可以对照着上面那张图片来看就会轻松点。

二、题目

三、手写代码

一、基础

        包括main函数框架,Delay函数文件,uart串口通信文件(记得重定义putchar函数和AUXR的定义),close文件(关闭蜂鸣器和继电器)

二、今天的主角

        依据上面的AT24C02的数据帧结构来写读写函数。主要由俩部分组成,第一部分是复制粘贴大赛给的底层驱动函数。

        第二部分是要自己写的,其中注释是作者要讲解的内容。.h文件里面的引脚定义是可能会挖坑的点,可能会要你自己定义。intrins文件则是.c文件里面的_nop_函数要用到的。

上图地址A1和A0的依据

高四位固定是A,最后一位W(0)R(1)

上图依据

三、调用

四、结尾

实验现象:1.到60后秒清0,分钟加1;2.下载按钮关闭,表示掉电,在摁开,计时继续,也就是将上一秒的数据成功写入和读取。

        但是烦人的是不是我们数组里面的初始值开始计时,我们可以想个办法先将初始值覆盖原本在芯片里面的数据。

        实验现象就是一直是我们的初值。

至此,我们有关EEPROM和AT24C02就有所掌握了。然后1.28广东天气真的冷兄弟们,不要放弃默写一遍实现实验现象的代码!

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AT89C51是一种经典的单片机,它使用串行EEPROM存储器来存储代码。串行EEPROM是一种非易失性存储器,可以长期保存数据,即使断电也不会丢失。下面是一个简单的代码示例,演示了如何使用AT89C51中的串行EEPROM存储器。 首先,我们需要包含AT89C51的寄存器定义文件和函数库,以便使用其中的函数和寄存器。 #include <reg51.h> // 包含AT89C51寄存器定义文件 然后,我们需要定义一些常量和变量,以便在代码中使用。 #define EEPROM_CS P0_0 // 定义串行EEPROM片选引脚为P0.0 #define EEPROM_CLK P0_1 // 定义串行EEPROM时钟引脚为P0.1 #define EEPROM_DIN P0_2 // 定义串行EEPROM数据输入引脚为P0.2 #define EEPROM_DOUT P0_3 // 定义串行EEPROM数据输出引脚为P0.3 unsigned char eeprom_data = 0x55; // 定义要写入EEPROM的数据为0x55 接下来,我们需要初始化串行EEPROM。这可以通过将片选引脚设置为低电平、时钟引脚设置为高电平、数据输入和输出引脚设置为输入模式来实现。 void eeprom_init() { EEPROM_CS = 0; // 将片选引脚设为低电平 EEPROM_CLK = 1; // 将时钟引脚设为高电平 EEPROM_DIN = 1; // 将数据输入引脚设为输入模式 EEPROM_DOUT = 1; // 将数据输出引脚设为输入模式 } 然后,我们可以编写一个函数来向串行EEPROM中写入数据。 void eeprom_write(unsigned char addr, unsigned char data) { unsigned char i; EEPROM_CS = 0; // 使能串行EEPROM for(i = 0; i < 8; i++) { EEPROM_CLK = 0; // 将时钟引脚设为低电平 EEPROM_DIN = (addr & 0x80) >> 7; // 将地址的最高位写入数据输入引脚 addr <<= 1; // 将地址左移一位 EEPROM_CLK = 1; // 将时钟引脚设为高电平 } for(i = 0; i < 8; i++) { EEPROM_CLK = 0; // 将时钟引脚设为低电平 EEPROM_DIN = (data & 0x80) >> 7; // 将数据的最高位写入数据输入引脚 data <<= 1; // 将数据左移一位 EEPROM_CLK = 1; // 将时钟引脚设为高电平 } EEPROM_CS = 1; // 禁用串行EEPROM } 最后,我们可以在主函数中调用这些函数,将数据写入串行EEPROM。在调用写入函数之前,需要先调用初始化函数。 void main() { eeprom_init(); // 初始化串行EEPROM eeprom_write(0x00, eeprom_data); // 将数据写入串行EEPROM的地址0x00 while(1) // 无限循环 { // 其他代码 } } 以上就是使用串行EEPROM存储器AT89C51代码的一个简单示例。通过这个示例可以了解如何初始化和写入数据到串行EEPROM。实际应用中,可以根据需要编写更复杂的代码来读取和修改串行EEPROM中的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值