最全面DS18B20中文资料.pdf

所需积分/C币:9 2013-06-09 15:25:30 341KB PDF
收藏 收藏
举报

最全面DS18B20中文资料,该资料详细说明ds18b20的使用方法,无论你使用嵌入式开发还是单片机开发。学习使用ds18b20都是一个很不错的选择。
AVR单片机学习笔记-基于慧净HJ-2GAVR开发板 要求出正数的十进制值,必须将读取到的LSB字节,MSB字节进行整合处理,然后乘 以0.0625即可。 Eg:假设从,字节0读取到0xD0赋值于 TempI,而字节1读取到0x07赋值于Tenp2, 然后求出十进制值。 unsigned int Templ, Temp2, Temperature T emp 1=0xD0 ∥低八位 Temp2=0x07 ∥高八位 Temperature=((Temp2<<8) Temp1)*0.0625 ∥又或者 Temperature -(Templ Temp2*256)*0.0625 //Temperature=-125 在这里我们遇见了一个问题,就是如何求出负数的值呢?很遗憾的,单片机不像人脑那 样会心算,我们必须判断BT1~15是否是1,然后人为置一负数标志。 Eg.假设从,字节0读取到0x90赋值于 TempI,而字节1读取到0xFC赋值于Temp2, 然后求出该值是不是负数,和转换成十进制值。 unsigned int Templ, Temp2, Tempcrature unsigned char Minus Flag=0 Temp]=0x90 ∥低八位 Temp2=XFC ∥高八位 //Temperature=(Templ+ Temp2*256)*0.0625; /Temperature=64656 ∥很明显不是我们想要的答案 f( Temp2&0xFC)∥判断符号位是否为1 Minus Flag=1 ∥负数标志置 Temperature=(Temp2<<8) Temp1) 高八位第八位进行整合 Temperature-((Temperature)+1) ∥求反,补 Temperature =0.0625 ∥求出十进制 TEmperature=55 else Minus flag=o Temperature =((Temp2<<8) Templ)*0.0625 那个人为的负数标志,是真的很有用处的。这个要看你你自己的想象力了,如何去利用它。 AVR单片机学习笔记-基于慧净HJ-2GAVR开发板 继续继续,以上我们是求出没有小数点的正数。如果我要求出小数点的值的话,那么我 应该这样做。 Eg:假设从,字节0读取到0xA2赋值于 TempI,而字节1读取到0x00赋值于Tenp2, 然后求出十进制值,要求连同小数点也求出 unsigned int Templ, Temp2, Temperature Temp1=0x90 ∥低八位 Temp2=0XFC ∥高八位 ∥实际值为10.125 /Temperature=((Temp2<<8) Temp1)*0.0625 10,尤小数点 Temperature -(Temp2<<8) Templ)*(0.0625*10 /101 位小数点 Temperature=(Temp2<8)| Templ)*(0.0625*100);∥1012,二位小数点 如以上的例题,我们可以先将0.0625乘以10,然后再乘以整合后的 Temperature变量, 就可以求出后面一个小数点的值(求出更多的小数点,方法都是以此类推)。得出的结 果是101,然后再利用简单的算法,求出每一位的值。 unsinged char Ten. One, Dot TenTemperaturc/100 /1 OneTemperature/10 Dot1=%10 求出负数的思路也一样,只不过多出人为置一负数标志,求反补一的动作而已。自己发 挥想象力吧。 144字节23:TH和TL配置 ⅢH与就是所谓的温度最高界限,和温度最低界限的配置。其实这些可以使用软件 来试验,所以就无视了。 145字节4:配置寄存器 配置寄存器图8 bit7 bit 6 bit 5 bit 4 bit 2 bit 1 bit o 0 R RO BIT7出厂的时候就已经设置为0,川户不建议去更改。而R1与R0位组合了四个不同 的转换精度,00为9位转换精度而转换时间是93.75ms,01为10位转换精度而转换时 间是187.5ms,10为11位转换精度而转换时间是375ns,ll为12位转换精度而转换时 间是750ms(默认)。该寄存器还是留默认的好,毕竟转换精度表示了转换的质量。 AVR单片机学习笔记-基于慧净HJ-2GAVR开发板 146字节57,8:保留位,CRC 无视,无视吧。 147单片机访问DS18B20 DS18B20一般都是充当从机的角色,而单片机就是主机。单片机通过一线总线访问 DSl8B20的话,需要经过以下几个步骤: 1DS18B20复位。 2执行ROM指令 3执行DS18B20功能指令(RAM指令)。 补充一下。一般上我们都是使用单点,也就是说单线总线上仅有一个DS18B20存在而 口。所以我们无需刻意读取ROM里边的序列号来,然后匹配那个DS18B20?而是更 直接的,跳过ROM指令,然后直接执行DSl8B20功能指令。 DS18B20复位,在某种意义上就是一次访问DS18B20的开始,或者可说成是开始信号。 ROM指令,也就是访问,搜索,匹配,DS18B20个别的64位序列号的动作。在单点情 况下,可以直接跳过ROM指令。而跳过ROM指令的字节是0xCC。 DS18B20功能指令有很多种,我就不一一的介绍了,数据手册里有更详细的介绍。这里 仅列出比较常用的几个DS18B20功能指令 0x4:开始转换温度。转换好的温度会储存到暂存器字节0和1 0xEE:读暂存指令。读暂存指令,会从暂存器0到9,一个一个字节读取,如果要停止 的话,必须写下DSl8B20复位 148DS18B20复位 控制器复位冲 控制R 400 us minimum 480 us minimum 四1寺在冲 DS18B20 等560 60-240Es 单总 总线控他1电干 ■8B世巴 电阻上拉 DS18B20的复位时序如下 1.单片机拉低总线480us~950us,然后释放总线(拉高电平)。 2这时DS18B20会拉低信号,大约60~240us表示应答 3DS18B20拉低电平的60-240us之间,单片机读取总线的电平,如果是低电平,那么表示复位成功。 4DS18B20拉低电平60~240us之后,会释放总线。 AVR单片机学习笔记-基于慧净HJ-2GAVR开发板 C语言代码 /DS1302复位函数 void Ds 1302 Reset DDRAFBITDQ /DQ为输出状态 PORTA&→BIT(DQ 输出低电平 Delay lus(500) 延迟500微妙 PORTA BITDQ) 示范总线 Delay lus(60); /延退60微妙 DDRA&→~BIT(DQ) /DQ位输出状态 while(pina&BITDQ)) ∥等待从机DS18B20应答(低电平有效) while(!(PNA&BIT(DQ);∥等待从机DSl8B20释放总线 149DS18B20读写逻辑0与1 STRT bF乱 惜写厚 控制器写时序 T s≤T“≤10 单应翅 总親控怒低电平 18=可 MIN TYr a 匹1B2低 1p++1p+-一 +1m+→电上拉 DSl8B20写逻辑0的步骤如下: DSl8B20写逻辑1的步骤如下: 1单片机拉低电平大约10~15us, 1.单片机拉低电平大约10-15us, 2单片机持续拉低电平大约20~45us的时间。 2单片机拉高电平大约20-45us的时间。 3释放总线 3释放总线 器潮时序 挂籼器读1时序 ≤ L A LS GND 总親控懶低电平 控+ IE1町E20低地 1 15s 申阳上拉 151s DS18B20读逻辑0的步骤如下 DS18B20读逻辑1的步骤如下: 1在读取的时候单片机拉低电平大约1us 在读取的时候单片机拉低电平大约1us 2单片机释放总线,然后读取总线电平 2.单片机释放总线,然后读取总线电平。 3.这时候DS18B20会拉低电平。 3这时候DS18B20会拉高电平。 4读取电平过后,延迟大约40~45微妙 4读取电平过后,延迟大约40~45微妙 AVR单片机学习笔记-基于慧净HJ-2GAVR开发板 如果要读或者写一个字节,就要重复以上的步骤八次。如以下的C代码,使用for循环,和数据变 量的左移和或运算,实现一个字节读与写 /Dsl8B20写字节函数 void DS 1302 Write(unsigned char Data) unsigned char 1; DDRAFBITODQ) /DQ为输出 for(i=0;i<8;i++) PORTA&→BIT(DQ) 拉低总线 Delay lus(10) 延迟10微妙(最大15微妙) if(Data&0x01)PORTABITDQ) else Porta&--bit(dQ) ay lus 迟40微妙(最大45微妙) PORTAFBIT(DQ /释放总线 clay lus(1) /稍微延迟 Data>>>=1 /DS8B20读字节函数 unsigned char Ds 1302 Reado igned char i,T for(=0;i<8;i++) Temp>>=1; 数据右移 DDRABIT(Q; /DQ为输出状态 PORTA&=BIT(Q); /拉低总线,启动输入 PORTAHBITQ) 释放总线 DDRA&=BII(①DQ); /DQ为输入状念 if(Pina&BItdQ)) Temp-0x80 Ius(45); /延迟45微妙(最大45微妙) 就是这么建档而已,不过这里有一个注意点,就是 Delay luso;函数延迟的时间,必须模拟非常准 确,因为单线总线对时序的要求敏感点。 AVR单片机学习笔记-基于慧净H-2GAVR开发板 1410简单归纳 实验廾始之前,简单的归纳一些重点。单线总线高电平为闲置状态。单片机访问DS18B20 必须遵守,DS18B20复位->执行ROM指令-→>执行DS18B20功能指令。而在单点上 可以直接跳过ROM指令。DS18B20的转换精度默认为12位,而分辨率是0.0625。 DSl8B20温度读取函数参考步骤: DS18B20开始转换 1DS18B20复位。 2写入跳过ROM的字节命令,0xCC。 3.写入开始转换的功能命令,0x44。 4延迟大约750900毫秒 DSl8B20读暂存数据: 1DS18B20复位。 2写入跳过ROM的字节命令,0XCC。 3.写入读暂存的功能命令,0xee。 4读入第0个字节 LS Byte,转换结果的低八位。 5读入第1个字节 MS Byte,转换结果的高八位。 6DS18B20复位,表小读取暂存结束。 数据求出十进制: 1.整合 LS Byte和 MS Byte的数据 2判断是否为负数(可选) 3求得十进制值。正数乘以0.0625,一位小数点乘以0.625,二位小数点乘以6.25。 4.十进制的“个位”求出。 1411实验:利用DS18B20实现单点温度测量,结果输出在数码管。 PA3 VCC3 PA 36 WE74 18R20 DO 3518B20 GND 吴 PA5 34 FM 6 PA6 22DA可 DSl8B20接口 ATMega16对应引脚 实验的要求是以DSl8B20默认的配置,亦即12位的转换精度。然而输出的结果为两个 小数点xxx。H-2G板子上设计得DS18B20的接口和典型,没有什么特别需要注意的。 而DSl8B20DQ引脚对应的链接是PA5。 AVR单片机学习笔记-基于慧净HJ-2GAVR开发板 源码: //1400-DS18B20 /简单的驱动程式 // akuei208-01-10 #include iom 6v. h #include "macros. h #include "lEd.h #define DQ PA5 /妙级延迟函数 void Delay lus(unsigned int x) unsigned int 1, x-x*5/4: for(i=0;1<x;i++); /DS1302复位函数 void Ds 1302 Resto DDRAFBITDQ) /DQ为输出状态 PORTA&-bitdQ) 输出低电平 Dclay lus(500); /延迟500微妙 PORTAFBITOQ: /小范总线 Delay lus(60); /延退60微妙 ddRA&=-bitQ) ①Q位输出状态 hile(PINA&BIT(DQ);等待从机DS18B20应答(低电平有效) whie(PINA&BIT(DQ));/等待从机DS18B20释放总线 /DS1302写字节函数 void Ds 1302 Write(uns igned char Data) unsigned char l' DDRAFBITDQ) /DQ为输出 for(i=0;i<8;i++) PORTA&- BItoQ): /拉低总线 Delay lus(10) 延迟10微妙(最大15微妙) if(Data&0x0 1)PORTABITDQ); else porta&→BIT(DQ Delay lus(40) ∥延迟40微妙(最大45微妙) AVR单片机学习笔记-基于慧净HJ-2GAVR开发板 PORTAF(DQ) /释放总线 Delay lus(1); 稍微延迟 Data>>1 /DS1302读字节函数 unsigned char ds 1302 Reado unsign d char ite for(i=0;i<8;i++) /数据右移 DDRAFBITDQ) /DQ为输出状态 PORTA&=BiT(dQ) /拉低总线,启动输入 PORTAFBITQ) 释放总线 ddra&-BItoQ) /DQ为输入状态 if(PinA&BITDQ)) Temp=0x80 Delay lus(45) /延迟45微妙(最大45微妙 eturn tem /读温度函数 unsigned int Read Temperature unsigned int Temp l, Temp2 DS 1302 Reset; /DS1302复位 DS 1302 Write(OxCC) l过ROM DS 1302 Write(0x44) 温度转换 DS 1302 Reset /DS1302复位 DS 1302 Write(0xCC) /跳过ROM DS 1302 Write(Oxbe); /读取RAM Temp I=DS1302 Reado;/读低八位, LS Byte,RAMO Temp2=DS1302 Reado;∥读高八位, MS Byte,RAMl DS 1302 Reset /DS1302复位,表示读取结束 return(Temp2<<8) Temp I)*6.,25);/0.0625=x,0.625=x.x.6.25=xx.x

...展开详情
试读 14P 最全面DS18B20中文资料.pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    一个资源只可评论一次,评论内容不能少于5个字
    royluoyi 下载后不能正常使用.
    2016-12-05
    回复
    mqujluccst 很好的资料,感谢作者分享
    2013-11-30
    回复
    zhaiguanjie7 还可以,能看清楚
    2013-06-21
    回复
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    最全面DS18B20中文资料.pdf 9积分/C币 立即下载
    1/14
    最全面DS18B20中文资料.pdf第1页
    最全面DS18B20中文资料.pdf第2页
    最全面DS18B20中文资料.pdf第3页
    最全面DS18B20中文资料.pdf第4页
    最全面DS18B20中文资料.pdf第5页

    试读已结束,剩余9页未读...

    9积分/C币 立即下载 >