DS18B20Word下载.docx

上传人:b****5 文档编号:20014884 上传时间:2023-01-15 格式:DOCX 页数:16 大小:20.53KB
下载 相关 举报
DS18B20Word下载.docx_第1页
第1页 / 共16页
DS18B20Word下载.docx_第2页
第2页 / 共16页
DS18B20Word下载.docx_第3页
第3页 / 共16页
DS18B20Word下载.docx_第4页
第4页 / 共16页
DS18B20Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

DS18B20Word下载.docx

《DS18B20Word下载.docx》由会员分享,可在线阅读,更多相关《DS18B20Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

DS18B20Word下载.docx

其作用是使每一个出厂的DS18820地址序列号都各不相同,这样,就可以实现一根总线上挂接多个DS18820的目的。

2.DS18820中的温度传感器完成对温度的测量,输出格式为:

16位符号扩展的二进制补码。

当测温精度设置为12位时,分辨率为O.0625℃,即O.0625℃/LSB。

其二进制补码格式如图2所示。

其中,S为符号位,S=1,表示温度为负值;

S=0,表示温度为正值。

例如+125℃的数字输出为07D0H,-55℃的数字输出为FC90H。

一些温度值对应的数字输出如图4所示。

3.DS18820中的低温触发器TL、高温触发器TH,用于设置低温、高温的报警数值。

DS18820完成一个周期的温度测量后,将测得的温度值和TL、TH相比较,如果小于TL,或大于TH,则表示温度越限,将该器件内的告警标志位置位,并对主机发出的告警搜索命令作出响应。

需要修改上、下限温度值时,只需使用一个功能命令即可对TL、TH写入,十分方便。

4.DS18820中的高速暂存器是一个9字节的存储器,其含意如图5所示。

开始两个字节为被测温度的数字量,其含义如图2所示。

第3、4、5字节分别为TH、TL、配置寄存器的复制,每一次上电复位时被重写。

配置寄存器有R0、R1组成,其值决定温度转换的精度位数、转换时间等,含义如图6所示。

第7字节为测温计数的剩余值。

第8字节为测温时每度的计数值。

第9字节读出的是前8个字节的CRC校验码,通过此码,可判断通讯是否正确。

DS18B20的读写操作介绍

(一)ROM操作命令:

1.读命令(33H):

通过该命令主机可以读出DS18820的ROM中的8位系列产品代码、48位产品序列号和8位CRC校验码。

该命令仅限于单个DS18B20在线的情况。

2.选择定位命令(55H):

当多片DS18820在线时,主机发出该命令和一个64位数,DS18820内部ROM与主机一致者,才响应命令。

该命令也可用于单个DS18820的情况。

3.查询命令(0F0H):

该命令可查询总线上DS18B20的数目及其64位序列号。

4.跳过ROM序列号检测命令(OCCH):

该命令允许主机跳过ROM序列号检测而直接对寄存器操作,该命令仅限于单个DS18820在线的情况。

5.报警查询命令(0ECH):

只有报警标志置位后,DS18B20才相应该命令。

(二)存储器操作命令:

1.写入命令(4EH):

该命令可写入寄存器的第2、3、4字节,即高低温寄存器和配置寄存器。

复位信号发出之前,三个字节必须写完。

2.读出命令(0BEH):

该命令可读出寄存器中的内容,复位命令可终止读出。

3.开始转换命令(44H):

该命令使DS18B20立即开始温度转换,当温度转换正在进行时,主机这时读总线将收到O;

当温度转换结束时,主机这时读总线将收到1。

若用信号线给DS18820供电,则主机发出转换命令后,必须提供至少相应于分辨率的温度转换时间的上拉电平。

4.回调命令(088H):

该命令把EEROM中的内容写到寄存器TH、TL及配置寄存器中。

DS18820上电时能自动写入。

5.复制命令(48H):

该命令把寄存器TH、TL及配置寄存器中的内容写到EEROM中。

6读电源标志命令(084H):

主机发出该命令后,DS18B20将进行响应,发送电源标志,信号线供电发O,外接电源发1。

(三)DS18820的复位及读写时序:

1.复位:

对DS18B20操作之前,首先要将它复位。

复位时序为:

(1)主机将信号线置为低电平,时间为480~960μS。

(2)主机将信号线置为高电平,时间为15~60μS。

(3)DS18B20发出60~240μS的低电平作为应答信号。

主机收到此信号后,才能对DS18820作其它操作。

2.写操作:

主机将信号线从高电平拉至低电平,产生写起始信号。

从信号线的下降沿开始,在15~60μS的时间内DS18820对信号线检测,如信号线为高电平,则写1,如信号线为O,则写0,从而完成了一个写周期。

在开始另一个写周期前,必须有1μS以上的高电平恢复期。

3.读操作:

主机将信号线从高电平拉低至低电平1μS以上,再使数据线升为高电平,产生读起始信号。

从主机将信号线从高电平拉低至低电平起15~60μS的时间内,DS18820将数据放到信号线上,供主机读取。

从而完成了一个读周期。

在开始另一个读周期前,必须有1μS以上的高电平恢复期。

是LCD1602显示的.

#include 

<

reg51.h>

intrins.h>

#define 

uchar 

unsigned 

char

uint 

 

int

sbit 

DQ 

P3^3;

//定义DS18B20端口DQ 

BEEP=P3^7 

;

//蜂鸣器驱动线

bit 

presence 

LCD_RS 

P2^0;

LCD_RW 

P2^1;

LCD_EN 

P2^2;

code 

cdis1[ 

{"

DS18B20 

OK 

"

};

cdis2[ 

cdis3[ 

ERR0R 

cdis4[ 

PLEASE 

CHECK 

char 

data 

display[2] 

{0x00,0x00};

RomCode[8] 

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

Temp;

crc;

void 

beep();

delayNOP();

{_nop_();

_nop_();

/*******************************************************************/

delay1(int 

ms)

{

y;

while(ms--)

for(y 

0;

y<

250;

y++)

}

/******************************************************************/

/* 

*/

/*检查LCD忙状态 

/*lcd_busy为1时,忙,等待。

lcd-busy为0时,闲,可写指令与数据。

/******************************************************************/ 

lcd_busy()

result;

1;

result 

(bit)(P0&

0x80);

return(result);

/*写指令数据到LCD 

/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。

lcd_wcmd(uchar 

cmd)

while(lcd_busy());

P0 

cmd;

/*写显示数据到LCD 

/*RS=H,RW=L,E=高脉冲,D0-D7=数据。

lcd_wdat(uchar 

dat)

dat;

LCD初始化设定 

lcd_init()

delay1(15);

lcd_wcmd(0x01);

//清除LCD的显示内容

lcd_wcmd(0x38);

//16*2显示,5*7点阵,8位数据

delay1(5);

lcd_wcmd(0x0c);

//显示开,关光标

lcd_wcmd(0x06);

//移动光标

设定显示位置 

lcd_pos(uchar 

pos)

lcd_wcmd(pos 

//数据指针=80+地址变量

/*us级延时函数 

Delay(unsigned 

int 

num)

while( 

--num 

);

/*初始化ds1820 

Init_DS18B20(void)

//DQ复位

Delay(8);

//稍做延时

//将DQ拉低

Delay(90);

//精确延时 

大于 

480us

//拉高总线

DQ;

//读取存在信号

Delay(100);

return(presence);

//返回信号,0=presence,1= 

no 

presence

读一位(bit) 

read_bit(void) 

i;

 

//将DQ 

拉低开始读时间隙

// 

then 

return 

high

for 

(i=0;

i<

3;

i++);

延时15μs

return(DQ);

返回 

线上的电平值

读一个字节 

ReadOneChar(void)

dat 

//for 

(i 

8;

>

i--)

// 

read_bit();

给脉冲信号

i++) 

读取字节,每次读取一个字节

if(read_bit()) 

dat|=0x01<

然后将其左移

if(DQ)

|= 

0x80;

Delay(4);

(dat);

写一位 

write_bit(char 

bitval) 

将DQ 

拉低开始写时间隙

if(bitval==1) 

=1;

如果写1,DQ 

返回高电平

Delay(5);

在时间隙内保持电平值,

Delay函数每次循环延时16μs,因此delay(5) 

104μs

写一个字节 

WriteOneChar(unsigned 

un

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

当前位置:首页 > 工程科技 > 电力水利

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

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