本文主要是介绍AT24C02读写操作 一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
//AT24C02初始化
void AT24C02_Init(void)
{
IIC_Init();
}
//AT24C02的字节写入 写一个字节
void AT24C02_WordWrite(uint8_Address,uint8_t Data)
{
//1。主机发送开始信号
IIC_StartSignal();
//2.主机发送器件地址 写操作
IIC_SentBytes(0xA0);
//3.主机等侍从机应答
if(IIC_WaitAck()==1) //如果没有应答
{
printf("AT24C02 Ack Device Address Error\n");
IIC_StopSignal();
}
printf(" AT24C02 Ack Device Address OK\N");
//4.主机发送存储地址 写操作
IIC_SendBytes(Address);
if(IIC_WaitAck()==1) //如果没有应答
{
printf("AT24C02 Ack Data Address Error\n");
IIC_StopSignal();
}
printf(" AT24C02 Ack Data Address OK\N");
//5主机发送存储数据 写操作
IIC_SendBytes(Data);
if(IIC_WaitAck()==1) //如果没有应答
{
printf("AT24C02 Ack Write Data Error\n");
IIC_StopSignal();
}
printf(" AT24C02 Ack Write Date OK\N");
//6主机发送停止信号
IIC_StopSignal();
}
//AT24C02读取一个字节 随机读
uint8_t AT24C02_WordRead(uint8_t Address )
{
uint8_t data=0;
//1。主机发送开始信号
IIC_StartSignal();
//2.主机发送器件地址 写操作
IIC_SentBytes(0xA0);
//3.主机等侍从机应答
if(IIC_WaitAck()==1) //如果没有应答
{
printf("AT24C02 Ack Device Write Address Error\n");
IIC_StopSignal();
}
printf(" AT24C02 Ack Device Write Address OK\N");
//4.主机发送存储地址 打算读取数据的地址
IIC_SendBytes(Address);
//5主机等待应答
if(IIC_WaitAck()==1) //如果没有应答
{
printf("AT24C02 Ack Data Device Address Error\n");
IIC_StopSignal();
}
printf(" AT24C02 Ack Data Device Address OK\N");
//6.主机再次发送开始信号
IIC_StartSignal();
//7.主机发送器件地址 读操作
IIC_SentBytes(0xA1);
//8主机等待应答
if(IIC_WaitAck()==0) //如果没有应答
{
printf("AT24C02 Ack Device Read Address Error\n");
IIC_StopSignal();
}
printf(" AT24C02 Ack Device Read Address OK\N");
//9主机读取1个字节数据
data=IIC_ReadBytes( ); 当前读
//10主机发送应答信号
IIC_MasterAck(1);
//11主机发送停止信号
IIC_StopSignal();
return data
}
//读取n字节数据
void AT24C02_RandomRead(uint8_t Address uint8_t *RecvBuf uint8_t Dataleng)
{
//1。主机发送开始信号
IIC_StartSignal();
//2.主机发送器件地址 写操作
IIC_SentBytes(0xA0);
//3.主机等侍从机应答
if(IIC_WaitAck()==1) //如果没有应答
{
printf("AT24C02 Ack Device Write Address Error\n");
IIC_StopSignal();
}
printf(" AT24C02 Ack Device Write Address OK\N");
//4.主机发送存储地址 打算读取数据的地址
IIC_SendBytes(Address);
//5主机等待应答
if(IIC_WaitAck()==1) //如果没有应答
{
printf("AT24C02 Ack Data Device Address Error\n");
IIC_StopSignal();
}
printf(" AT24C02 Ack Data Device Address OK\N");
//6.主机再次发送开始信号
IIC_StartSignal();
//7.主机发送器件地址 读操作
IIC_SentBytes(0xA1);
//8主机等待应答
if(IIC_WaitAck()==0) //如果没有应答
{
printf("AT24C02 Ack Device Read Address Error\n");
IIC_StopSignal();
}
printf(" AT24C02 Ack Device Read Address OK\N");
//9主机读取1个字节数据
Datalen=Datalen-1;
while(Datalen--)
{
*IRecvBuf++=IIC_ReadBytes( );
IIC_MasterAck(0); //表示主机收到
}
*IRecvBuf=IIC_ReadBytes( ); //读最后一个字节
//10主机发送应答信号
IIC_MasterAck(1);
//11主机发送停止信号
IIC_StopSignal();
return data
}
//uint8_t AT24C02_CurrentAddressRead(void) 当前读 保存当前下一个地址
{
uint8_t data=0;
//1。主机发送开始信号
IIC_StartSignal();
//2.主机发送器件地址 读操作
IIC_SentBytes(0xA1);
//3.主机等侍从机应答
if(IIC_WaitAck()==1) //如果没有应答
{
printf("AT24C02 Ack Device Address Error\n");
IIC_StopSignal();
}
printf(" AT24C02 Ack Device Address OK\N");
//4.主机读取1个字节数据
data=IIC_ReadBytes(); 当前读 读当前下一个地址
//5主机发送应答信号
IIC_MasterAck(1);
//6主机发送停止信号
IIC_StopSignal();
}
这篇关于AT24C02读写操作 一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!