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