[51单片机] 51单片机使用18b02温度采集,串口显示问题

[复制链接]
1508|7
 楼主| fe07fe 发表于 2017-5-25 18:48 | 显示全部楼层 |阅读模式
本帖最后由 fe07fe 于 2017-5-25 18:51 编辑

51单片机使用18b02温度采集,通过串口把数据传出,把温度,采集处的数据要乘以0.625,才能转换成读数,为什么在串口发送数据前进行这种小数乘法,串口就不能发送数据了呢,
不得不使用下面这种转化才行呢。
t = (b*256+a)*25;
tt=t>>2;
读取18b02的16位分两次取出
a是前8位,b后8位。
为这样就可以用,串口才能发送数据呢跟  乘以0.625 转换效果一样呢,不懂啊,那位大神能够解释一下。
ningling_21 发表于 2017-5-25 19:15 | 显示全部楼层
数据类型,还是数据类型

其实可以直接发送 a,b
ohy3686 发表于 2017-5-26 09:30 | 显示全部楼层
t = (b*256+a)*25;
tt=t>>2;
----------------------------------
按照这个写法,b应该是高8位,a是低8位。
b*256,是将b左移8位,在加上a的意思是,b和a组成一个16位的数据。
t>>2,是t右移2位的意思,本质上等同于t/4。
这个数据*25之后,再右移2位,
其含义是:这个数据*25/4,即等于这个数据*6.25。

评分

参与人数 1威望 +3 收起 理由
fe07fe + 3 厉害我的哥

查看全部评分

 楼主| fe07fe 发表于 2019-3-27 15:41 来自手机 | 显示全部楼层
单片机程序*0.625,这种操作会单片机程序跑飞,也就是串口发送不了数据,proteus仿真是看不出这种错误的。
ayb_ice 发表于 2019-3-27 16:02 | 显示全部楼层
本帖最后由 ayb_ice 于 2019-3-27 16:05 编辑

精度是16分之一度,*25/4=*6.25,主要是避免用浮点操作
ayb_ice 发表于 2019-3-27 16:09 | 显示全部楼层
这里的a,b应该不是直接从1820读到的数据,否则*6.25意义不大,*10或100还有些意义
一路向北lm 发表于 2019-3-27 23:02 | 显示全部楼层
仔细看ds18b20芯片手册,介绍很清楚
一路向北lm 发表于 2019-3-27 23:02 | 显示全部楼层
ohy3686 发表于 2017-5-26 09:30
t = (b*256+a)*25;
tt=t>>2;
----------------------------------

老师正解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

355

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部