单片机读DS18B20温度负值补码问题

2024-12-21 16:38:44
推荐回答(1个)
回答1:

你可需判断低12位就可以了,高位不管
你可以参考一下我的程序,18B20中的负温度是以补码表示的!!!!!!

/*******DS18B20程序读取温度******/
uchar ReadTemperature(void)
{
uchar a;
uchar b;
uint t=0;

Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

a=ReadOneChar(); //低8位
b=ReadOneChar(); //高8位

t=b;
t<<=8;
t=t|a;
if(t>=2048)//最高位为一说明是个负温
{
t^=0xffff;
dis_buf[0]=17;//在数码管上显示“-”,你可以用一个程序标志位的0,1来表示正温负温
}
else
{
dis_buf[0]=16;
}
t=t>>4;//*0.0625; //数值转换
return((uchar)t);
}