DS18B20的0x44指令

来源:百度知道 编辑:UC知道 时间:2024/05/14 06:30:45
用DS18B20测温度,用的是寄生电源的方式,DQ接了个4.7K的上拉电阻。DS18B20采用出厂时的默认精度,0.0625。调了一天了,一直读不到正确的值。
开始时以为是自己程序写的有问题,可当我不发送0x44指令,而直接发送0xBE时,能够读出85度的默认数值。这就说明我的程序没什么问题。
可当我发送0x44进行温度转换后,读到的16位数竟然是0x07FF,最大温度值。
我一点办法都没有了,请大家帮忙分析一下可能出问题的地方。
感觉不是我操作过程的问题。
当前配置为12位有效数据时,得到的温度是0x07FF。
11位时,得到的是0x07FE。
10位时,得到的是0x07FFC。
9位时,得到的是0x07F8。
很明显它只是把有效位置为全一就完事了,并没有真正读温度。

读温度前要初始化,发温度指令前必须发ROM指令(不需要就发0x0CC跳过),顺序如下
1.发ROM操作指令
2.发转换温度指令
(这里需要等待转换结束,寄生供电需要时间更长)
3.初始化
4.发ROM操作指令
5.发读温度指令
6.读温度
我记得有个论坛上说,返回值全为高,有可能是因为初始化只判断存在低电平就结束了,据说要再判断高电平出现才可认为初始化成功。
我也在做着个,感觉室温还好,高温测得不准,不知道什么原因。弄好了告诉我一下你的准不准。