17年学习51单片机,学到DS18B20传感器时遇到例程程序中在处理温度数据小数位看到一行代码不理解。
int intT = 0,dect = 0;
intT = temp >> 4; //分离出温度值整数部分
decT = temp & 0xF; //分离出温度值小数部
decT = (decT*10) / 16; //二进制的小数部分转换为 1 位十进制位
要想理解这句代码,需要根据传感器手册中介绍的输出数据格式类型理解。
当数字是 0x0001 的时候,那温度是 0.0625 度。
举个例子很直观。
例如:芯片采集到温度为0.5摄氏度, 则它的寄存器中的值就是 0000 0000 0000 1000 取低四位
decT = temp & 0xF; 则为 0X08
带入公式:decT=(decT*10)/16;
decT=(8*10)/16=5 这就是小数部分的值
为何今天写博客呢?一是好久没写博客了 二是今天看以前的书这段程序看不明白,上网上找答案的过程中看到17年我竟然回答过这个问题的贴子,看后恍然大悟,但也挺惭愧的。今天把这小知识点单独提出来记录自己的学习过程,也希望对此问题有疑问的朋友有所帮助。
这代码的出处是宋雪松老师出的一本书的内容,我觉得是学习单片机含金量很高的书,代码高效,简洁,规范,实际应用开发没问题。大二学完一遍受益良多,在此表示感谢,推荐大家阅读。
2019年11月18日22点16分