完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这段关于温度传感器的代码不太懂?哪位大侠可以帮忙解释一下?(关于温度传感器读取温度部分)
int Ds18b20ReadTemp() { int temp = 0; uchar tmh, tml; Ds18b20ChangTemp(); //先写入转换命令 Ds18b20ReadTempCom(); //然后等待转换完后发送读取温度命令 tml = Ds18b20ReadByte(); //读取温度值共16位,先读低字节 tmh = Ds18b20ReadByte(); //再读高字节 temp = tmh; temp <<= 8; temp |= tml; return temp; } |
|
相关推荐
8个回答
|
|
到底是哪边不懂呢》
|
|
|
|
这个是在进行数据整合,因为读取顺序么得原因才这样处理的,可以看看数据手册,要是对你有帮助别忘了。给积分哟
|
|
|
|
首先 Ds18b20ChangTemp(); 是另外一个函数 里面应该包括先初始化 然后发送0x55还是啥的指令,这些都是温度传感器检测温度必须走的过程。
Ds18b20ReadTempCom(); 这个也是先初始化 ,然后发送0x4c还是啥的。忘记具体指令了。。 之后温度传感器会发送 一个16位的 温度值 先发送低8位 后发送高8位 tml = Ds18b20ReadByte(); //读取温度值共16位,先读低字节 tmh = Ds18b20ReadByte(); 这两个就是了 然后将高八位的tmh左移8位 然后并上低八位 就相当于温度值的16位都出来了 然后返回给其他函数做处理 注意 高八位的 4-7位是符号位 0000表示正的温度 1111 表示负的温度 负的温度的话 就需要去补码 去百度看看资料 很多的 其实不难的。 因为刚做了一个DS18B20的程序,希望能帮到你 |
|
|
|
百度一下,百度百科就說,很具體,學習不要一有問題就到處部,先自己找找答案
|
|
|
|
temp = tmh; temp <<= 8; temp |= tml; 这句话不懂,为什么要temp左移八位 |
|
|
|
环形使者_绝 发表于 2016-6-21 11:13 然后并上低八位 ? 并运算是什么意思 和或运算一样么? |
|
|
|
就是或运算啊,temp是一个16位的数,最开始低8位是tmh,然后左移8位,把tmh放在temp的高8位,然后低8位和tml进行或,由于0和任何数或,是其本身,所以低8位就变成tml了
|
|
|
|
米兰霸气 发表于 2016-6-24 20:48 哦哦 明白了 thanks |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
460 浏览 0 评论
【敏矽微ME32G070开发板免费体验】+ADC测试与LED点亮
418 浏览 0 评论
飞凌嵌入式-ELFBOARD ELF 2的硬件知识分享--核心板
352 浏览 0 评论
【敏矽微ME32G070开发板免费体验】\\+Lora通信终端产品开发项目
514 浏览 0 评论
1576 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11970 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 13:23 , Processed in 0.675360 second(s), Total 87, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号