打印
[51单片机]

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

[复制链接]
1110|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仿真是看不出这种错误的。

使用特权

评论回复
5
ayb_ice| | 2019-3-27 16:02 | 只看该作者
本帖最后由 ayb_ice 于 2019-3-27 16:05 编辑

精度是16分之一度,*25/4=*6.25,主要是避免用浮点操作

使用特权

评论回复
6
ayb_ice| | 2019-3-27 16:09 | 只看该作者
这里的a,b应该不是直接从1820读到的数据,否则*6.25意义不大,*10或100还有些意义

使用特权

评论回复
7
一路向北lm| | 2019-3-27 23:02 | 只看该作者
仔细看ds18b20芯片手册,介绍很清楚

使用特权

评论回复
8
一路向北lm| | 2019-3-27 23:02 | 只看该作者
ohy3686 发表于 2017-5-26 09:30
t = (b*256+a)*25;
tt=t>>2;
----------------------------------

老师正解

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

355

帖子

1

粉丝