OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4251|回复: 5

DS18B20疑问

[复制链接]

16

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-11-13
在线时间
0 小时
发表于 2013-11-26 16:43:50 | 显示全部楼层 |阅读模式
今天学习了下DS18B20实验,但是由于手头没有器件,只能说纸上谈兵了、、、
说说今天发现的一个小疑问:

if(TH>7)//高字节的高5位不全为0
    {
        TH=~TH;
        TL=~TL; 
        temp=0;//温度为负  
    }else temp=1;//温度为正    
    tem=TH; //获得高八位
    tem<<=8;    
    tem+=TL;//获得底八位
    tem=(float)tem*0.625;//转换     
if(temp)return tem; //返回温度值
else return -tem;   
关于温度转换:如果温度为负的话,不知道这里怎么会得到正确的结果。那极限值-55°为例,手册上说温度为-55°时,RAM的值为FC90H,但是根据以上代码得不到550这个值啊?

是不是应该先将补码减一、再取反啊,即:0370H(十进制的880),然后再乘以0.625才能等于550啊?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

17

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2013-11-26
在线时间
0 小时
发表于 2013-11-26 17:25:07 | 显示全部楼层
上面的程序貌似是有问题,我记得18b20输出的负温度是以补码的形式输出,所以计算前要先转换成原码再计算,上面虽然取反了但貌似没有减去1。
回复 支持 反对

使用道具 举报

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
660
金钱
660
注册时间
2013-11-22
在线时间
131 小时
发表于 2013-11-26 17:34:07 | 显示全部楼层
上面程序是对的,注意“-”符号和“~”符号的区别

“-”符号执行了取反加1的操作

“~”符号只是执行了取反操作



回复 支持 反对

使用道具 举报

1

主题

17

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2013-11-26
在线时间
0 小时
发表于 2013-11-26 17:41:28 | 显示全部楼层
回复【3楼】zhp:
---------------------------------
但是哪个-号是在最后求得的结果的时候加的,18b20传出来的数据不是负温度以补码输出吗?在取反前应该先减去1 然后再取反吧。就是
if(TH>7)//高字节的高5位不全为0
    {
        TH=~TH;
        TL=~TL; 
        temp=0;//温度为负  
    }
这里面要先减去1再取反
回复 支持 反对

使用道具 举报

16

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-11-13
在线时间
0 小时
 楼主| 发表于 2013-11-26 17:43:57 | 显示全部楼层
回复【4楼】似懂非懂:
---------------------------------

回复 支持 反对

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-8-18 09:47:38 | 显示全部楼层
回复【4楼】似懂非懂:
---------------------------------
我觉得应该把TH和TL先合并成16位,然后减1,再取反
合肥-文盲
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 07:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表