20210326-ds18b20负温度理解
20210326-ds18b20负温度理解
网上对与ds18b20负温度的解释不够详细,特此说明。若有纰漏与不足、敬请指出
基础知识
根据手册,要是温度为负值,则寄存器的高八位的高五位全为1,加入你把采集到的数据合成一个short,直接判断其值是否大于0即可。
程序处理
/*
DS18B20_ReadData获取两个字节数据,
具体数据格式见上表
*/
float DS18B20_ReadTemp()
{
// 先默认温度为正数
float temp = 1.0f;
short read_data = 0;
read_data = DS18B20_ReadData();
// 有符号的short小于0,说明温度为负数
if (read_data < 0)
{
// 在此处将温度设置成负数
temp = -1.0f;
// 根据补码计算这个温度的绝对值
read_data = ~read_data;
read_data += 1;
}
// 将正数或负数的系数带入即可
temp *= read_data;
temp *= 0.0625;
return temp;
}
参考链接
[1]百度知道
[2]美信官网ds18b0.pdf
[3]stc官网上ds18b20程序
[4]stc官网
[5]21ic中国电子网参考资料