📄 ds18b20.c
字号:
//******************************************************************************
// MSP430F149
// -----------------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// | |
// | P2.5 |<----TEMP_DQ
// | |
//
// Copyright (c) WHUT,All Rights Reserved.
// [Author]:tkin
// [Email]:tkin1992@qq.com
// [Date]:2011/11/25
// Built with IAR Assembler for MSP430 5.30.1 (5.30.1.50284)
//******************************************************************************
#include <msp430x14x.h>
#include "DS18B20.h"
#define CPU_F ((double)8000000)
#define delayus(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delayms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define uchar unsigned char
#define uint unsigned int
//=========================================
//函数功能:初始化DS18B20
//=========================================
void Init_DS18B20()
{
//uchar x;
CLR_TEMP_DQ;
delayus(560); //480~960us
SET_TEMP_DQ;
delayus(60); //>=480us
//P2DIR &= ~(BIT5);
//x = TEMP_DQ_In; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
//P2DIR |= BIT5;
delayus(500);
}
//=========================================
//函数功能:读一字节
//=========================================
uchar ReadOneChar()
{
uchar i = 0;
uchar dat = 0;
for(i=0;i<8;i++)
{
CLR_TEMP_DQ;
delayus(15);
dat >>= 1;
SET_TEMP_DQ;
P2DIR &= ~(BIT5); //设置为输入
if(TEMP_DQ_In)
{
dat |= 0x80;
}
P2DIR |= BIT5; //设置为输出
delayus(45);
}
return dat;
}
//=========================================
//函数功能:写一个字节
//=========================================
void WriteOneChar(uchar dat)
{
uchar i = 0;
for(i=0;i<8;i++)
{
CLR_TEMP_DQ;
delayus(15);
if(dat & 0x01)
{
SET_TEMP_DQ;
}
else
{
CLR_TEMP_DQ;
}
delayus(45);
SET_TEMP_DQ;
dat >>= 1;
}
}
//=========================================
//函数功能:读取温度
//=========================================
uint Get_Temp()
{
uchar a = 0,b = 0;
uint temp = 0;
float f_temp = 0;
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44); //启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a = ReadOneChar(); //读低8位
b = ReadOneChar(); //读高8位
temp = (b << 8) | a;
f_temp = temp * 0.0625;
temp= f_temp * 10 + 0.5; //放大10倍输出并四舍五入
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -