资源描述:
《DS18B20温度传感器中文资料》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、AVR单片机学习笔记--基于慧净HJ-2GAVR开发板第14章DS18B2014.1概念.这一章是关于DS18B20实时温度传感器。相信有学过c51单片机的朋友都对他不陌生吧。我恰恰也学习过,不过当初并没有掌握好。学习板搭配的DS18B20,一般上给人的感觉有点像三极管,其实DS18B20的内部结构与原理也挺猥琐的,但是我们使用也是为了实现温度传感的功能而已,基本上不会介绍过度深入。14.2DS18B20介绍DS18B20有三只引脚,VCC,DQ,和VDD。而HJ-2G板子上,采用了外部供电的链接方式,而总线必须链接上拉电阻。这一目的告诉我们,一线总线在空置状态时,
2、都是一直处于高电平。DS18B20的内部有64位的ROM单元,和9字节的暂存器单元。64位ROM包含了,DS18B20唯一的序列号(唯一的名字)。AVR单片机学习笔记--基于慧净HJ-2GAVR开发板以上是内部9个字节的暂存单元(包括EEPROM)。字节0~1是转换好的温度。字节2~3是用户用来设置最高报警和最低报警值。这个可以用软件来实现。字节4是用来配置转换精度,9~12位。字节5~8就不用看了。14.3字节0~1:转换好的温度DS18B20的温度操作是使用16位,也就是说分辨率是0.0625。BIT15~BIT11是符号位,为了就是表示转换的值是正数还是负数。
3、看看数据手册给出的例子吧。AVR单片机学习笔记--基于慧净HJ-2GAVR开发板要求出正数的十进制值,必须将读取到的LSB字节,MSB字节进行整合处理,然后乘以0.0625即可。Eg:假设从,字节0读取到0xD0赋值于Temp1,而字节1读取到0x07赋值于Temp2,然后求出十进制值。unsignedintTemp1,Temp2,Temperature;Temp1=0xD0;//低八位Temp2=0x07;//高八位Temperature=((Temp2<<8)
4、Temp1)*0.0625;//又或者Temperature=(Temp1+Temp2*256)*0.
5、0625;//Temperature=125在这里我们遇见了一个问题,就是如何求出负数的值呢?很遗憾的,单片机不像人脑那样会心算,我们必须判断BIT11~15是否是1,然后人为置一负数标志。Eg.假设从,字节0读取到0x90赋值于Temp1,而字节1读取到0xFC赋值于Temp2,然后求出该值是不是负数,和转换成十进制值。unsignedintTemp1,Temp2,Temperature;unsignedcharMinus_Flag=0;Temp1=0x90;//低八位Temp2=0xFC;//高八位//Temperature=(Temp1+Temp2*256)*
6、0.0625;//Temperature=64656//很明显不是我们想要的答案if(Temp2&0xFC)//判断符号位是否为1{Minus_Flag=1;//负数标志置一Temperature=((Temp2<<8)
7、Temp1)//高八位第八位进行整合Temperature=((~Temperature)+1);//求反,补一Temperature*=0.0625;//求出十进制}//Temperature=55;else{Minus_Flag=0;Temperature=((Temp2<<8)
8、Temp1)*0.0625;}那个人为的负数标志,是真的很有用处
9、的。这个要看你你自己的想象力了,如何去利用它。AVR单片机学习笔记--基于慧净HJ-2GAVR开发板继续继续,以上我们是求出没有小数点的正数。如果我要求出小数点的值的话,那么我应该这样做。Eg:假设从,字节0读取到0xA2赋值于Temp1,而字节1读取到0x00赋值于Temp2,然后求出十进制值,要求连同小数点也求出。unsignedintTemp1,Temp2,Temperature;Temp1=0x90;//低八位Temp2=0xFC;//高八位//实际值为10.125//Temperature=((Temp2<<8)
10、Temp1)*0.0625;//10,无小
11、数点Temperature=((Temp2<<8)
12、Temp1)*(0.0625*10);//101,一位小数点//Temperature=((Temp2<<8)
13、Temp1)*(0.0625*100);//1012,二位小数点如以上的例题,我们可以先将0.0625乘以10,然后再乘以整合后的Temperature变量,就可以求出后面一个小数点的值(求出更多的小数点,方法都是以此类推)。得出的结果是101,然后再利用简单的算法,求出每一位的值。unsingedcharTen,One,Dot1Ten=Temperature/100;//1One=Temperatu