【例 程】:
//基于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中文资料
|