ds18b20里的 温度值正负判断 为什么要判断大于6348 ,为什么取这个值?

作者&投稿:茶质 (若有异议请与网页底部的电邮联系)
ds18b20里的 温度值正负判断 为什么要判断大于6348~

看不懂也可以这样判断:if((MSB&0XF8)==X0F8)//满足为负温度........

可能会,不过也可能时间短没事。不过我没反过,这个比较小心。像单片机,反了N次,手模都 起泡的,也没烧。

其实不一定要大于6348

根据手册,要是温度为负值,则寄存器的高八位的高五位全为1,加入你把采集到的数据合成一个unsigned int 型,位temp,则temp为 1 1 1 1 1 X X X     X X X X X X X X,必定大于 0 0 0 0 0 1 1 1

     1 1 1 1 1 1 1 1 (11个1),为2047,所以你只要判断temp>(2047~~63489(二进制数为 11111 000 00000001))

不明白的可以看下图



tem_data_l=read_byte(); //读低8位数据,低8位数据格式(2^3,2^2,2^1,2^0,2
tem_data_h=read_byte(); //读高8位数据,高8位数据格式(S,S,S,S,S,2^6,2^5

temp_data=tem_data_h*256+tem_data_l;

sign_flag = 0;
sign_flag = temp_data;
sign_flag = (sign_flag & 0xf000) ; // 只保留符号位
if ( sign_flag > 0 ) // Fuhao>0 是负数
{
sign_flag = 0xffff;
}
else
{
sign_flag = 0;
}

temp_data ^= sign_flag;
if ( sign_flag>0 )// 负数求反加1
{
temp_data += 1;
}
temp_data=(temp_data*625)/1000;

哪 来的数,看看我上面的处理就OK啦。