找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2458|回复: 3
打印 上一主题 下一主题
收起左侧

想请问一下关于DS18B20高低字节的问题

[复制链接]
跳转到指定楼层
楼主
ID:691676 发表于 2020-5-24 09:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看到一个例程,这里DS18B20的高低字节相加得到16位的整型数,但是,为什么要将高字节强制转换成int型,然后再加低字节,难道不是低字节转换成int型吗,求大佬指教。/* 读取DS18B20转换的温度值,返回值-表示是否读取成功 */
bit Get18B20Temp(int *temp)
{
    bit ack;
        uchar LSB, MSB;   //16bit温度值的低字节和高字节
        ack = Get18B20Ack();      //执行总线复位,并获取18B20应答
        if(ack == 0)              //如18B20正确应答,则读取温度值
        {
        Write18B20(0xCC);       //跳过ROM操作
                Write18B20(0xBE);       //发送读命令
                LSB = Read18B20();      //读温度值的低字节
                MSB = Read18B20();      //读温度值的高字节
                *temp = ((int)MSB << 8) + LSB;    //合成为16bit整型数
        }
        return ~ack;              //ack==0表示操作应答,所以返回值为其取反值
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:759705 发表于 2020-5-24 11:11 来自手机 | 只看该作者
16位数据的高8位是有位权的 这里的msb<<8位代表将高8位假如是11111111变成1111111100000000 再加上低八位假如11111111 就变成16个1了  int写在msb这里可能是将的到的16个1变成int形的意思 而不是单独将msb转换成int
回复

使用道具 举报

板凳
ID:213173 发表于 2020-5-24 13:53 | 只看该作者
为什么要将高8位+低8位转换成int型数据?是因为其数据结构是x000 xxxx xxxx xxxx,最高位表示+/-,次3位为0,低12位为有效数,除以16(乘以0.0625)就得到摄氏温度值。
回复

使用道具 举报

地板
ID:282850 发表于 2020-5-29 15:27 | 只看该作者
给你改一下,节约一个char,看懂就明白了:
bit Get18B20Temp(int *temp)
{
    bit ack;
        uchar LSB;   //16bit温度值的低字节
        ack = Get18B20Ack();      //执行总线复位,并获取18B20应答
        if(ack == 0)              //如18B20正确应答,则读取温度值
        {
        Write18B20(0xCC);       //跳过ROM操作
                Write18B20(0xBE);       //发送读命令
                LSB = Read18B20();      //读温度值的低字节
                *temp= Read18B20();      //读温度值的高字节
                   *temp<<=8;
                *temp += LSB;    //合成为16bit整型数

或者不改, *temp = ((int)MSB << 8) + LSB;
执行步骤解释:
((int)MSB ------0000 0000 mmmm mmmm
<< 8  ----------mmmm mmmm 0000 0000,如没有上步则为 0000 0000,mmmm mmmm全没了
+ LSB----------mmmm mmmm LLLL LLLL
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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