|
本帖最后由 scjp 于 2022-5-14 19:45 编辑
程序里读取电压寄存器的部分
这样调用的 I2C_read_reg(0x80,0x02)*1.25;
unsigned int I2C_read_reg(unsigned int slaveaddr,unsigned int regaddr)
{
unsigned int error=0;
unsigned int i=0;
unsigned int readbuffer=0;
IIC_Start();
IIC_Send_Byte(slaveaddr|0x00);
if(IIC_Wait_Ack())
error|=0x01;
IIC_Send_Byte(regaddr);
if(IIC_Wait_Ack())
error|=0x02;
IIC_Stop();
IIC_Start();
IIC_Send_Byte(slaveaddr|0x01);
if(~IIC_Wait_Ack())
//error|=0x04;
{
readbuffer=IIC_Read_Byte(1)*256;
readbuffer+=IIC_Read_Byte(0);
}
IIC_Stop();
return readbuffer;
}
程序全部是这样的,网上找的模拟IIC然后改的
void IIC_Start()
{
INA226_SCL=1;
INA226_SDA=1;
I2C_Delay();
INA226_SDA=0;
I2C_Delay();
INA226_SCL=0;
//I2C_Delay();
}
void IIC_Stop()
{
INA226_SDA=0;
INA226_SCL=1;
I2C_Delay();
INA226_SDA=1;
//I2C_Delay();
}
void I2C_ACK(void) // ?摎怣崋
{
INA226_SDA=0;
I2C_Delay();
INA226_SCL=1;
I2C_Delay();
INA226_SCL=0;
INA226_SDA=1;
}
void I2C_NACK(void) //旕?摎怣崋
{
INA226_SDA=1;
I2C_Delay();
INA226_SCL=1;
I2C_Delay();
INA226_SCL=0;
I2C_Delay();
//INA226_SDA=0;
}
void IIC_Send_Byte(unsigned char send_data)
{
unsigned int i;
for(i=0;i<8;i++)
{
if(send_data&(0X80>>i))
INA226_SDA=1;
else
INA226_SDA=0;
I2C_Delay();
INA226_SCL=1;
I2C_Delay();
INA226_SCL=0;
I2C_Delay();
}
}
unsigned int IIC_Read_Byte(unsigned int ack)
{
unsigned int read_data=0;
unsigned int i;
unsigned int readbit;
for(i=0;i<8;i++)
{
INA226_SCL=1;
I2C_Delay();
if(INA226_SDA)
readbit=0x01;
else
readbit=0;
INA226_SCL=0;
I2C_Delay();
read_data= (read_data|readbit)<<1;
}
//I2C_Delay();
//Delay1ms();
if(ack==0)
I2C_NACK();
else
I2C_ACK();
return read_data;
}
unsigned int IIC_Wait_Ack()
{
unsigned int receive;
INA226_SDA=1;
I2C_Delay();
INA226_SCL=1;
I2C_Delay();
//Delay1ms();
//Delay1ms();
if(INA226_SDA)
receive=1;
else
receive=0;
INA226_SCL=0;
I2C_Delay();
return receive;
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|