上期我们学习了PCF8591A/D&D/A转换芯片的相关内容,这么我们来介绍以下AT24C02

AT24C02

  • 简介
  • 命名格式
  • 引脚描述
  • 原理图
  • IIC通信原理
  • 读写地址
  • 存储地址
  • 基本控制方法
    • 单字节写入
    • 单字节读取
  • 测试案例
    • 要求
    • 代码实现
  • 总结

简介

AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,具有以下特点:
【1】:低电平和标准电平工作(2.7~5.5V)
【2】:内置256*8bit(共2k)存储空间
【3】:使用IIC接口通信,可进行双向数据传输
【4】:具有独立的数据写入保护引脚
【5】:内部存储格式为8字节一页,共32页,构成256字节空间
【6】:具有高稳定性,读写次数>1000000次,数据可保存100年不丢失
【7】:广泛应用于汽车、电子等行业

命名格式

AT24CX系列芯片,X表示芯片的存储空间,比如:AT24C02表示存储空间为2K(256byte),不同名称对应着不同的存储空间和分页方式 ,其具体对应关系如下:

名称 存储空间 分页方式
AT24C01 1k 8Byte为1页
AT24C02 2k 8Byte为1页
AT24C04 4k 16Byte为1页
AT24C08 8k 16Byte为1页
AT24C16 16k 16Byte为1页

引脚描述


蓝桥杯单片机使用的封装引脚如图,其中,不同引脚的功能如下表:

引脚 功能描述
A0~A2 地址引脚,原理图上直接接地
SDA IIC通信数据线
SCL IIC通信时钟线
WP 写保护引脚,为0时可读可写,为1时只读
NC 没用,啥也不接
GND 接地
VCC 接电源

原理图


需要注意的是:

  • A0~A2直接接地,在读写地址中都是0。
  • WP是直接接地,允许读取和写入数据。

IIC通信原理

关于IIC通信原理相关的内容,包括IIC的的驱动代码,我在蓝桥杯单片机学习11——PCF8591A/D&D/A转换芯片中已经详细的介绍,这里不做过多的赘述。

读写地址


前面我们在学习IIC通信原理的时候提到过,做开始通信之前,需要进行寻址,以此来确定进行通信的设备,每一个通信设备都有一个确定的通信地址,AT24CX芯片的地址如图:

需要注意的是:
【1】:读写地址的第八位控制数据的写入和读出,为1表示读出,为0表示写入
【2】:对于存储空间在2k(256Byte)以内的芯片类型,数据存储的地址可以用0~0xff(一个字节)表示,所以第五位到第七位是A2 ~ A0,但对于存储空间在2k(256Byte)以上的芯片类型,数据存储的地址无法用一个字节表示,所以需要在读写地址的第五位到第七位之间适当的加入P2 ~ P0 来表示数据读写地址所在的页数(Page),再通过发送数据读写地址在该页数的偏移量就可以准确的表示数据写入和读出的地址。

存储地址

对于存储空间在2k(256Byte)以内的芯片类型,数据存储的地址可以用0~0xff(0 ~ 255)表示,
对于存储空间在2k(256Byte)以上的芯片类型,数据存储的地址表示方法更为复位,由于蓝桥杯单片机上没有使用到相对应的型号,因此这也不做过多的赘述。

基本控制方法

AT24C02的基本控制方法是基于IIC通信原理实现的,其基本操作包括单字节写入/读出,以及多字节的写入/读出,我们重点介绍单字节写入/读出,相信掌握了单字节的写入/读出,多字节的内容也就触类旁通了。

单字节写入


具体流程如下:
【1】:开始通信
【2】:开始寻址/写入写地址
【3】:等待应答
【4】:写入数据存储地址
【5】:等待应答
【6】:写入数据
【7】:等待应答
【8】:结束通信

具体代码如下:


#define AT24C02_WriteByte    0xA0           //AT24C02写地址//AT24C02写字节函数,Addr为数据写入的地址,dat为需要写入的数据
void AT24C02_Write_Byte(unsigned char Addr,unsigned char dat)
{IIC_Start();                        //开始信号IIC_SendByte(AT24C02_WriteByte);    //开始寻址,选择为写数据IIC_WaitAck();                      //等待应答IIC_SendByte(Addr);                 //写入数据存放的地址IIC_WaitAck();                      //等待应答IIC_SendByte(dat);                  //发送数据IIC_WaitAck();                      //等待应答IIC_Stop();                         //结束通信}

单字节读取


具体流程如下:
【1】:开始通信
【2】:开始寻址/写入写地址
【3】:等待应答
【4】:写入数据存储地址
【5】:等待应答
【6】:开始通信,改变通信方向
【7】:开始寻址/写入读地址
【8】:等待应答
【9】:接收数据
【10】:不应答,接收通信。

具体代码如下:


#define AT24C02_ReadByte    0xA1            //AT24C02读地址//AT24C02读字节函数,返回值为读出的数据,Addr为数据读出的地址
unsigned char AT24C02_Read_Byte(unsigned char Addr)
{unsigned char dat = 0;          //定义变量,存放读出的数据IIC_Start();                    //开始通信IIC_SendByte(AT24C02_WriteByte);//开始寻址,选择为写数据IIC_WaitAck();                  //等待应答IIC_SendByte(Addr);             //写入数据读出的地址IIC_WaitAck();                  //等待应答IIC_Start();                    //开始下一次通信,因为IIC通信每改变一次数据传输方向,必需重新开始通信IIC_SendByte(AT24C02_ReadByte); //开始寻址,选择为读数据IIC_WaitAck();                  //等待应答dat = IIC_RecByte();            //读出数据IIC_SendAck(1);                 //发送不应答,(发1表示不应答)IIC_Stop();                     //结束通信return dat;                     //返回读出的数据
}

测试案例

要求

使用蓝桥杯官方提供的IIC官方驱动代码,实现单片机和AT24C02之间的通信,并且能够使用AT24C02的EEPROM存储功能,实现数据的存入和取出,其具体要求如下:

  • 使用AT02C02完成对全局变量dat的存入和取出,完成对dat 的断电保存
  • 通过数码管将dat显示出来dat的取值范围为0~255
  • 按下按键S4,dat的值增加,按下S5,dat的值减小。

代码实现

Main函数

#include "iic.h"
#include "LS138.h"#define AT24C02_WriteByte    0xA0           //AT24C02写地址
#define AT24C02_ReadByte    0xA1            //AT24C02读地址sbit Key1 = P3^3;                  //位定义部分
sbit Key2 = P3^2;unsigned char dat = 0;              //存放数码管显示的数字
unsigned int KEY1_Count = 0;        //key1计数变量
unsigned int KEY2_Count = 0;        //key2计数变量//AT24C02写字节函数,Addr为数据写入的地址,dat为需要写入的数据
void AT24C02_Write_Byte(unsigned char Addr,unsigned char dat)
{IIC_Start();                        //开始信号IIC_SendByte(AT24C02_WriteByte);    //开始寻址,选择为写数据IIC_WaitAck();                      //等待应答IIC_SendByte(Addr);                 //写入数据存放的地址IIC_WaitAck();                      //等待应答IIC_SendByte(dat);                  //发送数据IIC_WaitAck();                      //等待应答IIC_Stop();                         //结束通信}
//AT24C02读字节函数,返回值为读出的数据,Addr为数据读出的地址
unsigned char AT24C02_Read_Byte(unsigned char Addr)
{unsigned char dat = 0;          //定义变量,存放读出的数据IIC_Start();                    //开始通信IIC_SendByte(AT24C02_WriteByte);//开始寻址,选择为写数据IIC_WaitAck();                  //等待应答IIC_SendByte(Addr);             //写入数据读出的地址IIC_WaitAck();                  //等待应答IIC_Start();                    //开始下一次通信,因为IIC通信每改变一次数据传输方向,必需重新开始通信IIC_SendByte(AT24C02_ReadByte); //开始寻址,选择为读数据IIC_WaitAck();                  //等待应答dat = IIC_RecByte();            //读出数据IIC_SendAck(1);                 //发送不应答,(发1表示不应答)IIC_Stop();                     //结束通信return dat;                     //返回读出的数据
}
//数码管显示函数,分别显示dat的百位、十位、个位
void SEG_Show(unsigned char dat)
{SEG_Write(5,dat/100%10);SEG_Write(6,dat/10%10);SEG_Write(7,dat%10);
}void main()
{LS138_Init();       //初始化数码管dat = AT24C02_Read_Byte(0x00);      //读取dat的值,第一次下载程序,则dat默认值位0while(1){SEG_Show(dat);                  //通过数码管显示datif(Key1 == 0)                   //判断KEY1是否按下            {KEY1_Count++;if(KEY1_Count>=500)         //消抖    {dat++;                  //dat++AT24C02_Write_Byte(0x00,dat);   //写入dat的值}}                     if(Key2 == 0)                   //判断KEY1是否按下  {                               KEY2_Count++;               if(KEY2_Count>=500)         //消抖    {                           dat--;                  //dat++AT24C02_Write_Byte(0x00,dat);   //写入dat的值}}}
}
                                      程序中出现的所有函数,都已经在前面介绍过,在这里不做介绍

总结

由于AT24C02的操作流程和PCF8591大致相同,所有我在介绍的时候,也相对简洁,**重点是需要熟悉IIC通信的基本流程,再一个就是相关的读写地址,**就可以做到融会贯通,运用自如,
emmm,总结完毕。

蓝桥杯单片机学习12——AT24C02EEPROM存储芯片相关推荐

  1. 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示

    一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...

  2. 蓝桥杯单片机学习11——PCF8591A/DD/A转换芯片

    上期我们学习了DS1302实时时钟的基本使用,现在我们来学习PCF8591A/D&D/A转换芯片的相关内容 蓝桥杯单片机学习11--PCF8591A/D&D/A转换芯片 PCF8591 ...

  3. 蓝桥杯单片机学习日记3-矩阵键盘的使用,线反转法,三步消抖,按键长按与短按

    此片文章用于记录蓝桥杯单片机的学习 篮球杯单片机上的矩阵按键原理图如下: 使用矩阵键盘时,要将跳线帽J5跳至KBD模式. 值得注意的是,若开发板上的单片机使用的为STC15,那么以上原理图适用.如果单 ...

  4. 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F

    一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...

  5. 蓝桥杯单片机学习13——NE555方波发生器频率测量

    NE555 简介 引脚图 原理图 真值表 工作原理 频率测量原理 定时器测量频率方法 代码实现 总结(一堆废话) 简介 NE555是一种高度稳定的控制器,内部用三个阻值为5KΩ的电阻分压,因此叫做55 ...

  6. 蓝桥杯单片机学习日记1-LED 蜂鸣器 继电器 数码管的简单驱动

    此片文章用于记录蓝桥杯单片机的学习. LED 蜂鸣器 继电器 数码管 这些都是比赛时常用的外设,如下原理图:  LED部分:  蜂鸣器和继电器部分(图中还有步进电机部分):  数码管部分: 可见,上述 ...

  7. 蓝桥杯单片机学习必备资源

    目录 一.你不知道蓝桥杯单片机底层驱动改了?? 二.小蜜蜂教程--自撸代码 三.个人心得 1.NE555 2.DS1302 3.DS18B20 4.AT24C02 5.PCF8951 6.串口指令读取 ...

  8. 【蓝桥杯-单片机学习笔记(十七)】24C02原理及其读写操作

    一.24C02 24C02是一个2K Bit的串行EEPROM存储器,内部含有256个字节.在24C02里面有一个8字节的页写缓冲器.24C02支持I2C总线协议.I2C是一种双向.两线串行通信接口, ...

  9. 串口中断和定时器中断_启士 | 蓝桥杯单片机教程12 中断与定时器 (上)

    这是 北航士谔书院 的第 949 篇推送 本文介绍中断(interrupt)的基本概念,并演示定时器中断.外部中断的使用方法.如果同学们对文章内容有疑问,或发现文中有任何不妥之处,请点击"阅 ...

最新文章

  1. makefile讲义(1)——makefile基础(概述)
  2. php twig扩展,如何写一个自定义的 Twig 扩展
  3. Render errors:One or more layouts are missing the layout_width or layout_height attributes
  4. java虚拟机相同吗_Java虚拟机是否真的是与VMWare或Parallels文件相同的虚拟机?
  5. 数列收敛,极限值唯一
  6. sql 插入日期格式
  7. 二维码生成器如何制作圆形二维码
  8. speedoffice如何根据身份证号码提取出性别
  9. 槑!Vitas翻唱青藏高原
  10. Python 文件操作
  11. Android设置iptable实现外网访问
  12. H - Streets of Working Lanterns Gym - 101149H -括号匹配-栈模拟
  13. 硬件电子开发常用工具
  14. 互联网日报 | 滴滴出租车上线“作弊举报”功能;蚂蚁集团进入上市辅导期;百度App日活达2.04亿...
  15. Vertica:C-Store 七年之痒
  16. 自制内存盘还有其用途
  17. uoj#751-[UNR #6]神隐【交互】
  18. 汉仪尚巍手书_汉仪尚巍手书
  19. 计算机组成原理cu_计算机组成原理复习笔记——基础概念(一)
  20. java——ZZULIOJ_1059: 最高分

热门文章

  1. 基于SSH医院在线挂号系统毕业设计(源代码+论文)
  2. kettle教程---kettle作业调度,根据更新时间增量更新
  3. 【财务危机】--2018.8债务
  4. JAVA bouncycastle实现SM2算法(国密2)
  5. 《张爱玲传:失望是一种幸福》——李燕【中】读后感
  6. MAC报文格式的简单整理
  7. 【笔记】DSP程序烧写问题
  8. canvas黑客帝国数字雨背景 html+css+js
  9. Postman 设置为中文版本
  10. MOS管 GS端并联电阻和二极管