本文主要是介绍原创:关于DS18B20初始化时候读出85摄氏度的解释。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
个人原创,如需要转载,请注明出处,谢谢。
关于DS18B20初始化时候读出85摄氏度的问题,我相信很多朋友都遇到过。
很多人估计没有解决这个问题。最后不得已的情况下多读了几次,然后才开始显示。
问题就是因为,DS18B20默认是12位采样,具体时间看下表:
配置寄存器
所以每次单片机复位后,进行如下配置:
void DS18B20_Init(void)
{
ow_reset(); //初始化
write_byte(0xcc); //忽略ROM指令
write_byte(0x4e); //写暂存器指令
write_byte(0); //TH值 未使用
write_byte(0); //TL值 未使用
write_byte(0x1f);
//配置寄存器 写入R1=0 R0=0 表示只用9位采样
//这样转换时间约为100ms 加快采样转换速度
}
然后以后读温度时候,如此操作即可:
void read_temp(void) //获取温度get the temperature
{
unsigned char a,b;
ow_reset();
write_byte(0xcc); //忽略ROM指令
write_byte(0x44); //温度转换指令
delay_nms(110); //-----特别要注意这个地方。
ow_reset(); //初始化
write_byte(0xcc); //忽略ROM指令
write_byte(0xbe); //读暂存器指令
a = read_byte(); //读取到的第一个字节为温度LSB
b = read_byte(); //读取到的第2个字节为温度MSB
a=a>>4; //不要小数点
b=b*16;
tempwd=a+b;
strwd[0]=tempwd/100+48;
strwd[1]=(tempwd%100)/10+48;
strwd[2]=tempwd%10+48;
}
这样,保证不会读出85了。
除非当时的环境就是85摄氏度。
这篇关于原创:关于DS18B20初始化时候读出85摄氏度的解释。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!