打印

DS18B20温度传感器MSP430源代码

[复制链接]
878|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dirtwillfly|  楼主 | 2015-4-21 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

DS18B20温度传感器MSP430源代码.rar (5.4 KB)
#include"msp430x42x.h"

#include"DS18B20.h"


#define CPU_F ((double)1024000)   //CPU频率

#define delay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))   //延迟x微妙

#define delay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))  //延迟x毫秒


//DS18B20控制引脚定义

#define  DQ_OUT     P1DIR|=BIT0

#define  DQ_IN      P1DIR&=~BIT0

#define  DQ_H       P1OUT|=BIT0

#define  DQ_L       P1OUT&=~BIT0

#define  DQ_DATE    (P1IN&BIT0)


//DS18B20 ROM命令宏定义

#define ReadRom                     0x33

#define MatchRom            0x55

#define SearchRom           0xf0

#define AlertSearch          0xec

#define CopyScratchpad          0x48

#define SkipRom               0xcc

#define ReadPower           0xb4

//DS18B20功能命令宏定义

#define ConvertTemperature  0x44

#define ReadScratchpad           0xbe

#define WriteScratchpad          0x4e

#define RecallE                 0xb8


unsigned long int Temperature;

/****************************************************************************

*     称:unsigned char DS18B20_Init(void)

*     能:对DS18B20进行初始化

* 入口参数:

* 出口参数:

*     :

****************************************************************************/

unsigned char DS18B20_Init(void)

{

unsigned char result;

DQ_OUT;

DQ_L;   

delay_us(500);   //总线拉低480us~960us,即主机发送复位脉冲

DQ_IN;           //总线设为输入状态,等待18b20应答

delay_us(60);   

result=DQ_DATE;  //读取18b20应答信号

delay_us(500);   //等待480us以上,保证总线释放

return(result);  //返回0则初始化成功

}

/****************************************************************************

*     称:unsigned char DS18B20_ReadBit(void)

*     能:从DS18B20单总线上读1Bit

* 入口参数:

* 出口参数:

*     :

****************************************************************************/

unsigned char DS18B20_ReadBit(void)

{

unsigned char result;

DQ_OUT;     //设置总线为输出状态

DQ_L;       //总线拉低,产生读起始信号

_NOP();     //保证低电平在1us以上

//15us内读取总线上数据

DQ_IN;

result=DQ_DATE;   //接收数据

delay_us(60);     //延时60us,保证总线释放

return(result);   //返回数据

}

/****************************************************************************

*     称:void DS18B20_WriteBit(unsigned charData)

*     能:给DS18B20单总线上写1Bit

* 入口参数:

* 出口参数:

*     :

****************************************************************************/voidDS18B20_WriteBit(unsigned char Data)

{

DQ_OUT;       //设置总线为输出

DQ_L;         //产生写起始信号

delay_us(15);     //15us后写入数据   

if(Data) DQ_H;

else     DQ_L;

delay_us(60);     //延时60us~120us,保证总线释放

DQ_IN;            //空闲状态总线保持输入状态

}

/****************************************************************************

*     称:unsigned char DS18B20_ReadByte(void)

*     能:从DS18B20单总线上读1Byte

* 入口参数:

* 出口参数:

*     :

****************************************************************************/

unsigned char DS18B20_ReadByte(void)

{

unsigned char i,result=0;

for(i=0;i<8;i++)

  {

   result>>=1;

   if(DS18B20_ReadBit()) result|=0x80;

   else                  result&=0x7f;

  }

return(result);

}/****************************************************************************

*     称:void DS18B20_WriteByte(unsigned charData)

*     能:给DS18B20单总线上写1Byte

* 入口参数:

* 出口参数:

*     :

****************************************************************************/

void DS18B20_WriteByte(unsigned char Data)

{

unsigned char i;

for(i=0;i<8;i++)

  {

   DS18B20_WriteBit(Data&0x01);

   Data>>=1;

  }

}

/****************************************************************************

*     称:void DS18B20_ReadTemp(void)

*     能:从DS18B20上读取温度值

* 入口参数:

* 出口参数:

*     :

****************************************************************************/

void DS18B20_ReadTemp(void)

{      

unsigned char tempH,tempL;

  

DS18B20_Init();

DS18B20_WriteByte(SkipRom);

  DS18B20_WriteByte(ConvertTemperature);

delay_us(800000);           //延时1s左右

  

DS18B20_Init();

DS18B20_WriteByte(SkipRom);

DS18B20_WriteByte(ReadScratchpad);


tempL=DS18B20_ReadByte();   //读温度低字节

tempH=DS18B20_ReadByte();   //读温度高字节

  

  //未考虑温度为负情况

Temperature=tempH;

Temperature<<=8;

Temperature+=tempL;

Temperature=0.625*Temperature;

}

相关帖子

沙发
perry_peng| | 2015-4-22 08:45 | 只看该作者
谢谢分享。:handshake

使用特权

评论回复
板凳
smilingangel| | 2015-4-22 19:53 | 只看该作者
这个程序很不错的,不过这种只能做一般的温度测量。

使用特权

评论回复
地板
quray1985| | 2015-4-30 09:41 | 只看该作者
这个芯片应用是太广泛了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎进入TI MCU论坛      21ic TI技术交流1群:61549143(已满),  21ic TI技术交流2群:311421422 我的博客:http://blog.timcu.com/

1180

主题

34793

帖子

1116

粉丝