DS18B20的程序中小数decT = (decT*10) / 16理解

17年学习51单片机,学到DS18B20传感器时遇到例程程序中在处理温度数据小数位看到一行代码不理解。

int intT = 0,dect = 0;

intT = temp >> 4;               //分离出温度值整数部分                 
decT = temp & 0xF;              //分离出温度值小数部

decT = (decT*10) / 16;         //二进制的小数部分转换为 1 位十进制位 

要想理解这句代码,需要根据传感器手册中介绍的输出数据格式类型理解。

当数字是 0x0001 的时候,那温度是 0.0625 度。 

举个例子很直观。
例如:芯片采集到温度为0.5摄氏度, 则它的寄存器中的值就是  0000 0000 0000 1000  取低四位

decT = temp & 0xF;     则为   0X08 
带入公式:decT=(decT*10)/16;

                  decT=(8*10)/16=5 这就是小数部分的值


       为何今天写博客呢?一是好久没写博客了    二是今天看以前的书这段程序看不明白,上网上找答案的过程中看到17年我竟然回答过这个问题的贴子,看后恍然大悟,但也挺惭愧的。今天把这小知识点单独提出来记录自己的学习过程,也希望对此问题有疑问的朋友有所帮助。

       这代码的出处是宋雪松老师出的一本书的内容,我觉得是学习单片机含金量很高的书,代码高效,简洁,规范,实际应用开发没问题。大二学完一遍受益良多,在此表示感谢,推荐大家阅读。

 

 

2019年11月18日22点16分 

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值