DS18b20 温度检测说明

发布者:DelightWish123最新更新时间:2016-12-13 来源: eefocus关键字:DS18b20  温度检测 手机看文章 扫描二维码
随时随地手机看文章

********************************************************************

**  这是学习 msp430g2553 单片机时写的 DS18b20 的程序             **

**  DS18b20 单总线,时序严格,完全自学明白浪费了n久!!           **

**  最高精度0.0625,即温度每变 0.0625 就能被检测到                **

**  网上一些 *0.0625 、*256/1000 、 /16 的都是错误的(I think)   **

** DQ 接 p2.4                                                   **

********************************************************************

********************************************************************

** DS18b20 操作时序:                                           **
** 1. DS18b20 初始化                                            **
** 2. 对64位ROM进行操作                                         **
**   读ROM                                                      **
**   搜索ROM                                                     **
**   跳过ROM                                                    **
**   告警搜索                                                   **
**  3. 对寄存器进行操作                                          **

** 4. 精度默认的为0.0625 ,无法重新设定,没找到相应的指令       **
**   相对应的转换时间为750ms                                   **
********************************************************************

 

#include
#include

 

#define DQ_1 P2OUT |= BIT4
#define DQ_0 P2OUT &= ~BIT4
#define DQ_in  P2DIR &= ~BIT4
#define DQ_out P2DIR |= BIT4
#define DQ_val (P2IN & BIT4)

 

#define Read_ROM 0x33 //读ROM
#define Match_ROM 0x55 //匹配ROM
#define Skip_ROM 0xcc  //跳过ROM
#define Search_ROM 0xf0  //搜索ROM
#define Alarm_Search 0xec  //告警搜索

 

#define Convert_Temperature 0x44 //温度转换
#define Read_Scratchpad 0xbe //读暂存存储器9字节内容

#define Write_Scratchpad 0x4e //写暂存存储器,写的是TH and TL , 接着发送两位数据就可以

****************************************************

**         内部暂存存储器9字节内容              **
**         1. 温度低8位                          **
**         2. 温度高8位                         **
**         3. 温度上限TH                        **
**         4. 温度下线TL                        **
**         5. 配置                              **
**         6.7.8 保留                           **
**          9. CRC 校验码                        **
****************************************************

 

unsigned int Check_val; //初始化检测变量
unsigned int Temp;//温度整数值

 

****************************************************************************************

**            DS18b20 初始化方法:                                                  **
** 1 主机发送 480 - 960 us 的低电平,释放总线                                       **
**  2 等待 15 - 60 us                                                                **
**  3 检测DQ上是否有低电平出现                                                       **
**     有:复位成功 ,通常时间为 60-240 us                                          **
**     无:复位失败,继续等待                                                      **
**  4 DQ上出现低电平后,低电平持续15us,然后DS18b20开始对单片机发送的数据进行采样   **
****************************************************************************************

unsigned int DS18b20_init(void)
{
   DQ_out;
   DQ_0;
   __delay_cycles(600);
   DQ_1;
   __delay_cycles(60);
   DQ_in;
   _NOP();
   if(DQ_val)     
   {
       Check_val = 0;         //初始化失败
   }
   else
   {
       Check_val = 1;         //初始化成功
   }
   __delay_cycles(10);
   DQ_out;
   DQ_1;
   __delay_cycles(100);
    return Check_val;

 

************************************************************************

**          DS18b20 写数据方法:                                    **
**  1 DS18b20 是“一位一位”的写‘0’和‘1’                         **
**  2 每写一次‘1’或‘0’为一个周期,每个周期约为 45 - 60 us        **
**  3 DQ拉低 1 us ,表示写周期开始,释放总线,让DQ随写入的值变化     **
**  4 若写1: DQ拉高至少60us,保证在采样周期内采到的值均为高         **
**  5 若写0: DQ拉低至少60us,保证在采样周期内采到的值均为低         **
** 6 释放总线                                                        **
**   *************************************************************   **
**     单片机发送数据时,是从写的数据的最低位开始发送               **

************************************************************************

void DS18b20_write_byte(unsigned int dat)
{
   unsigned int i;
   for(i = 0; i < 8;i++)
   {
       DQ_0;
       __delay_cycles(2);           
       if(dat & 0X01)   
         DQ_1;
       else 
         DQ_0;
       __delay_cycles(60);
       dat >>= 1;;         
       DQ_1;
       __delay_cycles(10);
   }
}

 

**************************************************************************************************

**                         DS18b20 读数据方法:                                               **
** 1 DS18b20 是“一位一位”的读‘0’和‘1’                                                   **
**  2 每读一次‘1’或‘0’为一个周期,每个周期约为 45 - 60 us                                  **
**  3 DQ拉低 1 us ,表示读周期开始,释放总线,让DQ随DS18b20传送的值变化                        **
**  4 若传1:则检测到高电平,持续时间为60us左右,所以检测一次后要延时60us,                    **

**           再检测下一位传送的数据                                                            **
**  5 若传0:则检测到低电平,持续时间为60us左右                                                **
    *******************************************************************************************

** DS18b20 传送数据也是从最低位开始传,所以要把单片机中存储DS18b20发送数据的变量先右移,       **

**    把最低位移到最前面                                                                      **
**************************************************************************************************

 unsigned int DS18b20_read_byte(void)
{
   unsigned i;
   unsigned int byte = 0;
   for(i = 0;i < 8;i++)
   {
       byte >>= 1; 
       DQ_0;
       __delay_cycles(2); 
       DQ_1;
       __delay_cycles(2); 
       DQ_in;
       _NOP();
       if(DQ_val)  
         byte |= 0x80;
        __delay_cycles(60);
       DQ_out;
       DQ_1;
       __delay_cycles(10);
   }
   return byte;
}

 

**************************************************************************************************

**                        当用一个DS18b20进行温度测量时步骤:                                 **
** 1 DS18b20 初始化                                                                          **
**  2 跳过 ROM                                                                                **
**  3 控制寄存器:进行温度转换、读9_data ROM、读取温度第八位、读取温度高八位                   **
    *******************************************************************************************

**  注意: 单总线,所以每次读写都要分开:                                                     **

**         写数据要初始化一次,把所有的数据都写进去                                          ** **        读数据要初始化一次,把所有的数据都读出来                                           **

**************************************************************************************************

 unsigned int get_one_temperature(void)
{
 unsigned int Temp_l;
 unsigned int Temp_h;
 
 DS18b20_init();
 DS18b20_write_byte(Skip_ROM);
 DS18b20_write_byte(Convert_Temperature);
 __delay_cycles(500000);
 
 DS18b20_init();
 DS18b20_write_byte(Skip_ROM);
 DS18b20_write_byte(Read_Scratchpad);
 Temp_l=DS18b20_read_byte();
 Temp_h=DS18b20_read_byte();
 Temp_l>>=4;
 Temp_h<<=4;
 Temp=Temp_h+Temp_l;
 return Temp;
}

 


关键字:DS18b20  温度检测 引用地址:DS18b20 温度检测说明

上一篇:LCD1602_8 data
下一篇:128*64液晶显示功能实现

推荐阅读最新更新时间:2024-03-16 15:25

DS18B20在空调检测系统温度采集模块中的应用
在空调生产过程中,为确保空调产品的质量,空调制造商在产品出厂前都必须对空调进行加热带、制热、制冷等环节的测试,通过标准机的电压、功率、输入管温、输出管温、回气温度、排气温度等参数判断空调是否合格,其中温度参数检测是整个空调检测系统的重要部分。 在传统的空调检测系统中,温度采集模块多以热电阻、热电偶为温度传感器,温度模拟信号必须经过专门的调理电路转换为数字信号后才能被单片机处理,使用一段时间后,系统检测到的温度值往往不够准确,同时由于温度采集点分布范围广,增加了布线难度,也给系统维护带来不便。 本文采用DS18B20数字温度传感器、AT89S52单片机,设计出适合空调检测现场的温度采集模块,实现现场16个采集点温度数据的同步采集和
[单片机]
<font color='red'>DS18B20</font>在空调检测系统温度采集模块中的应用
AVR单片机 ds18b20 gcc 源程序
//mega8 7.3728M Hz g CC 编译通过,_delay_us(us) _delay_ms(ms)调用库函数 //初始化把dq设置为输出 #define ds18b20_dq PC5 #define set_ds18b20_dq_ddr() DDRC|=1 ds18b20_dq #define set_ds18b20_dq() PORTC|=1 ds18b20_dq #define clr_ds18b20_dq() PORTC&=~(1 ds18b20_dq) #define clr_ds18b20_dq_ddr() DDRC&=~(1 ds18b20_dq) #define in_ds18b20_dq() PIN
[单片机]
DS18B20 在桥梁混凝土测温中的应用
摘 要: 摘要介绍美国DALLAS公司的单线数字温度传感器DS18B20在其前代产品DS1820基础上的新特性和与单片机的较详细的接口电路及读写时序,并针对它在桥梁混凝土测温系统的应用中出现的与硬件和软件有关的问题给出解决方法。 关键词: DS18B20 混凝土 测温单片机   概述   秦皇岛-沈阳高速铁路客运专线上有许多要架桥的路段,而在远离桥梁厂的野外现场浇制桥梁时,为保证梁身浇注的质量,须做到:① 养护时梁内任意两点之间的温度差不能超过规定值;② 混凝土浇注后14天的水
[测试测量]
5-基于51单片机的仓库三路温度检测调节系统设计
具体实现功能 具体功能: 1、采用三个DS18B20温度传感器测温并用LCD1602显示三个温度值,并显示三路温度平均值; 2、按键为设置按键、加键和减键,可设置上下限温度控制范围; 3、当平均温度值超过设定的上或下限时,相应的指示灯亮,同时相应的继电器吸合,继电器可以驱动负载工作; 4、当平均温度值超过设定的上限时,继电器吸合,风扇转动表示降温; 5、当平均温度值低于设定的下限时,继电器吸合,加热膜工作表示升温。 单片机介绍 51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多
[单片机]
5-基于51单片机的仓库三路<font color='red'>温度检测</font>调节系统设计
DS18B20温度单片机控制显示C程序
温度值精确到0.1度,lcd1602显示 仿真电路图如下 c程序如下: #include reg51.h #define uchar unsigned char #define uint unsigned int sbit DQ=P3^7;//ds18b20与单片机连接口 sbit RS=P3^0; sbit RW=P3^1; sbit EN=P3^2; unsigned char co de str1 ={ temperature: }; unsigned char co de str2 ={ }; uchar da ta disdata ; uint tvalue;//温度值 uchar tf
[单片机]
<font color='red'>DS18B20</font>温度单片机控制显示C程序
MSP430F149的智能火灾报警系统的设计方案
  摘要:以单片机MSP430F149 为主控芯片,设计出一款高精度、高集成度、超低功耗的智能火灾报警系统。以环境温度、烟雾浓度作为判断火灾的依据,完成了对火灾的预警。主要由单片机控制模块、时钟模块、烟雾浓度测量模块、DS18B20 温度测量模块、声光报警模块、1602液晶显示模块和电源构成。并且该系统以MSP430F149 为下位机,完成数据采集、预处理以及对现场装置的控制,以 PC 机为上位机,完成各种复杂的数据处理和对单片机的控制。设计的智能火灾报警系统具有较高的可靠性、稳定性、准确度高,对不同类型的火灾都具有较高的灵敏度,达到了降低误报率的目的。   引言   火灾严重威胁着人类的生命财产安全,每年我国由火灾引起的灾难
[单片机]
MSP430F149的智能火灾报警系统的设计方案
基于51单片机的温度检测及显示设计
由于高新技术的不断发展,仪器仪表的微型化,数字化已得到实现。90年代高精确度、高性能、多功能仪器仪表都已经采用微处理器件。而作为工业控制和自动化领域的各种新技术、新方法、新产品的发展趋势和显著标志智能化是自动化技术当前和今后发展的动向之一。本文采用AT89C52单片机开发了键盘、液晶显示器、多路温度检测来实现温度的采集、温度的文字显示和图形显示三个系统。实验证明,采用AT89C52开发的系统性能可靠、成本较低、软件设计灵活简单、硬件接口功能丰富,具有扩展性好、通用性强等优点。 1 元器件的选择 1.1 核心芯片的选择 AT89C52单片机价格低廉,输入输出口丰富,无需再另外扩展,简化了外围电路。256 B内部RAM,8
[单片机]
基于51单片机的<font color='red'>温度检测</font>及显示设计
AVR单片机采集DS18B20并LCD显示
#include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int #define beep_0 (PORTD = PORTD&0x7F) #define beep_1 (PORTD = PORTD|0x80) #define RS_0 PORTC &= ~(1 PC0) #define RS_1 PORTC |= (1 PC0) #define RW_0 PORTC &= ~(1 PC1) #define RW_1 PORTC |= (1 PC1) #define EN_0 PORTC &= ~(1 pc2)
[单片机]
AVR单片机采集<font color='red'>DS18B20</font>并LCD显示
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved