写操作(EEPROM):
(1)开启总线
(2)写地址字,等待回应(写命令)
(3)传要写的地址,等待回应
(4)写要写的数字
(5)结束总线
(6)适当延时
#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1
unsigned char read_eeprom(unsigned char add)
{
unsigned char dat;
IIC_Start(); //(1)开启总线
IIC_SendByte(SlaveAddrW); //(2)写地址字,等待回应(写命令)SlaveAddrW->写器件的地址
IIC_WaitAck();
IIC_SendByte(add); //(3)写要读的地址,等待回应
IIC_WaitAck();
IIC_Start(); //(4)再次开启总线
IIC_SendByte(SlaveAddrR); //(5)写地址字,等待回应(读命令)SlaveAddrR->读器件的地址
IIC_WaitAck();
dat = IIC_RecByte(); //(6)读要读的地址
IIC_Ack(0); //(7)发出回应
IIC_Stop(); //(8)结束总线
return dat;
}
读操作:
(1)开启总线
(2)写地址字,等待回应(写命令)
(3)写要读的地址,等待回应
(4)再次开启总线
(5)写地址字,等待回应(读命令)
(6)读要读的地址
(7)发出回应
(8)结束总线
unsigned char read_eeprom(unsigned char add)
{
unsigned char dat;
IIC_Start(); //(1)开启总线
IIC_SendByte(SlaveAddrW); //(2)写地址字,等待回应(写命令)
IIC_WaitAck();
IIC_SendByte(add); //(3)写要读的地址,等待回应
IIC_WaitAck();
IIC_Start(); //(4)再次开启总线
IIC_SendByte(SlaveAddrR); //(5)写地址字,等待回应(读命令)
IIC_WaitAck();
dat = IIC_RecByte(); //(6)读要读的地址
IIC_Ack(0); //(7)发出回应
IIC_Stop(); //(8)结束总线
return dat;
}
读操作(PCF8591):
#define PcfW 0x90
#define PcfR 0x91
unsigned char read_PCF8591(unsigned char add)
{
unsigned char dat;
IIC_Start(); //(1)开启总线
IIC_SendByte(PCfW); //(2)写地址字,等待回应(写命令)PCFW->写器件的地址
IIC_WaitAck();
IIC_SendByte(0x03); //(3)写要读的地址,等待回应 AIN3通道
IIC_WaitAck();
IIC_Start(); //(4)再次开启总线
IIC_SendByte(PCFR); //(5)写地址字,等待回应(读命令)PCFR->读器件的地址
IIC_WaitAck();
dat = IIC_RecByte(); //(6)读要读的地址
IIC_Ack(0); //(7)发出回应
IIC_Stop(); //(8)结束总线
return dat;
}
总结:
EEPROM 和 PCF8591 都是通过IIC总线来读写操作,只是更改写器件的地址和数据。