单片机字符搞蒙了求解答,谢谢了

[复制链接]
 楼主| baochen123456 发表于 2017-3-27 09:32 | 显示全部楼层 |阅读模式
小弟初学单片机,求帮忙解答小弟的疑问,谢谢了。
        int  temp = 0;
        uchar tmh, tml;
        Ds18b20ChangTemp();               
        Ds18b20ReadTempCom();                       
        tml = Ds18b20ReadByte();        //读取低八位
        tmh = Ds18b20ReadByte();        //读取高八位       
        temp = tmh;
        temp <<= 8;                          //向左移八位
        temp |= tml;
        return temp;

我把第一行的int  改成char了,不说int是16位的,char是八位的吗?为什么char还可以装下16位的?我用单片机跑程序没有问题。
xtajmhfhn 发表于 2017-3-27 09:54 | 显示全部楼层
如果把int类型修改成char类型,temp <<= 8;//向左移八位,那temp变量的值为0,最后temp变量值等于tml。之所以程序跑起来正常,应该和你现在室内的温度有关系,你现在室内的温度应该不超度20度是不是?
mcu5i51 发表于 2017-3-27 10:23 | 显示全部楼层
因为temp是int的
 楼主| baochen123456 发表于 2017-3-27 10:26 | 显示全部楼层
xtajmhfhn 发表于 2017-3-27 09:54
如果把int类型修改成char类型,temp

您好谢谢了,温度可以跑过20度,但是你的回答确实给我了一个思路,谢谢了
 楼主| baochen123456 发表于 2017-3-27 10:29 | 显示全部楼层

int16这个我清楚,但是我把他改成了char,char 是8的,谢谢你的回答,我现在在考虑,一楼的说法,我觉得他说的有道理
xtajmhfhn 发表于 2017-3-27 10:33 | 显示全部楼层
@baochen123456 ,拿杯开水显示温度应该就不正常了!
 楼主| baochen123456 发表于 2017-3-27 10:37 | 显示全部楼层
xtajmhfhn 发表于 2017-3-27 10:33
@baochen123456 ,拿杯开水显示温度应该就不正常了!

是的,我刚才把高把位还有移位都给注释掉了,和之前一样,说明高八位暂时没有用到,谢谢您的解答,麻烦了。
@若水 发表于 2017-3-27 13:54 | 显示全部楼层
学习了
laocuo1142 发表于 2017-3-27 16:42 | 显示全部楼层
int变char相当于只取了低8位,因为你的温度比较低,所以没问题,超过FF就有问题了
山东电子小菜鸟 发表于 2017-3-27 23:36 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

0

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