|
我用的STC8A8K64S4A12单片机,5V电压,采集的SHT30数据进行CRC8校验,校验正确了才进行计算显示,能够显示数值,应该都上来的数据是正确的。
void Getdat_SHT30()
{
unsigned long rawValueTemp; // temperature raw value from sensor
unsigned long rawValueHumi; // humidity raw value from sensor
I2C_WriteNByte(SHT30_ADDR1,buffer_SHT30_TX1,2); //写入从机地址,以及指令
Delay_1ms(5); //至少等待1.5ms
I2C_ReadNByte(SHT30_ADDR1,buffer_Receviedat,6);
if(SHT3X_CalcCrc(buffer_Receviedat,2)==buffer_Receviedat[2])//校验温度数据
{
rawValueTemp =(buffer_Receviedat[0] << 8) | buffer_Receviedat[1];
temp =(int)((1750 *rawValueTemp >>16) - 450);
//temp =(int)((21875 *rawValueTemp)>>13);
}
else
{
rawValueTemp=0;
temp=0;
}
if(SHT3X_CalcCrc(&buffer_Receviedat[3],2)==buffer_Receviedat[5])//校验温度数据
{
rawValueHumi =(buffer_Receviedat[3] << 8) | buffer_Receviedat[4];
humi =(int)((1000 *rawValueHumi)>>16);
//humi =(int)((12500 *rawValueHumi)>>13);
}
else
{
rawValueHumi=0;
humi=0;
}
writedata(rawValueTemp,temp,rawValueHumi,humi);//串口发送读上来的数值和转换后的温湿度值。
}
下边是串口接收的数据:
EMPAD=00026095 TEMP=0024.6 humiAD=00012981 humi=0019.8
TEMPAD=00026090 TEMP=0024.6 humiAD=00013002 humi=0019.8
TEMPAD=00026090 TEMP=0024.6 humiAD=00013002 humi=0019.8
TEMPAD=00026137 TEMP=0024.7 humiAD=00012964 humi=0019.7
TEMPAD=00026137 TEMP=0024.7 humiAD=00012964 humi=0019.7
TEMPAD=00026596 TEMP=0026.0 humiAD=00019780 humi=0030.1
TEMPAD=00026596 TEMP=0026.0 humiAD=00019780 humi=0030.1
TEMPAD=00026892 TEMP=0026.8 humiAD=00029266 humi=0044.6
TEMPAD=00026892 TEMP=0026.8 humiAD=00029266 humi=0044.6
TEMPAD=00026892 TEMP=0026.8 humiAD=00029266 humi=0044.6
TEMPAD=00027008 TEMP=0027.1 humiAD=94937396 humi=6683.9
TEMPAD=00027008 TEMP=0027.1 humiAD=94937396 humi=6683.9
TEMPAD=00027135 TEMP=0027.4 humiAD=94941842 humi=6690.7
当湿度数值大于44读时,源数据就变成乱码了,这是什么原因?
|
|