欢迎来到天天文库
浏览记录
ID:40819122
大小:118.50 KB
页数:3页
时间:2019-08-08
《单片机测温芯片18B20是一款常用的IC》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单片机测温芯片18B20是一款常用的IC,优势特点不多说,这里主要讨论温度值的处理,尤其是负温度。18B20片内有一个9Byte的SRAM和一个3Byte的EEPROM。如下图:其中我们需要使用的就是SRAM中的前两个字节,这里储存的就是我们要的温度值。这两个字节的结构如下: 我们可以看到,LS(低字节)的高四位和MS(高字节)的低四位共8个字节构成了实际的一个带符号位的字节数据可以表示(-128~127)足够表示18B20的温度范围。MS的高四位为符号为的扩展,当温度值为正时MS高5位(图中S的五位)全为0,温度值为负时全为
2、1。LS的低四位为小数部分,不是要求太高的话可以忽略。我们这里暂不套路小数部分的处理方法。下面我们就来讨论整数部分的数据处理方法。 整数部分我们实际只要高字节的低四位和低字节的高四位。首先通过移位求或后生成一个无符号位的字节。然后判断这个无符号的值是否大于127,如果大于128说明是个负温度需要处理,否则就可以直接返回。18B20的负温度使用补码形式输出,我们只需要对这个字节进行取反加1后就是这个负温度的绝对值,这时候我们需要一个符号标记告诉输出函数这是个负温度需要显示负号即可。下面贴出数据处理部分的代码: ucharre
3、adtemp()//读取温度{ uchartemp=0; uchartmp[2] reset(); writebyte(0xCC);//跳过序列号 writebyte(0x44);//启动温度转换 delayms(1000); reset(); writebyte(0xCC); writebyte(0xBE);//读9个寄存器,前两个为温度 tmp[0]=readbyte(); //低位 tmp[1]=readbyte(); //高位 temp=((tmp[1]<<4)&0xF0)
4、((tmp[0]>>4)&0x0F); i
5、f(temp>127) {temp=~temp+1; } return(temp);}
此文档下载收益归作者所有