单总线温度传感器DS18B20Word格式文档下载.docx
- 文档编号:17657543
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:18
- 大小:108.56KB
单总线温度传感器DS18B20Word格式文档下载.docx
《单总线温度传感器DS18B20Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单总线温度传感器DS18B20Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
测量结果存入温度寄存器中。
一般情况下的温度值应该为9位,但因符号位扩展成高8位,所以最后以16位补码形式读出。
DS18B20工作过程一般遵循以下协议:
初始化→ROM操作命令→存储器操作命令→处理数据
①初始化
单总线上的所有处理均从初始化序列开始。
初始化序列包括总线主机发出一复位脉冲,接着由从属器件送出存在脉冲。
存在脉冲让总线控制器知道DS1820在总线上且已准备好操作。
②ROM操作命令
一旦总线主机检测到从属器件的存在,它便可以发出器件ROM操作命令之一。
所有ROM操作命令均为8位长。
这些命令列表如下:
ReadROM(读ROM)[33h]
此命令允许总线主机读DS18B20的8位产品系列编码,唯一的48位序列号,以及8位的CRC。
此命令只能在总线上仅有一个DS18B20的情况下可以使用。
如果总线上存在多于一个的从属器件,那么当所有从片企图同时发送时将发生数据冲突的现象(漏极开路会产生线与的结果)。
MatchROM(符合ROM)[55h]
此命令后继以64位的ROM数据序列,允许总线主机对多点总线上特定的DS18B20寻址。
只有与64位ROM序列严格相符的DS18B20才能对后继的存贮器操作命令作出响应。
所有与64位ROM序列不符的从片将等待复位脉冲。
此命令在总线上有单个或多个器件的情况下均可使用。
SkipROM(跳过ROM)[CCh]
在单点总线系统中,此命令通过允许总线主机不提供64位ROM编码而访问存储器操作来节省时间。
如果在总线上存在多于一个的从属器件而且在SkipROM命令之后发出读命令,那么由于多个从片同时发送数据,会在总线上发生数据冲突(漏极开路下拉会产生线与的效果)。
SearchROM(搜索ROM)[F0h]
当系统开始工作时,总线主机可能不知道单线总线上的器件个数或者不知道其64位ROM编码。
搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。
AlarmSearch(告警搜索)[ECh]
此命令的流程与搜索ROM命令相同。
但是,仅在最近一次温度测量出现告警的情况下,DS18B20才对此命令作出响应。
告警的条件定义为温度高于TH或低于TL。
只要DS18B20一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值或者改变TH或TL的设置,使得测量值再一次位于允许的范围之内。
贮存在EEPROM内的触发器值用于告警。
③存储器操作命令
WriteScratchpad(写暂存存储器)[4Eh]
这个命令向DS18B20的暂存器中写入数据,开始位置在地址2。
接下来写入的两个字节将被存到暂存器中的地址位置2和3。
可以在任何时刻发出复位命令来中止写入。
ReadScratchpad(读暂存存储器)[BEh]
这个命令读取暂存器的内容。
读取将从字节0开始,一直进行下去,直到第9(字节8,CRC)字节读完。
如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。
CopyScratchpad(复制暂存存储器)[48h]
这条命令把暂存器的内容拷贝到DS18B20的E2存储器里,即把温度报警触发字节存入非易失性存储器里。
如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又正在忙于把暂存器拷贝到E2存储器,DS18B20就会输出一个“0”,如果拷贝结束的话,DS18B20则输出“1”。
如果使用寄生电源,总线控制器必须在这条命令发出后立即起动强上拉并最少保持10ms。
ConvertT(温度变换)[44h]
这条命令启动一次温度转换而无需其他数据。
温度转换命令被执行,而后DS18B20保持等待状态。
如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出“0”,若温度转换完成,则输出“1”。
如果使用寄生电源,总线控制器必须在发出这条命令后立即起动强上拉,并保持500ms。
RecallE2(重新调整E2)[B8h]
这条命令把贮存在E2中温度触发器的值重新调至暂存存储器。
这种重新调出的操作在对DS18B20上电时也自动发生,因此只要器件一上电,暂存存储器内就有了有效的数据。
在这条命令发出之后,对于所发出的第一个读数据时间片,器件会输出温度转换忙的标识:
“0”=忙,“1”=准备就绪。
ReadPowerSupply(读电源)[B4h]
对于在此命令发送至DS18B20之后所发出的第一读数据的时间片,器件都会给出其电源方式的信号:
“0”=寄生电源供电,“1”=外部电源供电。
④处理数据
DS18B20的高速暂存存储器由9个字节组成,其分配如图3所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后。
图3高速暂存存储器分配图
温度/0C
二进制表示
十六进制表示
符号位(5位)
数据位(11位)
+125
00000
1
07D0H
+25.0625
0191H
+10.125
00A2H
+0.5
0008H
0000H
-0.5
11111
FFF8H
-10.125
FF5EH
-25.625
FE6FH
-55
FC90H
DS18B20温度数据表
上表是DS18B20温度采集转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于或等于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;
如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
温度转换计算方法举例:
例如当DS18B20采集到+125℃的实际温度后,输出为07D0H,则:
实际温度=07D0H╳0.0625=2000╳0.0625=1250C。
例如当DS18B20采集到-55℃的实际温度后,输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作为计算),则:
实际温度=370H╳0.0625=880╳0.0625=550C。
DS18B20软、硬件设计
本实例介绍DS18B20与单片机之间的软、硬件接口,通过单片机来读取DS18B20的温度值,并将温度值通过数码管显示出来。
在实验中先要将功能选择开关调到DS18B20位置上。
硬件原理图
6硬件原理图
程序流程图图7程序流程图
软件代码
/***************************************************************************/
/*DS18B20演示程序*/
/*目标器件:
AT89S51*/
/*晶振:
11.0592MHZ*/
/*编译环境:
Keil7.50A*/
/*********************************包含头文件********************************/
#include<
reg51.h>
/*******************************共阳LED段码表*******************************/
unsignedcharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/*********************************端口定义**********************************/
sbitDQ=P3^3;
//数据传输线接单片机的相应的引脚
/*********************************定义全局变量******************************/
unsignedchartempL=0;
//临时变量低位
unsignedchartempH=0;
//临时变量高位
floattemperature;
//温度值
/****************************************************************************
函数功能:
延时子程序
入口参数:
k
出口参数:
****************************************************************************/
voiddelay(unsignedintk)
{
unsignedintn;
n=0;
while(n<
k)
{n++;
}
return;
数码管扫描延时子程序
voiddelay1(void)
intk;
for(k=0;
k<
400;
k++);
数码管显示子程序
voiddisplay(intk)
P2=0xfe;
P0=tab[k/1000];
delay1();
P2=0xfd;
P0=tab[k%1000/100];
P2=0xfb;
P0=tab[k%100/10];
P2=0xf7;
P0=tab[k%10];
P2=0xff;
DS18B20初始化子程序
Init_DS18B20(void)
unsignedcharx=0;
DQ=1;
//DQ先置高
delay(8);
//延时
DQ=0;
//发送复位脉冲
delay(85);
//延时(>
480ms)
//拉高数据线
delay(14);
//等待(15~60ms)
向DS18B20读一字节数据
dat
ReadOneChar(void)
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
delay
(1);
dat>
>
=1;
if(DQ)
dat|=0x80;
delay(4);
return(dat);
向DS18B20写一字节数据
WriteOneChar(unsignedchardat)
for(i=8;
DQ=dat&
0x01;
delay(5);
向DS18B20读温度值
temperature
ReadTemperature(void)
Init_DS18B20();
//初始化
WriteOneChar(0xcc);
//跳过读序列号的操作
WriteOneChar(0x44);
//启动温度转换
delay(125);
//转换需要一点时间,延时
WriteOneChar(0xbe);
//读温度寄存器(头两个值分别为温度的低位和高位)
tempL=ReadOneChar();
//读出温度的低位LSB
tempH=ReadOneChar();
//读出温度的高位MSB
//温度转换,把高低位做相应的运算转化为实际温度
temperature=((tempH*256)+tempL)*0.0625;
delay(200);
return(temperature);
主程序
voidmain()
floati;
while
(1)
i=ReadTemperature();
display(i);
1ds1820序列号获得
;
|------------------------------------------|
|读出ds1820序列号应用程序,P1.6接ds1820|
ORG0000H
AJMPMAIN
ORG0020H
MAIN:
MOVSP,#60H
CLREA;
使用ds1820一定要禁止任何中断产生
LCALLINT;
初始化ds1820
MOVA,#33H
LCALLWRITE;
送入读ds1820的ROM命令
LCALLREAD;
开始读出当前ds1820序列号
MOV40H,A
LCALLREAD
MOV41H,A
MOV42H,A
MOV43H,A
MOV44H,A
MOV45H,A
MOV46H,A
MOV47H,A
SETBEA
SJMP$
INT:
CLREA;
初始化ds1820子程序
L0:
CLRP1.6;
ds1820总线为低复位电平
MOVR2,#200
L1CLRP1.6
DJNZR2,L1;
总线复位电平保持400us
SETBP1.6;
释放ds1820总线
MOVR2,#30
L4:
DJNZR2,L4;
释放ds1820总线保持60us
CLRC;
清存在信号
ORLC,P1.6
JCL0;
存在吗?
不存在则重新来
MOVR6,#80
L5:
ORLC,P1.6
JCL3
DJNZR6,L5
SJMPL0
L3:
MOVR2,#240
L2:
DJNZR2,L2
RET
WRITE:
向ds1820写操作命令子程序
MOVR3,#8;
写入ds1820的bit数,一个字节8个bit
WR1:
SETBP1.6
MOVR4,#8
RRCA;
把一个字节data(A)分成8个bit环移给C
CLRP1.6;
开始写入ds1820总线要处于复位(低)状态
WR2:
DJNZR4,WR2;
ds1820总线复位保持16us
MOVP1.6,C;
写入一个bit
MOVR4,#20
WR3:
DJNZR4,WR3;
等待40us
DJNZR3,WR1;
写入下一个bit
重新释放ds1820总线
READ:
CLREA
MOVR6,#8;
连续读8个bit
RE1:
读前总线保持为低
MOVR4,#4
NOP
开始读总线释放
RE2DJNZR4,RE2;
持续8us
MOVC,P1.6;
从ds1820总线读得一个bit
把读得的位值环移给A
MOVR5,#30
RE3:
DJNZR5,RE3;
持续60us
DJNZR6,RE1;
读下一个bit
END
2温度转换和读取
|-----------------------------------------------------|
|获取单个ds1820转化的温度值的应用程序,P1.6接ds1820|
LCALLGET_TEMP
GET_TEMP:
CLRPSW.4
SETBPSW.3;
设置工作寄存器当前所在的区域
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 总线 温度传感器 DS18B20