微控技术论坛
微控首页
MSP430基础资料
 
 
 
 
 
 
 
 
MC430F14例程:驱动单线DS18B20
                   这是国内卖得最为火热的MSP430单片机实验板之一!

【作  者】:
微控设计网
DC版主 原创

【例程简介】:
利用MC430F14开发板上MSP430与DS18B20进行读操作实验。
MCU读出来的温度数据后做数据处理,并在LCD12232中显示所测量到温度值。
 


【例  程】:
//基于MC430F14开发板实验例程
#include <msp430x14x.h>
//定义一个位设置,这样可以简化程序编写
#define DQ1 P5OUT|=BIT7
#define DQ0 P5OUT&=~BIT7
#define DQIO_OUT P5DIR|=BIT7
#define DQIO_IN P5DIR &= ~BIT7
#define positive 0x0f

//定义
unsigned char Error = 0;
float Temper=0.0;
int temperature=0;
unsigned char symbol = 1 ;

//----------------------------------
//功能:us 级别延时
//----------------------------------
void DelayNus(unsigned int n)
{
 while(n--){};
}

//-----------------------------------
//功能:写18B20
//-----------------------------------
void Write_18B20(unsigned char n)
{
 unsigned char i;
for(i=0;i<8;i++)
{
 DQ0;
 _NOP();_NOP();
 _NOP();_NOP();_NOP();
if((n&0X01)==0X01)
 DQ1;
else
 DQ0;
 n=n>>1; //下一位
 DelayNus(6);
 DQ1;
 }
}

//------------------------------------
//功能:读取18B20
//------------------------------------
unsigned char Read_18B20(void)
{
unsigned char i;
unsigned char temp;
for(i=0;i<8;i++)
{
temp=temp>>1; //移向下一位
DQ0;
_NOP();
DQ1;
_NOP();_NOP();
_NOP();

DQIO_IN;

if((P5IN&BIT7)==0)
 {
 temp=temp&0x7F;
 }
else
 {
 temp=temp|0x80;
 }
DelayNus(5);
DQIO_OUT;
DQ1;
}
return temp;
}
//-----------------------------------

//初始化DS18B20
void Init (void)
{
 DQ0;  
 DelayNus(50);
 DQ1;
 DelayNus(10);
DQIO_IN; //设DQ为输入
if((P5IN&BIT7)==BIT7)
 {
 Error =1;
 DQIO_OUT;
 }
else
 {
 Error = 0;
 DQIO_OUT;
 DQ1;
 }
}
//----------------------------------
//指令描述:跳过ROM命令,指定代码为CCH,忽略64位ROM地址,直接向DS1820发温度变换
//命令,适用于单片机工作.
void Skip(void)
{
Write_18B20(0xcc);
}


//----------------------------------
//指令描述:温度转换命令,指定代码为44H.启动DS1820进行温度转换,12位转换时最长
//为750ms(9位为93.75ms).结果存入内部9字节RAM中.
void Convert (void)
{
Write_18B20(0x44);
}
//----------------------------------
//指令描述:读暂存器,指定代码为BEH.读内部RAM中9字节的内容.
void ReadDo (void)
{
Write_18B20(0xbe);
}
//----------------------------------
//读取温度值
void ReadTemp (void)
{
char temp_low, temp_high; //温度值
temp_low = Read_18B20(); //读低位
temp_high = Read_18B20(); //读高位
if((temp_high|positive)==positive)
 symbol=1;
else
 symbol=0;
temperature=(temp_high&0x0f);
temperature<<=8;
temperature|=temp_low;

if(symbol==0) //是否为负温度
{ temperature = (~temperature)+1;
 }
 Temper=temperature*0.0625;
}

//----------------------------------
// 以上系列动作是根据DS18B20的通讯协议所得.
//读取温度
void GetTemp(void)
{
 Init(); //DS1820初始化
 Skip();
 Convert();
 DelayNus(60000);
 DelayNus(60000);
 DelayNus(60000);
 Init();
 Skip();
 ReadDo();
 ReadTemp();
}
//----------------------------------

  


【购买开发板】:
MC430F14开发板主页 查看上一个例程  查看下一个例程

        
购买流程查看      关于DS18B20中文资料

 

 
 
微控淘宝站授权专卖店
 
MSP430玩家DIY专区
 
Copyright© 2005-2009 All Rights Reserved

Http://www.microcontrol.cn  微控网

电邮: 电话:0755-81100430

微控网站备案序号:粤ICP备05102666号