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的主要内容,如果未能解决你的问题,请参考以下文章

msp430f2618写16位双通道 SPI接口DA DAC8552 精确度超高

msp430f2618捕获方波

ds18b20采集温度并上报服务器

ds18b20

使用天祥TX-1C调试DS18B20温度传感器的收获

温度传感器DS18B20