蓝桥杯iic之AT24C02(教你如何依据数据手册写代码)

目的:存储数据

做一件事,首先了解他的目的,我们使用AT24C03是为了存储数据在eeprom中,达到断电仍可保存的目的。
于是我们就需要弄清如何将数据写入 以及 如何读出写入的数据。
我将以最简单的方式教你依据数据手册 写出 存储数据的程序。

原理

写入

在这里插入图片描述
从上图可以发现,却认为的SDA为低电平~,我们有官方给的驱动里可以找到这么一个函数

void IIC_SendAck(bit ackbit)
{
    SCL = 0;
    SDA = ackbit;  					// 0:应答,1:非应答
    IIC_Delay(DELAY_TIME);
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SCL = 0; 
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

IIC_SendAck(0)可以作为发送应答~
控制字节的高四位 1010 = a
低4位由A0,A1,A2, 0 组成,其中A0,A1,A2电平 表示选择哪一个AT24C02,注意
在这里插入图片描述

在这里插入图片描述起始位: start
控制字节: 一般来说 为0xa0
确认位: 上面我们提及的发送应答,将SDA置0;
地址字节:存储数据的地址,AT24xx00的器件,只使用地址字节的低四位,所以存储地址为0~255
数据字节: 我们想存储的数据
P: 停止位
请注意确认位的正确书写,不能少写也不能多写,只有应答了,单片机才清楚你已经执行上一步,他才会准备下一步要做什么。否则程序将停滞不前或者跑飞


void write_at24(unsigned char add,unsigned char dat1)
{
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_SendByte(dat1);
	IIC_WaitAck();
	IIC_Stop();	

}

读出

在这里插入图片描述
由芯片手册,我们看出随机读取操作才能正确的将我们当前存储地址的数据 读取出来,而当前读取操作会 读取到我们写入地址再+1 的地址,里面没有存储我们的数据。

并且,随机读取,需要先发送字节地址(此时为写操作),字节地址发送完毕后,主器件收到确认信号就产生起始条件。
下面是代码流程:
在这里插入图片描述
s起始位: start
控制字节: 0xa0(此时为写如)
确认位: 上面我们提及的发送应答,将SDA置0;
地址字节:之前我们写入过数据的地址
确认位: 将SDA置0;
s起始位: start
控制字节: 0xa1(此时为读操作)
数据字节: 读取 之前发送的地址字节 里的数据
这里没有确认位
P: 停止位

u8 R_at24c02(u8 address)
{
	u8 temp;
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(address);
	IIC_WaitAck();

	IIC_Start();
	IIC_SendByte(0xa1);
	IIC_WaitAck();
	temp = IIC_RecByte();
	IIC_Stop();
	return temp;
}

注意事项:

1.写入AT24C02需要等待5ms
2.读去不需要
3.一直读取也会出事故,原因目前未知
如:

void main()
{
	  Timer0Init();
    allInit();
	  Delay5ms();
	  temp =  R_at24c02(0x55);
	  temp++;
	  Delay5ms();
	  W_at24c02(0x55,temp);
    while (1)
		{
//		EA = 0;   //这里读多了AT24CO2也会发生读取失误的问题
//		temp = R_at24c02(0x55);
//		EA= 1;
			smg_dis();
			//EA = 0;
		  temperature = R_T();
			//EA = 1;
		}
	}

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值