找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6115|回复: 3
收起左侧

ds18b20的整数和小数

[复制链接]
ID:65751 发表于 2014-9-5 23:21 | 显示全部楼层 |阅读模式
  ReadyReadTemp(); //读温度准备,初始化等
  TL=ReadOneChar();//先读的是温度值低位
  TH=ReadOneChar();//接着读的是温度值高位
  TN=TH*16+TL/16;  //实际温度值=(TH*256+TL)/16,即:TH*16+TL/16,这样得出的是温度的整数部分,小数部分被丢弃了        
  TD=(TL%16)*10/16;//计算温度的小数部分,将余数乘以10再除以16取整,这样得到的是温度小数部分的第一位数字(保留1位小数)
   程序如上,是某人写的。TN整数部分和TD小数部分是怎样算出的,其原理是什么呀,看得一头雾水。望大虾指点迷津,不胜感谢!
回复

使用道具 举报

ID:58502 发表于 2014-9-5 23:53 | 显示全部楼层
ds18b20的工作与那里就是读数/16就等于实际温度、读数分为高位和低位,也就是TH和TL。实际温度值=(TH*256+TL)/16,去掉括号就是TH*16+TL/16。而小数点后一位TD=(TL%16)*10/16实际也是实际温度值=(TH*256+TL)%16/16也就是利用余数来当小数点因为TH*256肯定会被整除所以省略了。最终是TL%16/16,因为算出来的值是零点几,所以要乘以10放大来显示

评分

参与人数 1威望 +45 黑币 +45 收起 理由
admin + 45 + 45 回帖助人的积分奖励

查看全部评分

回复

使用道具 举报

ID:65751 发表于 2014-9-6 13:31 | 显示全部楼层
思路还是有点乱呀。能清晰说一下吗。下面附上类型说明:
unsigned char TL;     //储存暂存器的温度低位
unsigned char TH;    //储存暂存器的温度高位
unsigned int TN;      //储存温度的整数部分
unsigned int TD;      //储存温度的小数部分           
回复

使用道具 举报

ID:65608 发表于 2014-9-6 14:54 | 显示全部楼层
liaolinhui 发表于 2014-9-5 23:53
ds18b20的工作与那里就是读数/16就等于实际温度、读数分为高位和低位,也就是TH和TL。实际温度值=(TH*256+T ...

这个解释已经很详细了啊,如果还是看不懂的话 我建议先补习一下,基础知识吧,不要吧时间浪费的看不懂的地方,因为没有了解这部分的原理的话 是无论如何也无法看懂的
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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