DS18B20数字温度计使用

发布人:来自网络   发布时间:2010-6-16

1.DS18B20基本知识

 DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

1、DS18B20产品的特点

  (1)、只要求一个端口即可实现通信。

  (2)、在DS18B20中的每个器件上都有独一无二的序列号。

  (3)、实际应用中不需要外部任何元器件即可实现测温。

  (4)、测量温度范围在-55。C到+125。C之间。

  (5)、数字温度计的分辨率用户可以从9位到12位选择。

  (6)、内部有温度上、下限告警设置。

2、DS18B20的引脚介绍

  TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。

(底视图)图1

 

表1 DS18B20详细引脚功能描述

序号

名称

引脚功能描述

1

GND

地信号

2

DQ

数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。

3

VDD

可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。

3. DS18B20的使用方法

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

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。

DS18B20的复位时序

DS18B20的读时序

对于DS18B20的读时序分为读0时序和读1时序两个过程。

对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。

DS18B20的写时序

对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。

 

4. 实验任务

用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。

5. 电路原理图

 

6. 系统板上硬件连线

(1). 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。

(2). 把“单片机系统”区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。

(3). 把DS18B20芯片插入“四路单总线”区域中的任一个插座中,注意电源与地信号不要接反。

(4). 把“四路单总线”区域中的对应的DQ端子连接到“单片机系统”区域中的P3.7/RD端子上。

7. C语言源程序
#include
#include
 
unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00,0x40};
unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
25,28,31,34,38,41,44,48,
50,53,56,59,63,66,69,72,
75,78,81,84,88,91,94,97};
unsigned char displaycount;
unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};
unsigned char timecount;
unsigned char readdata[8];  
sbit DQ=P3^7;
bit sflag;
 
bit resetpulse(void)
{
unsigned char i;
 
DQ=0;
for(i=255;i>0;i--);
DQ=1;
for(i=60;i>0;i--);
return(DQ);
for(i=200;i>0;i--);
}
 
void writecommandtods18b20(unsigned char command)
{
unsigned char i;
unsigned char j;
 
for(i=0;i<8;i++)
{
if((command & 0x01)==0)
{
DQ=0;
for(j=35;j>0;j--);
DQ=1;
}
else
{
DQ=0;
for(j=2;j>0;j--);
DQ=1;
for(j=33;j>0;j--);
}
command=_cror_(command,1);
}
}
 
unsigned char readdatafromds18b20(void)
{
unsigned char i;
unsigned char j;
unsigned char temp;
 
temp=0;
for(i=0;i<8;i++)
{
temp=_cror_(temp,1);
DQ=0;
_nop_();
_nop_();
DQ=1;
for(j=10;j>0;j--);
if(DQ==1)
{
temp=temp | 0x80;
}
else
{
temp=temp | 0x00;
}
for(j=200;j>0;j--);
}
return(temp);
}
 
void main(void)
{
TMOD=0x01;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
ET0=1;
EA=1;
 
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0x44);
TR0=1;
while(1)
{
;
}
}
 
void t0(void) interrupt 1 using 0
{
unsigned char x;
unsigned int result;
 
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
if(displaycount==2)
{
P0=displaycode[displaybuf[displaycount]] | 0x80;
}
else
{
P0=displaycode[displaybuf[displaycount]];
}
P2=displaybit[displaycount];
displaycount++;
if(displaycount==8)
{
displaycount=0;
}
 
timecount++;
if(timecount==150)
{
timecount=0;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0xbe);
readdata[0]=readdatafromds18b20();
readdata[1]=readdatafromds18b20();
for(x=0;x<8;x++)
{
displaybuf[x]=16;
}
sflag=0;
if((readdata[1] & 0xf8)!=0x00)
{
sflag=1;
readdata[1]=~readdata[1];
readdata[0]=~readdata[0];
result=readdata[0]+1;
readdata[0]=result;
if(result>255)
{
readdata[1]++;
}
}
readdata[1]=readdata[1]<<4;
readdata[1]=readdata[1] & 0x70;
x=readdata[0];
x=x>>4;
x=x & 0x0f;
readdata[1]=readdata[1] | x;
x=2;
result=readdata[1];
while(result/10)
{
displaybuf[x]=result%10;
result=result/10;
x++;
}
displaybuf[x]=result;
if(sflag==1)
{
displaybuf[x+1]=17;
}
x=readdata[0] & 0x0f;
x=x<<1;
displaybuf[0]=(dotcode[x])%10;
displaybuf[1]=(dotcode[x])/10;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0x44);
}
}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13771794/viewspace-700269/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13771794/viewspace-700269/

DS18B20数字温度计使用(转)相关推荐

  1. DS18B20数字温度计 (一) 电气特性, 寄生供电模式和远距离接线

    目录 DS18B20数字温度计 (一) 电气特性, 寄生供电模式和远距离接线 DS18B20数字温度计 (二) 测温, ROM和CRC算法 DS18B20数字温度计 (三) 1-WIRE总线ROM搜索 ...

  2. 数字温度计的c语言编程,基于DS18B20数字温度计的设计(全文完整版)

    <基于DS18B20数字温度计的设计.doc>由会员分享,可免费在线阅读全文,更多与<基于DS18B20数字温度计的设计>相关文档资源请在帮帮文库(www.woc88.com) ...

  3. DS18B20数字温度计 (三) 1-WIRE总线 ROM搜索算法和实际测试

    目录 DS18B20数字温度计 (一) 电气特性, 寄生供电模式和远距离接线 DS18B20数字温度计 (二) 测温, ROM和CRC算法 DS18B20数字温度计 (三) 1-WIRE总线 ROM搜 ...

  4. 单片机小白学习之路(三十二)---DS18B20数字温度计(三)

    目标:目标: DS18B20数字温度计(三) 18b20开始转换温度 DS18B20 的典型温度读取过程为:复位→发 SKIP ROM 命令(0XCC)→发开始转换命令( 0X44)→延时→复位→发送 ...

  5. 单片机实例35——DS18B20数字温度计使用(硬件电路图+C语言程序)

    35. DS18B20数字温度计使用 1.DS18B20基本知识 DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点.因此用它来组成一个测温系统,具 ...

  6. 数字温度计的c语言编程,DS18B20数字温度计C程序(能显示负温)

    DS18B20数字温度计C程序(能显示负温) //***********DS18B20数字温度计C程序****************// //*MCU: AT892051 // //*MCU-cry ...

  7. DS18B20数字温度计系统设计

    STC89C52单片机 STC89C52单片机接口介绍 这个单片机一共有40个引脚. ①P0口(P0.0~P0.7) 8位漏极开关型双向I/O端口.可以作为通用I/O口使用,但必须加上拉电阻. ②P1 ...

  8. DS18B20数字温度计使用

    1.DS18B20基本知识 DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点.因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这 ...

  9. DS18B20数字温度计设计

    一.单片机简介. 1 二.设计任务和要求. 1 三.设计方案的总体设计框图. 1 3.1硬件电路框图. 1 3.2硬件电路概述. 2 3.3主控电路. 2 3.4显示电路. 2 3.5报警温度调节电路 ...

最新文章

  1. Java基础——组合关系
  2. C++中流状态badbit, failbit, eofbit
  3. 效果奇特的HTML5动画,12个效果奇特的HTML5动画赏析
  4. 【Python实例第25讲】稳健的 vs 经验的协方差估计
  5. 老肖有话说:如期而至的Swarm新工具Crane开源解读
  6. 1074 Reversing Linked List (25 分)
  7. 动态规划实战9 leetcode-91. Decode Ways
  8. AD10 PCB等长布线----蛇形布线
  9. k3 梅林固件设置_OpenWrt中,旁路由的设置与使用
  10. 800G 112Gb/S(II), Terabit Ethernet – How? (Part2)
  11. 转动惯量到底是个什么物理量
  12. dubbo中的group与version的存在意义
  13. 主题美化 —— IAR篇
  14. Linux流量控制(SFQTBFPRIOCBQHTB原理介绍)
  15. TVS二极管和稳压二极管应用有什么不同点
  16. Oracle-DDL语句详解
  17. Eclipse汉化教程详细
  18. Html5大文件断点续传实现方法
  19. android 录制视频清晰度问题
  20. 【obs】项目构建环境

热门文章

  1. 红米note3 Android N,骁龙650的力量 红米Note3全网通版评测
  2. Arduino检测不到串口的问题(改)
  3. 风寒感冒 风热感冒区别
  4. php网站整合ck播放器,wordpress整合ckplayer最新版 wp文章短代码调用ck播放器
  5. python数据分析002—python基础语法
  6. 流程控制之顺数结构和选择结构
  7. 2016年华为优招面试经验
  8. ACE+TAO 通信中间件
  9. 网络对抗技术 实验二
  10. 25 scala 进阶