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

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

3天内不再提示

24C02驱动【掉电保存】

Harmony&嵌入式学习 来源:Harmony&嵌入式学习 作者:Harmony&嵌入式学 2023-07-17 09:24 次阅读

24c02简介
24C02是一个2Kbit的串行EEPROM存储芯片,可存储256个字节数据。工作电压范围为1.8V到6.0V,具有低功耗CMOS技术,自定时擦写周期,1000000次编程/擦除周期,可保存数据100年。24C02有一个16字节的页写缓冲器和一个写保护功能。通过I2C总线通讯读写芯片数据,通讯时钟频率可达400KHz。

wKgaomSzucKACHK-AAAZ9b8Y64g440.png

51型号驱动程序


sbit I2C_SCL =      P1^2;  			//控制24c02的SCL引脚

sbit I2C_SDA =      P1^1;  			//控制24c02的SDA引脚

void I2C_Delay10us()//IIC协议所需:延迟10us函数
{
	uchar a, b;
	for(b=1; b>0; b--)
	{
		for(a=2; a>0; a--);
	}
}

void I2C_Start()  //开始启动IIC,IIC协议头
{
	I2C_SDA = 1;
	I2C_Delay10us();
	I2C_SCL = 1;
	I2C_Delay10us();//建立时间是I2C_SDA保持时间>4.7us
	I2C_SDA = 0;
	I2C_Delay10us();//保持时间是>4us
	I2C_SCL = 0;			
	I2C_Delay10us();		
}

void I2C_Stop()  //停止IIC,IIC协议尾
{
	I2C_SDA = 0;
	I2C_Delay10us();
	I2C_SCL = 1;
	I2C_Delay10us();//建立时间大于4.7us
	I2C_SDA = 1;
	I2C_Delay10us();		
}
/*******************************************************************************
* 函 数 名           : I2cSendByte(uchar num)
* 函数功能 	         : 通过I2C发送一个字节。在I2C_SCL时钟信号高电平期间,
*                    * 保持发送信号I2C_SDA保持稳定
* 输    入           : num ,ack
* 输    出         	 : 0或1。发送成功返回1,发送失败返回0
* 备    注           : 发送完一个字节I2C_SCL=0, 需要应答则应答设置为1,否则为0
*******************************************************************************/
uchar I2C_SendByte(uchar dat, uchar ack)
{
	uchar a = 0,b = 0;//最大255,一个机器周期为1us,最大延时255us。
			
	for(a=0; a< 8; a++)//要发送8位,从最高位开始
	{
		I2C_SDA = dat >> 7;	 //起始信号之后I2C_SCL=0,所以可以直接改变I2C_SDA信号
		dat = dat < < 1;
		I2C_Delay10us();
		I2C_SCL = 1;
		I2C_Delay10us();//建立时间 >4.7us
		I2C_SCL = 0;
		I2C_Delay10us();//时间大于4us		
	}

	I2C_SDA = 1;
	I2C_Delay10us();
	I2C_SCL = 1;
	while(I2C_SDA && (ack == 1))//等待应答,也就是等待从设备把I2C_SDA拉低
	{
		b++;
		if(b > 200)	 //如果超过200us没有应答发送失败,或者为非应答,表示接收结束
		{
			I2C_SCL = 0;
			I2C_Delay10us();
			return 0;
		}
	}

	I2C_SCL = 0;
	I2C_Delay10us();
 	return 1;		
}

uchar I2C_ReadByte() //IIC协议读取数据
{
	uchar a = 0,dat = 0;
	I2C_SDA = 1;			//起始和发送一个字节之后I2C_SCL都是0
	I2C_Delay10us();
	for(a=0; a< 8; a++)//接收8个字节
	{
		I2C_SCL = 1;
		I2C_Delay10us();
		dat < <= 1;
		dat |= I2C_SDA;
		I2C_Delay10us();
		I2C_SCL = 0;
		I2C_Delay10us();
	}
	return dat;		
}
/*******************************************************************************
* 函 数 名         : void At24c02Write(unsigned char addr,unsigned char dat)
* 函数功能		     : 写入24c02的一个地址的一个数据
*******************************************************************************/
void At24c02Write(unsigned char addr,unsigned char dat)
{
	I2C_Start();
	I2C_SendByte(0xa0, 1);//发送写器件地址
	I2C_SendByte(addr, 1);//发送要写入内存地址
	I2C_SendByte(dat, 0);	//发送数据
	I2C_Stop();
}


/*******************************************************************************
* 函 数 名         : unsigned char At24c02Read(unsigned char addr)
* 函数功能		     : 读取24c02的一个地址的一个数据
*******************************************************************************/

unsigned char At24c02Read(unsigned char addr)
{
	unsigned char num;
	I2C_Start();
	I2C_SendByte(0xa0, 1); //发送写器件地址
	I2C_SendByte(addr, 1); //发送要读取的地址
	I2C_Start();
	I2C_SendByte(0xa1, 1); //发送读器件地址
	num=I2C_ReadByte(); //读取数据
	I2C_Stop();
	return num;	
}


void main()
{
	TMOD |= 0x01;
	TH0=0XFC;
	TL0=0X18;
	TR0=1;
	ET0=1; 
	EA=1;	 
	while(1)
	{
	

	}
	
}

 

审核编辑:汤梓红

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

    关注

    9

    文章

    927

    浏览量

    80314
  • 存储芯片
    +关注

    关注

    11

    文章

    796

    浏览量

    42450
  • 掉电
    +关注

    关注

    0

    文章

    12

    浏览量

    7619
收藏 人收藏

    评论

    相关推荐

    24C02读写操作程序(C语言)

    本帖最后由 dianzijie5 于 2011-7-12 16:58 编辑 24C02读写操作程序.c#define uchar unsigned char#define uint
    发表于 04-22 09:02

    24c02

    求一个24c02程序,要求将数据存入24c02,然后读出,送P2口,用led显示,在网上试了好多,都不能用。。。。
    发表于 11-26 15:24

    24c02仿真

    想问下24c02能用proteus仿真?断掉存储应该怎么仿真?谢谢
    发表于 01-25 13:44

    电子密码锁, LCD12864, Proteus, 24C02

    自己设计了一个电子密码锁,可掉电保存密码!涉及了24C02、IIC、E2PROM等,采用LCD12864中文显示,目前采用Proteus仿真,过段时间做成实物!各位可以下载看看,有什么不懂的可以问我QQ:1126163471大家
    发表于 05-21 16:01

    24C02数据保存

    =read_24C02(0);if(b==5)Alarm=1;}}这是我24C02的程序 这样写程序可以正常运行 蜂鸣器响但是下面这种写法24C02掉电以后蜂鸣器不响 没有读取到数据v
    发表于 12-06 09:30

    STM32系统中掉电保存数据的方法是什么

    STM32系统中掉电保存数据的方法在嵌入式设备开发中,往往需要保存一些掉电不易失性的数据,如果系统配置、用户定制信息等等,如果增加额外的ROM IC,比如(基于I2
    发表于 12-10 07:42

    24C02芯片的相关资料分享

    202007每月一练 的板子上还有一个24C02芯片没有写教程,今天介绍一下24C02这个芯片的驱动方法。串行EEPROM 24CXX是基于I2C
    发表于 01-21 11:51

    DSP之24C02教程

    DSP之24C02教程,很好的DSP自学资料,快来学习吧。
    发表于 04-15 17:42 13次下载

    IIC应用--24c02

    IIC应用--24c02(C语言)源代码。
    发表于 05-20 15:37 30次下载

    24C02中文资料

    24C02中文资料,这里面的内容可以帮助各位朋友更好地掌握24C02的使用
    发表于 06-15 15:53 0次下载

    24c02基础程序

    24c02写入调用程序 用于初次接触24c02 学习24c02用的
    发表于 07-12 15:14 22次下载

    24C02驱动过程下载

    24C02驱动过程
    发表于 02-26 09:24 11次下载

    24C02读写操作程序设计实例,24C02 read / write process

    24C02读写操作程序设计实例,24C02 read / write process 关键字:24C02读写操作程序设计实例 24C
    的头像 发表于 09-20 19:41 1301次阅读

    24c02读写程序(已通过测试),24C02 read / write process

    24c02读写程序(已通过测试),24C02 read / write process 关键字:24c02读写程序(已通过测试
    的头像 发表于 09-20 19:41 2273次阅读

    使用51单片机和EEPROM存储器24C02保持保存实现流水灯的程序

    本文档的主要内容详细介绍的是使用51单片机和EEPROM存储器24C02保持保存实现流水灯的程序。
    发表于 06-06 17:50 4次下载
    使用51单片机和EEPROM存储器<b class='flag-5'>24C02</b>保持<b class='flag-5'>保存</b>实现流水灯的程序