dsb详解及程序Word格式文档下载.doc

上传人:b****1 文档编号:13155865 上传时间:2022-10-06 格式:DOC 页数:17 大小:676.50KB
下载 相关 举报
dsb详解及程序Word格式文档下载.doc_第1页
第1页 / 共17页
dsb详解及程序Word格式文档下载.doc_第2页
第2页 / 共17页
dsb详解及程序Word格式文档下载.doc_第3页
第3页 / 共17页
dsb详解及程序Word格式文档下载.doc_第4页
第4页 / 共17页
dsb详解及程序Word格式文档下载.doc_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

dsb详解及程序Word格式文档下载.doc

《dsb详解及程序Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《dsb详解及程序Word格式文档下载.doc(17页珍藏版)》请在冰豆网上搜索。

dsb详解及程序Word格式文档下载.doc

第9字节是前面8个字节的CRC检验值.

配置寄存器的命令内容如下:

R1

R0

1

MSB 

 

LSB

R0和R1是温度值分辨率位,按下表进行配置.默认出厂设置是R1R0=11,即12位.

温度值分辨率配置表

分辨率

最大转换时间(ms)

9bit

93.75(tconv/8)

10bit

183.50(tconv/4)

11bit

375(tconv/2)

12bit

750(tconv)

4种分辨率对应的温度分辨率为0.5℃,0.25℃,0.125℃,0.0625℃(即最低一位代表的温度值)

12位分辨率时的两个温度字节的具体格式如下:

低字节:

2^3

2^2

2^1

2^0

2^-1

2^-2

2^-3

2^-4

高字节:

S

2^6

2^5

2^4

其中高字节前5位都是符号位S,若分辨率低于12位时,相应地使最低为0,如:

当分辨率为10位时,低字节为:

高字节不变....

一些温度与转换后输出的数字参照如下:

温度

数字输出

换成16进制

+125℃

0000011111010000 

07D0H

+85℃

0000010101010000

0550H

+25.0625℃

0000000110010001

0191H

+10.125℃

0000000010100010

00A2H

+0.5℃

0000000000001000

0008H

0℃

0000000000000000

0000H

-0.5℃

1111111111111000

FFF8H

-10.125℃

1111111101011110

FFE5H

-25.0625℃

1111111001101111

FF6FH

-55℃

1111110010010000

FC90H

由上表可看出,当输出是负温度时,使用补码表示,方便计算机运算(若是用C语言,直接将结果赋值给一个int变量即可).

DS18B20的使用方法:

由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。

DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。

该协议定义了几种信号的时序:

初始化时序(dsInit()实现)、读时序(readByte())、写时序(writeByte())。

所有时序都是将主机作为主设备,单总线器件作为从设备。

而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。

数据和命令的传输都是低位在先。

DS18B20与单片机连接电路图:

利用软件模拟DS18B20的单线协议和命令:

主机操作DS18B20必须遵循下面的顺序

1.初始化

单线总线上的所有操作都是从初始化开始的.过程如下:

1)请求:

主机通过拉低单线480us以上,产生复位脉冲,然后释放该线,进入Rx接收模式.主机释放总线时,会产生一个上升沿脉冲.

DQ:

1->

0(480us+)->

2)响应:

DS18B20检测到该上升沿后,延时15~60us,通过拉低总线60~240us来产生应答脉冲.

DQ:

1(15~60us)->

0(60~240us)

3)接收响应:

主机接收到从机的应答脉冲后,说明有单线器件在线.至此,初始化完成.

0

2.ROM操作命令

当主机检测到应答脉冲,便可发起ROM操作命令.共有5类ROM操作命令,如下表

命令类型 

命令字节

功能

ReadRom 

读ROM 

33H

读取激光ROM中的64位,只能用于总线上单个DS18B20器件情况,多挂时会发生数据冲突

MatchRom匹配ROM

55H

此命令后跟64位ROM序列号,寻址多挂总线上的对应DS18B20.只有序列号完全匹配的DS18B20才能响应后面的内存操作命令,其他不匹配的将等待复位脉冲.可用于单挂或多挂两种情况.

SkipRom 

跳过ROM

CCH

可无须提供64位ROM序列号即可运行内存操作命令,只能用于单挂.

SearchRom搜索ROM

F0H

通过一个排除法过程,识别出总线上所有器件的ROM序列号

AlarmSearch告警搜索

ECH

命令流程与SearchRom相同,但DS18B20只有最近的一次温度测量时满足了告警触发条件的,才会响应此命令.

3.内存操作命令

在成功执行ROM操作命令后,才可使用内存操作命令.共有6种内存操作命令:

命令类型

WriteScratchpad

写暂存器

4EH

写暂存器中地址2~地址4的3个字节(TH,TL和配置寄存器)在发起复位脉冲之前,3个字节都必须要写.

ReadScratchpad

读暂存器

BEH

读取暂存器内容,从字节0~一直到字节8,共9个字节,主机可随时发起复位脉冲,停止此操作,通常我们只需读前5个字节.

CopyScratchpad

复制暂存器

48H

将暂存器中的内容复制进EERAM,以便将温度告警触发字节存入非易失内存.如果此命令后主机产生读时隙,那么只要器件还在进行复制都会输出0,复制完成后输出1.

ConvertT 

温度转换

44H

开始温度转换操作.若在此命令后主机产生时隙,那么只要器件还在进行温度转换就会输出0,转换完成后输出1.

RecallE2 

重调E2暂存器

B8H

将存储在EERAM中的温度告警触发值和配置寄存器值重新拷贝到暂存器中,此操作在DS18B20加电时自动产生.

ReadPowerSupply

读供电方式

B4H

主机发起此命令后每个读数时隙内,DS18B20会发信号通知它的供电方式:

0寄生电源,1外部供电.

4.数据处理

DS18B20要求有严格的时序来保证数据的完整性.在单线DQ上,有复位脉冲,应答脉冲,写0,写1,读0,读1这6种信号类型.除了应答脉冲外,其它都由主机产生.数据位的读和写是通过读、写时隙实现的.

1)写时隙:

当主机将数据线从高电平拉至低电平时,产生写时隙.所有写时隙都必须在60us以上,各写时隙间必须保证1us的恢复时间.

写"

1"

:

主机将数据线DQ先拉低,然后释放15us后,将数据线DQ拉高;

0"

主机将DQ拉低并至少保持60us以上.

2)读时隙:

当主机将数据线DQ从高电平拉至低电平时,产生读时隙.所有读时隙最短必须持续60us,各读时隙间必须保证1us的恢复时间.

读:

主机将DQ拉低至少1us,.此时主机马上将DQ拉高,然后就可以延时15us后,读取DQ即可.

源代码:

(测量范围:

0~99度)

DS18B20

1#include 

<

reg51.H>

2//通过DS18B20测试当前环境温度, 

并通过数码管显示当前温度值

3sbit 

wela 

P2^7;

//数码管位选

4sbit 

dula 

P2^6;

//数码管段选

5sbit 

ds 

P2^2;

6//0-F数码管的编码(共阴极)

7unsigned 

char 

code 

table[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

9//0-9数码管的编码(共阴极), 

带小数点

10unsigned 

tableWidthDot[]={0xbf, 

0x86, 

0xdb, 

0xcf, 

0xe6, 

0xed, 

0xfd, 

11 

0x87, 

0xff, 

0xef};

12

13//延时函数, 

例i=10,则大概延时10ms.

14void 

delay(unsigned 

i)

15{

16 

unsigned 

j, 

k;

17 

for(j 

i;

>

0;

j--)

18 

{

19 

for(k 

125;

k--);

20 

}

21}

22

23//初始化DS18B20

24//让DS18B20一段相对长时间低电平, 

然后一段相对非常短时间高电平, 

即可启动

25void 

dsInit()

26{

27 

//一定要使用unsigned 

int型, 

一个i++指令的时间, 

作为与DS18B20通信的小时间间隔

28 

//以下都是一样使用unsigned 

int型

29 

int 

30 

31 

103;

32 

while(i>

0) 

i--;

33 

1;

34 

4;

35 

36}

37

38//向DS18B20读取一位数据

39//读一位, 

让DS18B20一小周期低电平, 

然后两小周期高电平, 

40//之后DS18B20则会输出持续一段时间的一位

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1