DS18B20实验箱创新实训.docx
- 文档编号:3634972
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:14
- 大小:289.63KB
DS18B20实验箱创新实训.docx
《DS18B20实验箱创新实训.docx》由会员分享,可在线阅读,更多相关《DS18B20实验箱创新实训.docx(14页珍藏版)》请在冰豆网上搜索。
DS18B20实验箱创新实训
现代电子技术
创新实训
实训报告
专业:
电子信息工程
年级/班级:
姓名:
实训时间:
实训地点:
指导教师:
一、创新实训目的
1.掌握单片机与温度传感器模块配合使用的方法。
2.了解温度传感器DS18B20的工作原理及使用方法。
3.掌握DS18B20读写时序及其编程方法。
4.锻炼单片机综合应用和开发的能力。
二、创新实训要求
1.分析DP-51PROC单片机实验箱数字温度传感器模块。
2.阐述温度传感器模块电路的工作原理、使用方法、控制时序。
3.画出程序流程图。
4.编写程序实现数字温度传感器测试温度的功能。
三、电路工作原理分析
3.1硬件电路原理图如下图所示
3.2温度传感器DS18B20
DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器,如图2-3。
与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
可以分别在93.75ms和750ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。
因而使用DS18B20可使系统结构更趋简单,可靠性更高。
他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。
1.DS18B20的主要性能:
(1)独特的单线接口方式:
DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(2)在使用中不需要任何外围元件。
(3)可用数据线供电,电压范围:
+3.0~+5.5V。
(4)测温范围:
-55~+125℃。
固有测温分辨率为0.5℃。
(5)通过编程可实现9~12位的数字读数方式。
(6)用户可自设定非易失性的报警上下限值。
(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。
(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
图2-3DS18B20的引脚排列
2.DS18B20引脚定义:
(1)DQ为数字信号输入/输出端;
(2)GND为电源地;
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
3.内部结构图
4.DS18B20有4个主要的数据部件:
(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
表1:
DS18B20温度值格式表
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
表2:
DS18B20温度数据表
(3)DS18B20温度传感器的存储器
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
(4)配置寄存器
该字节各位的意义如下:
表3:
配置寄存器结构
TM
R1
R0
1
1
1
1
1
低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动。
R1和R0用来设置分辨率,如下表所示:
(DS18B20出厂时被设置为12位)
表4:
温度分辨率设置表
R1
R0
分辨率
温度最大转换时间
0
0
9位
93.75ms
0
1
10位
187.5ms
1
0
11位
375ms
1
1
12位
750ms
5.高速暂存存储器:
高速暂存存储器由9个字节组成,其分配如表5所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。
对应的温度计算:
当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。
表?
2是对应的一部分温度值。
第九个字节是冗余检验字节。
表5:
DS18B20暂存寄存器分布
寄存器内容
字节地址
温度值低位(LSByte)
0
温度值高位(MSByte)
1
高温限值(TH)
2
低温限值(TL)
3
配置寄存器
4
保留
5
保留
6
保留
7
CRC校验值
8
6.芯片指令:
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
表6:
ROM指令表
指令
约定代码
功能
读ROM
33H
读DS1820温度传感器ROM中的编码(即64位地址)
符合ROM
55H
发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。
搜索ROM
0FOH
用于确定挂接在同一总线上DS1820的个数和识别64位ROM地址。
为操作各器件作好准备。
跳过ROM
0CCH
忽略64位ROM地址,直接向DS1820发温度变换命令。
适用于单片工作。
告警搜索命令
0ECH
执行后只有温度超过设定值上限或下限的片子才做出响应。
表7:
RAM指令表
指令
约定代码
功能
温度变换
44H
启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。
结果存入内部9字节RAM中。
读暂存器
0BEH
读内部RAM中9字节的内容
写暂存器
4EH
发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
Writesthreebytestoscratchpad(TH,TL,andconfig).
复制暂存器
48H
将RAM中第3、4字节的内容复制到EEPROM中。
重调EEPROM
0B8H
将EEPROM中内容恢复到RAM中的第3、4字节。
读供电方式
0B4H
读DS1820的供电模式。
寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。
5.控制时序:
复位时序
读写时序
详细读操作时序
四、软件设计
1.程序流程图
2.程序代码:
程序:
/******************************************
************DS18B20温度传感器*************
******************************************/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uchartplsb,tpmsb;//温度值低位、高位字节
sbitDQ=P3^7;//数据通信线DQ
/*延时t毫秒*/
voiddelay(uintt)
{
uinti;
while(t--)
{
/*对于11.0592MHZ的时钟,约延时1ms*/
for(i=0;i<125;i++)
{;}
}
}
/*产生复位脉冲初始化DS18B20*/
voidTxReset(void)
{
uinti;
DQ=0;
/*拉低约900us*/
i=100;
while(i>0)i--;
DQ=1;//产生上升沿
i=4;
while(i>0)i--;
}
/*等待应答脉冲*/
voidRxWait(void)
{
uinti;
while(DQ);
while(~DQ);//检测到应答脉冲
i=4;
while(i>0)i--;
}
/*读取数据的一位,满足读时隙要求*/
bitRdBit(void)
{
uinti;
bitb;
DQ=0;
i++;
DQ=1;
i++;i++;//延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效
b=DQ;
i=8;
while(i>0)i--;
return(b);
}
/*读取数据的一个字节*/
ucharRdByte(void)
{
uchari,j,b;
b=0;
for(i=1;i<=8;i++)
{
j=RdBit();
b=(j<<7)|(b>>1);
}
return(b);
}
/*写数据的一个字节,满足写1和写0的时隙要求*/
voidWrByte(ucharb)
{
uinti;
ucharj;
bitbtmp;
for(j=1;j<=8;j++)
{
btmp=b&0x01;
b=b>>1;//取下一位(由低位向高位)
if(btmp)
{
/*写1*/
DQ=0;
i++;i++;//延时,使得15us以内拉高
DQ=1;
i=8;
while(i>0)i--;//整个写1时隙不低于60us
}
else
{
/*写0*/
DQ=0;
i=8;
while(i>0)i--;//保持低在60us到120us之间
DQ=1;
i++;
i++;
}
}
}
/*启动温度转换*/
voidconvert(void)
{
TxReset();//产生复位脉冲,初始化DS18B20
RxWait();//等待DS18B20给出应答脉冲
delay
(1);//延时
WrByte(0xcc);//skiprom命令
WrByte(0x44);//convertT命令
}
/*读取温度值*/
voidRdTemp(void)
{
TxReset();//产生复位脉冲,初始化DS18B20
RxWait();//等待DS18B20给出应答脉冲
delay
(1);//延时
WrByte(0xcc);//skiprom命令
WrByte(0xbe);//readscratchpad命令
tplsb=RdByte();//温度值低位字节(其中低4位为二进制的“小数”部分)
tpmsb=RdByte();//高位值高位字节(其中高5位为符号位)
}
/*主程序,读取的温度值最终存放在tplsb和tpmsb变量中。
tplsb其中低4位为二进制的“小数”部分;tpmsb其中高
5位为符号位。
真正通过数码管输出时,需要进行到十进
制有符号实数(包括小数部分)的转换。
*/
voidmain(void)
{
do
{
delay
(1);//延时1ms
convert();//启动温度转换,需要750ms
delay(1000);//延时1s
RdTemp();//读取温度
}
while
(1);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B20 实验 创新
![提示](https://static.bdocx.com/images/bang_tan.gif)