msp430f2618写DS18B20
Posted xxniuren
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了msp430f2618写DS18B20相关的知识,希望对你有一定的参考价值。
还是老样子,上程序,有要程序的直接加qq:705249212 要就可以了
#include "msp430x26x.h"
#include "18B20.h"
uchar value_bit; //读一个字节的数据
uint value_byte; //读两个字的数据
//============================================
void delay_18B20(uint xms)
uint i,j;
for(i = xms; i > 0 ;i--)
for(j = 246; j > 0; j--);
/*******************************************
函数名称:reset
功 能:DS18B20复位
参 数:无
返回值 :无
********************************************/
void reset(void)
uint i = 0;
write_DIR;
DATA_H;
i++;
DATA_L;
for(i = 180; i > 0;i--);
DATA_H;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
/*******************************************
函数名称:read_18B20
功 能:DS18B20读一个bit
参 数:无
返回值 :无
********************************************/
void read_18B20(void)
uint i = 0;
write_DIR;
DATA_H;
i++;
DATA_L;
i++;
i++;
DATA_H;
i++;
i++;
i++;
read_DIR;
i++;
if(P1IN&0X01) value_bit = 1;
else value_bit = 0;
i = 15;
while(i > 0)i--;
/*******************************************
函数名称:read_byte_18B20
功 能:DS18B20读一个byte
参 数:无
返回值 :无
********************************************/
void read_byte_18B20(void)
uchar i ;
uchar BYTE = 0x01 ; //0000 0001
for(i = 0; i < 8; i++)
read_18B20();
if(value_bit) value_byte = value_byte | BYTE;
else value_byte = value_byte & (~BYTE);
BYTE <<= 1; //左移一位
/*******************************************
函数名称:write_byte_18B20
功 能:DS18B20写一个byte
参 数:无
返回值 :无
********************************************/
void write_byte_18B20(uchar data)
uchar i = 0,j;
uchar testb;
write_DIR;
for(j = 0; j < 8; j++)
testb = data & 0x01;
data = data >> 1;
if(testb)
DATA_L;
i++;
i++;
i++;
i++;
DATA_H;
i = 15;
while(i > 0) i--;
else
DATA_L;
i = 15;
while(i > 0)i--;
DATA_H;
i++;
i++;
i++;
i++;
/*******************************************
函数名称:change_temp
功 能:温度转换
参 数:无
返回值 :无
********************************************/
void change_temp(void)
reset();
delay_18B20(1);
write_byte_18B20(0XCC);
write_byte_18B20(0X44);
/*******************************************
函数名称:get_temp
功 能:读出此时的温度
参 数:无
返回值 :无
********************************************/
void get_temp(void)
uchar a,b;
float f_temp; //转换后的温度值
reset();
delay_18B20(1);
write_byte_18B20(0XCC);
write_byte_18B20(0XBE);
read_byte_18B20(); //读寄存器
a = value_byte; //读出的是低八位
read_byte_18B20(); //读寄存器
b = value_byte; //读出的是高八位
temp = b;
temp = temp << 8;
temp = temp | a;
f_temp = temp * 0.0625; //精度
temp = (unsigned int)(f_temp * 100 + 0.5);//取到小数点后两位
H文件
#ifndef __18B20_H__
#define __18B20_H__
#define uchar unsigned char
#define uint unsigned int
#define write_DIR P1DIR |= BIT0
#define DATA_H P1OUT |= BIT0
#define DATA_L P1OUT &= ~BIT0
#define read_DIR P1DIR &= ~BIT0
extern uint temp; //综合后的温度
void delay_18B20(uint xms);
void reset(void);
void read_18B20(void);
void read_byte_18B20(void);
void write_byte_18B20(uchar data);
void change_temp(void);
void get_temp(void);
#endif
以上是关于msp430f2618写DS18B20的主要内容,如果未能解决你的问题,请参考以下文章