IIC通信
IIC总线是双向、二线制、同步串行总线,是一种多向控制总线,即多个芯片可以连接到同一个总线结构下,每个芯片都可以作为实时数据传输的控制源。
AT24C02:EEPROM存储芯片,是一个2K位串行CMOS EEPROM,内部含有256个8位字节。EEPROM是指带电可擦可编程读写存储器,掉电不丢失数据。
AT24C02芯片原理图:
通过芯片手册的比对,AT24C02芯片的延时时间较PCF8591要小很多,几乎可以忽略不计。(但仍可以使用相同的IIC驱动程序)
由于PCF8591和AT24C02芯片都是接在IIC总线上,故其开启、停止、等待、发送、接收等底层IIC驱动程序均保持一致。
如何确定使用的是IIC总线系统的AT24C02芯片——发送AT24C02的有效地址到器件(发送的第一个字节)由下图可知,写有效地址为0XA0,读有效地址为0XA1。
即
IIC_SendByte(0xA0); //写
或
IIC_SendByte(0xA1); //读
紧接着发送控制字,也即读写的EEPROM地址。
EEPROM读:
uchar EEPROM_Read(uchar add)
{
uchar temp;
//IIC写
IIC_Start();
IIC_SendByte(0XA0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_Stop();
//IIC读
IIC_Start();
IIC_SendByte(0XA1);
IIC_WaitAck();
temp=IIC_RecByte();
IIC_Stop();
//返回temp值
return temp;
}
EEPROM写:
void EEPROM_Write(uchar add,uchar dat)
{
IIC_Start();
IIC_SendByte(0XA0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
}
比较PCD8591读写程序,我们可以发现,其基本过程是一致的。
1.开启IIC;2.发送AT24C02的写有效地址;3.发送控制字即读出或写入数据的地址;4.如果需要写入数据,则继续发送数据;如果需要读出数据,则关闭并重新开启IIC,发送AT24C02的读有效地址,然后通过IIC获取数据。5.关闭IIC,如果是读取数据则需返回值。
注:每一次通过IIC发送数据后都需要等待一次响应信号。