这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 设计工具 » DS18B20驱动程序

共1条 1/1 1 跳转至

DS18B20驱动程序

高工
2013-10-25 15:49:38     打赏

头文件部分:

#ifndef __DS18B20_H__

#define __DS18B20_H__

#define uint8 unsigned char

#define uint16 unsigned int

sbit DQ=P3^7;

uint16 get_temp();

#endif

程序部分:

#include

#include DS18B20.h

#include

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

* 函数名称:write_byte(uint8 num)

* 功 能:向18B20写数据

* 入口参数:要写的一个字节的数据

* 出口参数:无

* 返 回 值:无

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

void write_byte(uint8 num)

{

uint8 i;

uint16 tt;

bit m;

for(i=0;i8;i++)

{

m=num0x01;

num>>=1;

DQ=1;

DQ=0;

tt++;

DQ=m;

for(tt=0;tt7;tt++);

DQ=1;

tt++;

}

}

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

* 函数名称:read_byte()

* 功 能:向18B20读数据

* 入口参数:无

* 出口参数:无

* 返 回 值:读出的一个字节数据

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

uint8 read_byte()

{

uint8 i,num;

uint16 tt;

bit m;

for(i=0;i8;i++)

{

DQ=1;

DQ=0;

tt++;

DQ=1;

tt++;

m=DQ;

for(tt=0;tt7;tt++);

DQ=1;

num>>=1;

if(m)

{

num|=0x80;

}

}

return(num);

}

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

* 函数名称:DS18b20_reset()

* 功 能:18B20复位

* 入口参数:无

* 出口参数:无

* 返 回 值:无

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

void DS18b20_reset()

{

bit m=1;

uint16 tt;

while(m)

{

while(m)

{

DQ=1;

DQ=0;

for(tt=0;tt80;tt++);

DQ=1;

for(tt=0;tt5;tt++);

m=DQ;

}

for(tt=0;tt50;tt++);

m=~DQ;

}

DQ=1;

}

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

* 函数名称:start_temp()

* 功 能:启动温度转换

* 入口参数:无

* 出口参数:无

* 返 回 值:无

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

void start_temp()

{

DS18b20_reset();

write_byte(0xCC); // 发Skip ROM命令

write_byte(0x44); // 发转换命令

}

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

* 函数名称:get_temp()

* 功 能:获取温度值

* 入口参数:无

* 出口参数:无

* 返 回 值:18B20的双字节温度

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

uint16 get_temp()

{

uint8 a,b;

uint16 temp;

DS18b20_reset();

write_byte(0xCC); //发Skip ROM命令

write_byte(0xBE); //发read命令

a=read_byte(); //低8位

b=read_byte(); //高8位

temp=b8;

temp|=a;

start_temp();

return(temp);

}




关键词: datasheet中文资料     datasheet p    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]