最全面DS18B20中文资料_第1页
最全面DS18B20中文资料_第2页
最全面DS18B20中文资料_第3页
最全面DS18B20中文资料_第4页
最全面DS18B20中文资料_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AVRAVR单片机学习笔记-基于慧净HJ-2GAVR开发板第14章DS18B2014.1念.这一章是关于DS18B20实时温度传感器。相信有学过c51单片机的朋友都对他不陌生吧。我恰恰也学习过,不过当初并没有掌握好。学习板搭配的DS18B20,一般上给人的感觉有点像三极管,其实DS18B20的内部结构与原理也挺猥琐的,但是我们使用也是为了实现温度传感的功能而已,基本上不会介绍过度深入。14.2DS18B20介!5星SVIlYa5星SVIlYaAVRAVR单片机学习笔记-基于慧净HJ-2GAVR开发板AVRAVR单片机学习笔记-基于慧净HJ-2GAVR开发板DS18B20有三只引脚,VCC,DQ

2、,和VDD。皿eg百、皿eg百、AVRAVR单片机学习笔记-基于慧净HJ-2GAVR开发板AVRAVR单片机学习笔记-基于慧净HJ-2GAVR开发板而HJ2G板子上,采用了外部供电的链接方式,而总线必须链接上拉电阻。这一目的告诉我们,一线总线在空置状态时,都是一直处于高电平。DS18B20DS18B20的内部有64位的ROM单元,和9字节的暂存器单元。DS18B20DS18B20的内部有64位的ROM单元,和9字节的暂存器单元。64位ROM包含了,DS18B20唯一的序列号(唯一的名字)。AVRAVR单片机学习笔记-基于慧净HJ-2GAVR开发板byteO混度LSB(50hbyteO混度LSB

3、(50h)l|byte1温度MSB(05h)JJbyte2th用户孚节1*byte3TL用户字节触byte4配置寄存器齐byte5保帘位(FFh)byTe6.保留位:och)byte?保出也(1010byTeSCRC*EEPROM以上是内部9个字节的暂存单元(包括EEPROM)字节01是转换好的温度。字节23是用户用来设置最高报警和最低报警值。这个可以用软件来实现。字节4是用来配置转换精度,912位。字节58就不用看了。14.3卅卜1:的舷温度寄存饕格式图2bit7bit6bit5bit4bit3bLt2bat1bit0LSBvte2;J2。2中232biH5bit14bit13bnl2bal

4、lbit10bat9bit8MSBvtessSsS2d2$24DS18B20的温度操作是使用16位,也就是说分辨率是0.0625oBIT15BIT11是符号位,为了就是表示转换的值是正数还是负数。看看数据手册给出的例子吧。温度/数据关系表2温度9数据输出(二进制)数据输出(十六进制)*12501111101000007C0h*850101010100000550h4-25.062500000001100100010191b*10.12500001010001000A2h0500000000000010000008h00000000000000000OOOOh0.5111111111111100

5、0FFF8h-10.1251111111101011110FF5B1-25.06251111111001101111FKGh551111110010010000FC90hAVRAVR单片机学习笔记-基于慧净HJ-2GAVR开发板AVR单片机学习笔记-基于慧净HJ-2GAVR开发板要求出正数的十进制值,必须将读取到的LSB字节,MSB字节进行整合处理,然后乘以0.0625即可。Eg:假设从,字节0读取到OxDO赋值于Tempi,而字节1读取到0 x07赋值于Temp2,然后求出十进制值。unsignedintTempl,Temp2,Temperature;Temp1=0 xD0;/低八位Temp

6、2=0 x07;/高八位/Temperature=125Temperature=(Temp28)|Tempi)*0.0625;/又或者/Temperature=125Temperature=(Tempi+Temp2*256)*0.0625;在这里我们遇见了一个问题,就是如何求出负数的值呢?很遗憾的,单片机不像人脑那样会心算,我们必须判断EIT1115是否是1,然后人为置一负数标志。Eg.假设从,字节0读取到0 x90赋值于Tempi,而字节1读取到OxFC赋值于Temp2,然后求出该值是不是负数,和转换成十进制值。unsignedintTempl,Temp2,Temperature;unsig

7、nedcharMiiius_Flag=O;Temp1=0 x90;/低八位Temp2=0 xFC;高八位/Temperature=64656/很明显不是我们想要的答案/负数标志置一高八位第八位进行整合/求反,补一求出十进制/Temperature=64656/很明显不是我们想要的答案/负数标志置一高八位第八位进行整合/求反,补一求出十进制/Temperature=55;if(Temp2&0 xFC)判断符号位是否为1Minus_Flag=l;Temperature=(Temp28)|Tempi)Temperature=(-Temperature)+1);Temperature*=0.0625;

8、elseMinus_Flag=O;Temperatiue=(Tenip28)|Tempi)*0.0625;那个人为的负数标志,是真的很有用处的。这个要看你你自己的想彖力了,如何去利用它。AVRAVR单片机学习笔记-基于慧净HJ-2GAVR开发板继续继续,以上我们是求出没有小数点的正数。如果我要求出小数点的值的话,那么我应该这样做。Eg:假设从,字节0读取到0 xA2赋值于Tempi,而字节1读取到0 x00赋值于Temp2.然后求出十进制值,要求连同小数点也求出。unsignedintTemp1,Temp2,Temperature;Temp1=0 x90;/低八位实际值为10.125/io,实

9、际值为10.125/io,无小数点/101,一位小数点Temperature=(Temp28)|Tempi)*0.0625;Temperature=(Temp28)|Tempi)*(0.0625*10);Temperature=(Temp28)|Tempi)*(0.0625*100);/1012,二位小数点如以上的例题,我们可以先将0.0625乘以10,然后再乘以整合后的Temperature变量,就可以求出后面一个小数点的值(求出更多的小数点,方法都是以此类推)。得出的结果是101,然后再利用简单的算法,求出每一位的值。unsiiigedcharTen,One,Dot1Ten=Tempera

10、tiire/100;/IOne=Temperatiire%100/10;/ODotl=%10;/I求出负数的思路也一样,只不过多出人为置一负数标志,求反补一的动作而已。自己发挥想象力吧。14.4字节2V:TH和TL配置TH与TL就是所谓的温度最高界限,和温度最低界限的配置。其实这些可以使用软件来试验,所以就无视了。14.5字节4:配置寄存器配置寄存器图8bit7bn6bn5bn4bii3bit2bn1bn00R1RO11111BIT7出厂的时候就已经设置为0,用户不建议去更改。而R1与R0位组合了四个不同的转换精度,00为9位转换精度而转换时间是93.75ms,01为10位转换精度而转换时间是

11、187.5ms,10为11位转换精度而转换时间是375ms,11为12位转换精度而转换时间是750ms(默认)。该寄存器还是留默认的好,毕竟转换精度表示了转换的质量。AVR单片机学习笔记-基于慧净HJ-2GAVR开发板14.6字节57,8:保留位,CRC无视,无视吧。14.7单片机访问DS18B20DS18B20-般都是充当从机的角色,而单片机就是主机。单片机通过一线总线访问DS18B20的话,需要经过以下几个步骤:DS18B20复位。执行ROM指令。执行DS18B20功能指令(RAM指令)。补充一下。一般上我们都是使用单点,也就是说单线总线上仅有一个DS18B20存在而已。所以我们无需刻意读

12、取ROM里边的序列号来,然后匹配那个DS18B20?而是更直接的,跳过ROM指令,然后直接执行DS18B20功能指令。DS18B20复位,在某种意义上就是一次访问DS18B20的开始,或者可说成是开始信号。ROM指令,也就是访问,搜索,匹配,DS18B20个别的64位序列号的动作。在单点情况下,可以直接跳过ROM指令。而跳过ROM指令的字节是OxCCoDS18B20功能指令有很多种,我就不一一的介绍了,数据手册里有更详细的介绍。这里仅列出比较常用的几个DS18B20功能指令。0 x44:开始转换温度。转换好的温度会储存到暂存器字节0和1。OxEE:读暂存指令。读暂存指令,会从暂存器0到9,一个

13、一个字节读取,如果要停止的话,必须写下DS18B20复位。14.8DS18B20复位电PS14.8DS18B20复位电PS上拉DS18B20的复位时序如下:1.单片机拉低总线480us950us,然后释放总线(拉岛电平)。这时DS18B20会拉低信号,大约60240us表示应答。DS18B20拉低电平的60240us之间,单片机读取总线的电平,如果是低电平,那么表示复位成功。DS18B20拉低电平60240us之后,会释放总线。AVR单片机学习笔记-基于慧净HJ-2GAVR开发板C语言代码:/DS1302复位函数voidDS1302_Reset()DDRA|=BIT(DQ);PORTA&=-B

14、IT(DQ);Delayus(500);PORTA(=BIT(DQ);Delay_lus(60);DDRA&=-BIT(DQ);while(PINA&BIT(DQ);while(!(PINA&BIT(DQ);DQ为输出状态输出低电平延迟500微妙示范总线延迟60微妙DQ位输出状态等待从机DS18B20应答(低电平有效)DQ为输出状态输出低电平延迟500微妙示范总线延迟60微妙DQ位输出状态等待从机DS18B20应答(低电平有效)等待从机DS18B20释放总线慝峨揑帘翩吧电平IE10B2Olft电平目阻上拉DS18B20写逻辑0的步骤如下:L单片机拉低电平大约1015us,。2单片机持续拉低电平

15、大约2045us的时间。释放总线DS18B20写逻辑1的步骤如下:1单片机拉低电平大约1015US,。2单片机拉高电平大约20M5us的时间。释放总线慝峨揑帘翩吧电平IE10B2Olft电平目阻上拉DS18B20读逻辑0的步骤如下:L在读取的时候单片机拉低电平大约lus2单片机释放总线,然后读取总线电平。3-这时候DS18B20会拉低电平。读取电平过后,延迟大约4075微妙DS18B20读逻辑1的步骤如下:1.在读取的时候单片机拉低电平大约1US2单片机释放总线,然后读取总线电平。这时候DS18B20会拉高电平。读取电平过后,延迟大约4345微妙AVR单片机学习笔记-基于慧净HJ-2GAVR开

16、发板如果要读或者写一个字节,就要重复以上的步骤八次。如以下的C代码,使用for循环,和数据变量的左移和或运算,实现一个字节读与写。/DS18B20写字节函数voidDS1302_Wnte(unsignedcharData)unsignedchari;DDRA|=BIT(DQ);/DQ为输出for(i=0;i8;i+)PORTA&=-BIT(DQ);拉低总线Delay_lus(10);延迟10微妙(最大15微妙)if(Data&0 x01)PORTA|=BIT(DQ);elsePORTA&=-BIT(DQ);if(Data&0 x01)PORTA|=BIT(DQ);elsePORTA&=-BIT

17、(DQ);Delayus(40);PORTA|=BIT(DQ);Delayus(l);Data=l;延迟40微妙(最大45微妙)释放总线稍微延迟读字节函数aiDS13O2_ReadOunsignedchart,Temp;fbii=0;i8;i+)数据右移Temp=l;数据右移DDRA|=BIT(DQ);PORTA&=-BIT(DQ);DDRA|=BIT(DQ);PORTA&=-BIT(DQ);PORTA|=BIT(DQ);DDRA&BIT(DQ);DQ为输出状态拉低总线,启动输入释放总线/DQ为输入状态if(PINA&BIT(DQ)Temp|=0 x80;Delay_lus(45);延迟45微

18、妙(最大45微妙)returnTemp;就是这么建档而已,不过这里有一个注意点,就是Delay_lus();函数延迟的时间,必须模拟非常准确,因为单线总线对时序的要求敏感点。AVR单片机学习笔记-基于慧净HJ-2GAVR开发板14.10筒单归纳实验开始Z前,简单的归纳一些重点。单线总线高电平为闲置状态。单片机访问DS18B20必须遵守,DS18B20复位“执行ROM指令一执行DS18B20功能指令。而在单点上,可以直接跳过ROM指令。DS18B20的转换精度默认为12位,而分辨率是0.0625。DS18B20温度读取函数参考步骤:DS18B20开始转换:DS18B20复位。写入跳过ROM的字节

19、命令,OxCC。写入开始转换的功能命令,0 x44。延迟大约750900毫秒DS18B20读暂存数据:DS18B20复位。写入跳过ROM的字节命令,OxCC。写入读暂存的功能命令,Oxee。读入第0个字节LSByte,转换结果的低八位。读入第1个字节MSByte,转换结果的高八位。DS18B20复位,表示读取暂存结束。数据求出十进制:整合LSByte和MSByte的数据判断是否为正负数(可选)求得十进制值。正数乘以0.0625,一位小数点乘以0.625,二位小数点乘以6.25。十进制的“个位”求出。14.11实验:利用DS18B20实现单点温度测量,结果输出出段码管.vcc345AAAPAOF

20、01一.J/LVUvcc345AAAPAOF01一.J/LVU36WE3518E234FM”DADS1SB20接口ATMega16DS1SB20接口实验的要求是以DS18B20默认的配置,亦即12位的转换精度。然而输出的结果为两个小数点xx.xx。HJ-2G板子上设计得DS18B20的接口和典型,没有什么特别需要注意的:而DS18B20DQ引脚对应的链接是PA5。AVRAVR单片机学习笔记-基于慧净HJ2GAVR开发板AVRAVR单片机学习笔记-基于慧净HJ2GAVR开发板源码:/1400-DS18B20.C/简单的驱动程式/akiiei208-01-10#includenioml6v.hH#

21、mchideHmacroshH#iiichideHLED7.hH#defineDQPA5微妙级延迟函数voidDelay_lus(unsignednitx)unsignedmti;x=x*5/4;foiti=0;ix;i+);/DS1302复位函数voidDS1302_Reset()DQ为输出状态DQ为输出状态输出低电平延迟500微妙示范总线延迟60微妙DQ位输出状态等待从机DS18B20应答(低电平有效)等待从机DS18B20释放总线Delayus(500);PORTA(=BIT(DQ);Delay_lus(60);DDRA&=-BIT(DQ);while(PINA&BIT(DQ);whil

22、e(!(PINA&BIT(DQ);/DS1302写字节函数voidDS1302_Wnte(unsignedcharData)unsignedchari;DDRA|=BIT(DQ);/DQ为输出for(i=0;i8;i+)PORTA&=BIT(DQ);拉低总线Delay_lus(10);延迟10微妙(最大15微妙)if(Data&0 x01)PORTA|=BIT(DQ);elsePORTA&=-BIT(DQ);Delay_lus(40);延迟40微妙(最大45微妙)AVRAVR单片机学习笔记-基于慧净HJ2GAVR开发板AVRAVR单片机学习笔记-基于慧净HJ2GAVR开发板AVRAVR单片机学

23、习笔记-基于慧净HJ2GAVR开发板AVRAVR单片机学习笔记-基于慧净HJ2GAVR开发板PORTA(=BIT(DQ);Delayus(l);Data=l;释放总线稍微延迟/DS1302读字节函数unsignedcharDS13O2_ReadOunsignedchariTemp;for(i=0;i);Delay调用读取温度函数显示温度稍微延迟LED7.li的头文件/LED7.H/数码管显示/数组声明并定义在存储数据区code09#pragmadata:codeunsignedcharNumber=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,

24、0 x7f,0 x6f,0 x00,;unsignedcharconstNumber_Dot=0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef,0 x00;延迟函数voidDelay(unsignedlongx)while(x);/数码管显示函数voidNumber_Show(imsignedintNum)unsignedcharTen,One,Dot1,Dot2;TeiNum/1000;取十位One=Num%1000/100;/取个位Dotl=Nmn%100/10;取点数位Dot2=Nmil%10;取点数位显示十位PORT

25、B=NumberTen;/送模码PORTA|=BIT(PA3);/PA3高电平PORTA&=BIT(PA3);/PA3低电平PORTB=BIT(0);/送位选PORTA|=BIT(PA4);/PA3高电平POR1A&=EIT(PA4);Delay(600);/PA3j氐电平稍微延迟显示个位PORTB=Number_DotOne;送模码PORTA|=BIT(PA3);/PA3高电平PORIA&=BIT(PA3);/PA3低电平PORTB=BIT(1);/送位选PORTA|=BIT(PA4);/PA3高电平PORIA&=BIT(PA4);/PA3氐电平Delay(600);.,稍微延迟显示点数位1PORTB=NumberDot1;送模码PORTA|=BIT(PA3);/PA3高电平PORTA&=BIT(PA3);/PA3低电平PORTB=BIT(2);PORTA|=BIT(PA4);/送位选/PA3高电平PORTA&=BIT(PA4);Delay(600);/PA3低电平稍微延迟/显示点数位2PORTB=NumberDot2;送模码PORTA|=BIT(PA3);/PA3高电平PORTA&=BIT(PA3);/PA3低电平PORTB=BIT(3);PORTA|=BIT(PA4);/送位选/PA3高电平PORTA&=BIT(P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论