AT24C02

2024-05-01 22:20
文章标签 at24c02

本文主要是介绍AT24C02,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AT24C02介绍

AT24C01/02/04/08/16…是一个 1K/2K/4K/8K/16K 位串行 CMOS,内部含有128/256/512/1024/2048 个 8 位字节,AT24C01 有一个 8 字节页写缓冲器,AT24C02/04/08/16 有一个 16 字节页写缓冲器。该器件通过 I2C 总线接口进行操作,它有一个专门的写保护功能。51开发板上使用的是 AT24C02(EEPROM)芯片,此芯片具有 I2C 通信接口,芯片内保存的数据在掉电情况下都不丢失,所以通常用于存放一些比较重要的数据等。AT24C02 芯片管脚及外观图如下图所示:
在这里插入图片描述

芯片管脚使用说明

引脚号引脚名称功能说明
1A0 地址输入。A2、A1和A0是器件地址输入引脚。
24C02/32/64使用A2、A1和A0输入引脚作为硬件地址,总线上可同时级联8个24C02/32/64器件。
24C08使用A2输入引脚作为硬件地址,总线上可同时级联2个24C08器件,AO和A1为空脚,可接地。
24C04使用A2和A1输入引脚作为硬件地址,总线上可同时级联4个24C04器件,A0为空脚,可接地。
24C16未使用器件地址引脚,总线上最多只可连接一个16K器件,A2、A1和A0为空脚,可接地。
2A1
3A2
5SDA串行地址和数据输入/输出。SDA是双向串行数据传输引脚,极开路,需外接上拉电阻到Vcc(典型值10kQ)。
6SCl串行时钟输入。SCL同步数据传输,上升沿数据写入,下降沿数据读出。
7WP写保护。WP引脚提供硬件数据保护。当WP接地时,允许数据正常读写操作:当WVP接Vcc时,写保护,只读。
4GND
9VCC正电源

AT24C02 器件地址为 7 位,高 4 位固定为 1010,低 3 位由 A0/A1/A2 信号线的电平决定。 因为传输地址或数据是以字节为单位传送的,当传送地址时,器件地址占 7 位,还有最后一位(最低位 R/W)用来选择读写方向,它与地址无关。其格式如下
在这里插入图片描述
51开发板已经将芯片的 A0/A1/A2 连接到 GND,所以器件地址为1010000,即 0x50(未计算最低位)。如果要对芯片进行写操作时,R/W 即为 0,写器件地址即为 0XA0;如果要对芯片进行读操作时,R/W 即为 1,此时读器件地址为 0XA1。开发板上也将 WP 引脚直接接在 GND 上,此时芯片允许数据正常读写。
在这里插入图片描述
芯片的 SCL 和 SDA 管脚是连接在单片机的 P2.1 和 P2.0 上,为了让 IIC 总线默认为高电平,通常会在 IIC总线上接上拉电阻,在图中并没有看到 SCL 和 SDA 管脚有上拉电阻,这是因为51开发板单片机 IO 都外接了 10K 上拉电阻,当单片机 IO 口连接到芯片的 SCL 和 SDA脚时即相当于它们外接上拉电阻,所以此处可以省去。

实验

下面是使用IIC控制AT24C02代码,按键P3_1、P3_0、P3_2、P3_3来控制输入的内容。
当案件P3_2按下值会自增1,当案件P3_3按下值会归零。P3_1按下会将数据写到AT24C02中,当P3_0按下会读出AT24C02的值。public是一个延时函数,这个不再展示

main.c

#include <REGX52.H>
#include "public.h"
#include "at24c02.h"
#include "key.h"
#include "smg.h"void main()
{u8 key=0;u8 val=0;u8 dis[3];while(1){key=key_scan(0);if(key==KEY1_PRESS) at24c02_write_byte(0,val);else if(key==KEY2_PRESS) val=at24c02_read_byte(0);else if(key==KEY3_PRESS) val++;else if(key==KEY4_PRESS) val=0;dis[0]=val/100;dis[1]=val%100/10;dis[2]=val%100%10;smg_display(dis,6);}
}

IIC.c

#include "IIC.h"void IIC_Start()
{IIC_SDA=1;delay_10us(1);IIC_SCL=1;delay_10us(1);IIC_SDA=0;delay_10us(1);IIC_SCL=0;delay_10us(1);
}void IIC_Stop()
{IIC_SDA=0;delay_10us(1);IIC_SCL=1;delay_10us(1);IIC_SDA=1;delay_10us(1);
}void IIC_Ack()
{IIC_SCL=0;IIC_SDA=0;delay_10us(1);IIC_SCL=1;delay_10us(1);IIC_SCL=0;
}void IIC_Nack()
{IIC_SCL=0;IIC_SDA=1;delay_10us(1);IIC_SCL=1;delay_10us(1);IIC_SCL=0;
}
u8 IIC_Wait_Ack()
{u8 time=100;IIC_SCL=1;delay_10us(1);while(IIC_SDA){time--;if(time==1){IIC_Stop();return 1;}}  IIC_SCL=0;return 0;
}void IIC_Write_Byte(u8 dat)
{u8 i=0;IIC_SCL=0;for(i=0;i<8;i++){if((dat & 0x80)>0) IIC_SDA=1;else IIC_SDA=0;dat<<=1;delay_10us(1);IIC_SCL=1;delay_10us(1);IIC_SCL=0;delay_10us(1);}
}u8 IIC_Read_Byte(u8 ack)
{u8 i=0,dat=0;for(i=0;i<8;i++){IIC_SCL=0;delay_10us(1);IIC_SCL=1;dat<<=1;if(IIC_SDA) dat++;delay_10us(1);}if(!ack) IIC_Nack();else IIC_Ack();return dat;
}

IIC.h

#ifndef __IIC_H_
#define __IIC_H_#include "public.h"sbit IIC_SDA=P2^0;
sbit IIC_SCL=P2^1;void IIC_Start();
void IIC_Stop();
void IIC_Ack();
void IIC_Nack();
u8 IIC_Wait_Ack();
void IIC_Write_Byte(u8 dat);
u8 IIC_Read_Byte(u8 ack);#endif

at24c02.c

#include "at24c02.h"
#include "IIC.h"void at24c02_write_byte(u8 addr ,u8 dat)
{IIC_Start();IIC_Write_Byte(0xA0);IIC_Wait_Ack();IIC_Write_Byte(addr);IIC_Wait_Ack();IIC_Write_Byte(dat);IIC_Wait_Ack();IIC_Stop();delay_ms(10);
}u8 at24c02_read_byte(u8 addr)
{u8 res=0;IIC_Start();IIC_Write_Byte(0xA0);IIC_Wait_Ack();IIC_Write_Byte(addr);IIC_Wait_Ack();IIC_Start();IIC_Write_Byte(0xA1);IIC_Wait_Ack();res=IIC_Read_Byte(0);IIC_Stop();return res;
}

at24c02.h

#ifndef __AT24C02_H_
#define __AT24C02_H_#include "public.h"void at24c02_write_byte(u8 addr ,u8 dat);
u8 at24c02_read_byte(u8 addr);#endif

smg.c

#include "smg.h"u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void smg_display(u8 dat[],u8 pos)
{u8 i=0;u8 pos_temp=pos-1;for(i=pos_temp;i<8;i++){switch(i){case 0: LSC=1;LSB=1;LSA=1;break;case 1: LSC=1;LSB=1;LSA=0;break;case 2: LSC=1;LSB=0;LSA=1;break;case 3: LSC=1;LSB=0;LSA=0;break;case 4: LSC=0;LSB=1;LSA=1;break;case 5: LSC=0;LSB=1;LSA=0;break;case 6: LSC=0;LSB=0;LSA=1;break;case 7: LSC=0;LSB=0;LSA=0;break;}SMG_A_DP_PORT=gsmg_code[dat[i-pos_temp]];delay_10us(100);SMG_A_DP_PORT=0x00;//ÏûÒô}
}

smg.h

#ifndef _smg_H
#define _smg_H#include <REGX52.H>
#include "public.h"#define SMG_A_DP_PORT	P0	sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;void smg_display(u8 dat[],u8 pos);#endif

key.c

#include "key.h"u8 key_scan(u8 mode)
{static u8 key=1;if(mode)key=1;if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0)){delay_10us(1000);key=0;if(KEY1==0)return KEY1_PRESS;else if(KEY2==0)return KEY2_PRESS;else if(KEY3==0)return KEY3_PRESS;else if(KEY4==0)return KEY4_PRESS;	}else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1){key=1;			}return KEY_UNPRESS;		
}

key.h

#ifndef _key_H
#define _key_H#include "public.h"sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;#define KEY1_PRESS	1
#define KEY2_PRESS	2
#define KEY3_PRESS	3
#define KEY4_PRESS	4
#define KEY_UNPRESS	0u8 key_scan(u8 mode);#endif

这篇关于AT24C02的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952809

相关文章

基于 rt-thread的I2C操作EEPROM(AT24C02)

一、AT24C02 The AT24C01A/02/04/08A/16A provides 1024/2048/4096/8192/16384 bits of serial electrically erasable and programmable read-only memory (EEPROM) organized as 128/256/512/1024/2048 words of 8 b

51单片机-第九节-AT24C02存储器(I2C总线)

一、AT24C02存储器介绍: AT24C02是存储器,且掉电不丢失,可存储单片机要永久保存的数据。 通讯接口:I2C总线。 容量:256字节。 二、存储器简化模型: 引脚及应用电路: 三、I2C总线: 1.介绍: (1)I2C总线 (Inter IC BUS)是由Philips公司开发的一种通用数据总线 (2)两根通信线:SCL(Serial Clock)、SDA(Se

三、IIC总线协议——2、AT24C02

一、AT24C02介绍         EEPROM是一种掉电后数据不丢失的储存器,常用来存储一些配置信息,在系统重新上电时就可以加载。         AT24C02是一个2K bit的EEPROM存储器,使用IIC通信方式。         A0/1/2 : 设备地址决定引脚。、         WP : 写保护引脚。         SCL : 时钟线。         SDA

单片机存储芯片 W25QXX、AT24C02

一、FLASH W25QXX (1) W25QXX芯片简介         W25Q128是华邦公司推出的一款SPI接口的NOR Flash芯片,其存储空间为128Mbit,相当于16M字节。W25Q128V芯片是串行闪存,可以通过标准/两线/四线SPI控制。W25Q128一次最多可编程256个字节。页面可以按扇区擦除、块擦除、整个芯片擦除。         W25Q128 的擦写周期多达

(51单片机)第八章-I2C总线AT24C02芯片应用

8.1 I2C总线概述 1. I2C总线介绍         I2C总线(Inter IC Bus)由PHILIPS 公司推出,是近年来微电子通信控制领域广泛采用的一种新型总线标准,它是同步通信的一种特殊形式,具有接口线少、控制简单、器件封装形式小、通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,所有与I2C兼容的器件都具有标准的接口,通过地址来识别通信对象,使

51单片机入门_江协科技_27~28_OB记录的自学笔记_AT24C02数据存储秒表

27. AT24C02(I2C总线) 27.1. 存储器介绍 27.2. 存储器简化模型介绍,存储原理 27.3. AT24C02介绍 •AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息 •存储介质:E2PROM •通讯接口:I2C总线 •容量:256字节 27.4. AT24C02引脚及应用电路,VCC接电源,A0~A2和GND接

019——IIC模块驱动开发(基于EEPROM【AT24C02】和I.MX6uLL)

目录 一、 IIC基础知识 二、Linux中的IIC(韦东山老师的学习笔记) 1. I2C驱动程序的层次 2. I2C总线-设备-驱动模型 2.1 i2c_driver 2.2 i2c_client 三、 AT24C02 介绍 四、 AT24C02驱动开发 实验  驱动程序 应用程序 一、 IIC基础知识 总线类设备驱动——IIC_iic设备驱动-CSDN

【51单片机入门记录】IIC总线协议 EEPROM存储器AT24C02概述

一、IIC总线协议概述 (1)IIC(Inter-IntegratedCircuit)总线 是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器以及其外围设备。IIC也被成为I2C/I²C,其实两者是完全相同的,只是名词不一样而已它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据 (2)IIC总线的物理层和协议层 物理层规定通讯系统中具有机械、电子功能部分的特性,

常用芯片学习——AT24C02

AT24C02 (I2C兼容2线串行EEPROM) 芯片介绍 AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节,采用先进CMOS技术实质上减少了器件的功耗。AT24C02有一个8字节页写缓冲器,该器件通过IIC总线接口进行操作,有一个专门的写保护功能。 芯片特性 低电压操作VCC = 1.7V - 5.5V俩种型号01C存储容量1Kbit 02C存储容量2K

蓝桥杯模块综合——高质量讲解AT24C02,BS18B20,BS1302,AD/DA(PCF8591),超声波模块

AT24C02——就是一个存储的东西,可以给他写东西,掉电不丢失。 void EEPROM_Write(unsigned char * EEPROM_String,unsigned char addr , unsigned char num){IIC_Start();IIC_SendByte(0xA0);IIC_WaitAck();IIC_SendByte(addr);IIC_WaitAck(