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_inP2DIR &= ~BIT4
#define DQ_outP2DIR |= BIT4
#define DQ_val(P2IN & BIT4)
#define Read_ROM0x33//读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 intDS18b20_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;
}