uint get_temp()
{
uchar a,b,temp;//这边的temp是定义成uchar类型的,它是一个字节。是八位。
float f_temp;
dsreset();
delay_3(1);
tempwritebyte(0xcc); //跳过64位ROM
tempwritebyte(0xbe); //发送读取数据命令
a=tempread();
b=tempread();
temp=b;
temp<<=8;//然后在这个地方你却将它左移了8位,也就是将你上面的temp=b这个值给弄没了。所以你应该把temp在上面定义成uint类型的变量。这样才是16位变量。你左移才不会溢出。
temp=temp|a; //两字节合成一个整型变量。
temp=temp;
f_temp=temp*0.0625; //得到真实十进制温度值,因为DS18B20
temp=f_temp*100+0.5;
/* f_temp=f_temp+0.05; */
return temp; //返回温度值
}
你只写了正温度转换程序,负温度值转换你没写