DS18B20的报告附带程序.docx

上传人:b****1 文档编号:643990 上传时间:2022-10-11 格式:DOCX 页数:11 大小:183.42KB
下载 相关 举报
DS18B20的报告附带程序.docx_第1页
第1页 / 共11页
DS18B20的报告附带程序.docx_第2页
第2页 / 共11页
DS18B20的报告附带程序.docx_第3页
第3页 / 共11页
DS18B20的报告附带程序.docx_第4页
第4页 / 共11页
DS18B20的报告附带程序.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

DS18B20的报告附带程序.docx

《DS18B20的报告附带程序.docx》由会员分享,可在线阅读,更多相关《DS18B20的报告附带程序.docx(11页珍藏版)》请在冰豆网上搜索。

DS18B20的报告附带程序.docx

DS18B20的报告附带程序

DS18B20温度传感器

数字温度传感器DS18B20是由Dallas半导体公司生产的,它具有耐磨耐碰,体积小,使用方便,封装形式多样(如图1.1.1),适用于各种狭小空间设备数字测温和控制领域。

图1.1.1

引脚说明:

GND为接地引脚;DQ为数据输入输出脚。

用于单线操作,漏极开路;VCC接电源正;单总线通常要求接一个约4.7K左右的上拉电阻,这样,当总线空闲时,其状态为高电平。

如图1.1.2是温度传感器DS18B20的接线图

图1.1.2

温度传感器DS18B20的参数:

●适应电压范围更宽,电压范围:

3.0~5.5V,在寄生电源方式下可由数据线供电

●温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃

●可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温

●在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快

●被测温度用符号扩展的16位数字量方式串行输出

●有两种供电方式既可以直接加3.0~5.5V的电源,也可以采用寄生电源方式由数据线供电

DS18B20内部结构及功能:

DS18B20的内部结构如图1.1.3所示。

主要包括:

寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值的TH和TL触发器,存储与控制逻辑,8位循环冗余校验码(CRC)发生器等7部分。

图1.1.3

64位闪速ROM的结构如下:

8bit检验CRC

48bit序列号

8bit工厂代码(10H)

MSBLSBMSBLSBMSBLSB

开始8位是产品类型的编号,接着共有48位是DS18B20唯一的序列号。

最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。

高速暂存存储器:

高速暂存存储器由9个字节组成,其分配如图所示。

高速暂存存储器

字节0~1温度寄存器

当DS18B20接收到温度转换命令后,开始启动转换。

转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。

单片机可通过单线接口读到该数据,读取时低位在前,高位在后。

温度值格式如下图:

DS18B20的温度操作是使用16位,也就是说分辨率是0.0625。

BIT15~BIT11是符号位,为了就是表示转换的值是正数还是负数。

DS18B20温度传感器主要用于对温度进行测量,数据可用16位符号扩展的二进制补码读数形式提供,并以0.0625℃/LSB形式表示。

表2是部分温度值对应的二进制温度表示数据。

DS18B20温度与表示值对应表

字节2~3:

TH和TL配置

TH与TL就是所谓的温度最高界限,和温度最低界限的配置。

字节4:

配置寄存器

R1与R0位组合了四个不同的转换精度,00为9位转换精度而转换时间是93.75ms,01为10位转换精度而转换时间是187.5ms,10为11位转换精度而转换时间是375ms,11为12位转换精度而转换时间是750ms(默认)。

DS18B20时序图:

DS18B20的复位时序如下:

1.单片机拉低总线480us~950us,然后释放总线(拉高电平)。

2.这时DS18B20会拉低信号,大约60~240us表示应答。

3.DS18B20拉低电平的60~240us之间,单片机读取总线的电平,如果是低电平,那么表示复位成功。

4.DS18B20拉低电平60~240us之后,会释放总线。

DS18B20读写时序:

DS18B20写逻辑0的步骤如下:

1.单片机拉低电平大约10~15us,。

2.单片机持续拉低电平大约20~45us的时间。

3.释放总线

DS18B20写逻辑1的步骤如下:

1.单片机拉低电平大约10~15us,。

2.单片机拉高电平大约20~45us的时间。

3.释放总线

DS18B20读逻辑0的步骤如下:

1.在读取的时候单片机拉低电平大约1us

2.单片机释放总线,然后读取总线电平。

3.这时候DS18B20会拉低电平。

4.读取电平过后,延迟大约40~45微妙

DS18B20读逻辑1的步骤如下:

1.在读取的时候单片机拉低电平大约1us

2.单片机释放总线,然后读取总线电平。

3.这时候DS18B20会拉高电平。

4.读取电平过后,延迟大约40~45微妙

DS18B20温度计C程序

//使用AT89s52单片机,12MHZ晶振,用共阳LED数码管

//P0口输出段码,P2口扫描

//#pragmasrc(d:

\aa.asm)

#include"reg51.h"

#include"intrins.h"//_nop_();延时函数用

#defineDisdataP0//段码输出口

#definediscanP2//扫描口

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P3^7;//温度输入口

sbitDIN=P0^7;//LED小数点控制

uinth;

//

//

//*******温度小数部分用查表法**********//

ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

//

ucharcodedis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};

/*共阳LED段码表"0""1""2""3""4""5""6""7""8""9""不亮""-"*/

ucharcodescan_con[4]={0xef,0xdf,0xbf,0x7f};//列扫描控制字

uchardatatemp_data[2]={0x00,0x00};//读出温度暂放

uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据,一个运算暂存用

//

//

//

/***********11微秒延时函数**********/

//

voiddelay(uintt)

{

for(;t>0;t--);

}

//

/***********显示扫描函数**********/

scan()

{

chark;

for(k=0;k<4;k++)//四位LED扫描控制

{

Disdata=dis_7[display[k]];

if(k==1){DIN=0;}

discan=scan_con[k];delay(90);discan=0xff;

}

}

//

//

/***********18B20复位函数**********/

ow_reset(void)

{

charpresence=1;

while(presence)

{

while(presence)

{

DQ=1;_nop_();_nop_();

DQ=0;//

delay(50);//550us

DQ=1;//

delay(6);//66us

presence=DQ;//presence=0继续下一步

}

delay(45);//延时500us

presence=~DQ;

}

DQ=1;

}

//

//

/**********18B20写命令函数*********/

//向1-WIRE总线上写一个字节

voidwrite_byte(ucharval)

{

uchari;

for(i=8;i>0;i--)//

{

DQ=1;_nop_();_nop_();

DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us

DQ=val&0x01;//最低位移出

delay(6);//66us

val=val/2;//右移一位

}

DQ=1;

delay

(1);

}

//

/*********18B20读1个字节函数********/

//从总线上读取一个字节

ucharread_byte(void)

{

uchari;

ucharvalue=0;

for(i=8;i>0;i--)

{

DQ=1;_nop_();_nop_();

value>>=1;

DQ=0;//

_nop_();_nop_();_nop_();_nop_();//4us

DQ=1;_nop_();_nop_();_nop_();_nop_();//4us

if(DQ)value|=0x80;

delay(6);//66us

}

DQ=1;

return(value);

}

//

/***********读出温度函数**********/

//

read_temp()

{

ow_reset();//总线复位

write_byte(0xCC);//发SkipROM命令

write_byte(0xBE);//发读命令

temp_data[0]=read_byte();//温度低8位

temp_data[1]=read_byte();//温度高8位

ow_reset();

write_byte(0xCC);//SkipROM

write_byte(0x44);//发转换命令

}

//

/***********温度数据处理函数**********/

work_temp()

{

ucharn=0;//

if(temp_data[1]>127)

{temp_data[1]=(256-temp_data[1]);temp_data[0]=(256-temp_data[0]);n=1;}//负温度求补码

display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];

display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);//

display[3]=display[4]/100;

display[1]=display[4]%100;

display[2]=display[1]/10;

display[1]=display[1]%10;

if(!

display[3]){display[3]=0x0A;if(!

display[2]){display[2]=0x0A;}}//最高位为0时都不显示

if(n){display[3]=0x0B;}//负温度时最高位显示"-"

}

//

//

/**************主函数****************/

main()

{

Disdata=0xff;//初始化端口

discan=0xff;

for(h=0;h<4;h++){display[h]=8;}//开机显示8888

ow_reset();//开机先转换一次

write_byte(0xCC);//SkipROM

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

当前位置:首页 > PPT模板 > 中国风

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

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