AT24C02读写操作 一

发布时间:2024年01月18日

//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();

}

文章来源:https://blog.csdn.net/weixin_46290197/article/details/135640361
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。