写操作(EEPROM):
(1)开启总线
(2)写地址字,等待回应(写命令)
(3)传要写的地址,等待回应
(4)写要写的数字
(5)结束总线
(6)适当延时
#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1unsigned 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 0x91unsigned 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总线来读写操作,只是更改写器件的地址和数据。