模拟iic驱动sht3x湿度读数异常

用模拟iic调试sht31,能正确读出温度,但是湿度一直都是100。

    IIC_Start();                
    IIC_SendByte(SHT30W);          //发送设备地址+写信号
    while(IIC_wait_ACK());            //从机应答
    IIC_SendByte(0x22);            //命令高8位,0x2220,周期测量
    while(IIC_wait_ACK());
    IIC_SendByte(0x20);            //命令低8位
    while(IIC_wait_ACK());
    //IIC_Stop();                   //周期读取sht30数据,按照时序图,不需要发送停止命令          
    delay1ms(20);                    //此处延时必须要有,等待测量完成,才能读取数据                  
    IIC_Start();                
    IIC_SendByte(SHT30W);          //发送设备地址+写信号
    while(IIC_wait_ACK());            //从机应答
    IIC_SendByte(0xe0);            //命令高8位,0xe000,准备读取数据模式
    while(IIC_wait_ACK());
    IIC_SendByte(0x00);            //命令低8位
    while(IIC_wait_ACK());
    //IIC_Stop();                   //周期读取sht30数据,按照时序图,不需要发送停止命令 
    
    IIC_Start();                
    IIC_SendByte(SHT30R);          //发送设备地址+读信号
    delay1ms(20);
    while(IIC_wait_ACK());
    BUFt[0] = IIC_ReadByte(1);    //温度高
    BUFt[1] = IIC_ReadByte(1);    //温度低
    BUFt[2] = IIC_ReadByte(1);    //温度crc
    BUFt[3] = IIC_ReadByte(1);    //湿度高
    BUFt[4] = IIC_ReadByte(1);    //湿度低
    BUFt[5] = IIC_ReadByte(0);    //湿度crc
    IIC_Stop();
    
    temp = (BUFt[0]<<8) | BUFt[1];
    humi = (BUFt[3]<<8) | BUFt[4];

    tem = (175.0*(float)temp / 65535.0 - 45.0);
    hum = (100.0*(float)humi / 65535.0);
    
    delay1ms(500);
    temp = 0;
    humi = 0;


img

根据您提供的代码,SHT3x湿度传感器的读数异常可能是由以下原因之一引起的:

1.传感器故障或连接错误。
2.湿度寄存器的读取未按照规定的方式进行。
3.温度的读取正确,但湿度读取错误,可能是湿度寄存器的读取顺序错误或湿度计算公式错误。
建议您检查传感器是否正确连接,并尝试检查读取湿度寄存器的过程,以确保您的代码按照规定的方式读取湿度寄存器。另外,您也可以尝试手动计算湿度,以便进一步确定问题的根本原因。