请问有朋友使用过PCA9539读取读取引脚的电平吗?我现在是能够正常通过写入通过PCA9539取控制电平拉高拉低;但是读取引脚的电平一直是00FF,我设置引脚是输入,读取其他如配置寄存器的数据也是)0X00FF;我现在不知道是读取的哪个步骤出了问题,请各位帮忙解答。
//==========读多个字节============================================================
void pca9539_read_bytes(u16 PCA9539_ADDR,u8 command_byte,u8 *bytes,u8 len)
{
u8 ack;
//启动信号
iic_start();
//发送设备地址,执行写操作
iic_send_byte(PCA9539_ADDR|PCA9539_W);
ack=iic_wait_ack();
if(ack==1)
{
//停止信号
iic_stop();
return;
}
//发送命令字节
iic_send_byte(command_byte);
ack=iic_wait_ack();
if(ack==1)
{
//停止信号
iic_stop();
return;
}
//启动信号
iic_start();
//发送设备地址,执行读操作
iic_send_byte(PCA9539_ADDR|PCA9539_R);
ack=iic_wait_ack();
if(ack==1)
{
//停止信号
iic_stop();
return;
}
while(len--)
{
if(len > 0)
{
//接受一个字节数据
*bytes = iic_read_byte(0);
}
else
{
//接受一个字节数据
*bytes = iic_read_byte(1);
}
//数据地址加1,地址指向下一个数据空间
bytes++;
}
//停止信号
iic_stop();
}