您的位置 首页 技术

单片机中运用DS18B20温度传感器C言语程序(参阅2)

/*————————————————————————————————–

/*—————————————————————————————————

功用:完成对DS18B20的读取

原理:单总线协议

留意:单总线协议对延时要求比较严厉,此程序中选用的是11.0592M的晶振,假如运用其他的晶振请跟据DS18B20的材料修正延时参数

版别:1.4b

最终修正时刻:2004年11月8号

开发人:鞠春阳

版权:哈尔滨众邦龙开发有限公司www.hitzbl.com 单片机坐标网:www.mcuzb.com

====================================================================================================*/

//#include”reg51.h”

sbit DQ =P1^4; //界说通讯端口

//延时函数

/*

void delay(unsigned int i)

{

while(i–);

}

*/

//初始化函数

Init_DS18B20(void)

{

unsigned char x=0;

DQ = 1; //DQ复位

delay(8); //稍做延时

DQ = 0; //单片机将DQ拉低

delay(80); //准确延时 大于 480us

DQ = 1; //拉高总线

delay(14);

x=DQ; //稍做延时后 假如x=0则初始化成功 x=1则初始化失利

delay(20);

}

//读一个字节

ReadOneChar(void)

{

unsigned char i=0;

unsigned char dat = 0;

for (i=8;i>0;i–)

{

DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80;

delay(4);

}

return(dat);

}

//写一个字节

WriteOneChar(unsigned char dat)

{

unsigned char i=0;

for (i=8; i>0; i–)

{

DQ = 0;

DQ = dat&0x01;

delay(5);

DQ = 1;

dat>>=1;

}

//delay(4);

}

//读取温度

ReadTemperature(void)

{

unsigned char a=0;

unsigned char b=0;

unsigned int t=0;

float tt=0;

Init_DS18B20();

WriteOneChar(0xCC); // 越过读序号列号的操作

WriteOneChar(0x44); // 发动温度转化

Init_DS18B20();

WriteOneChar(0xCC); //越过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个便是温度

a=ReadOneChar();

b=ReadOneChar();

t=b;

t<<=8;

t=t|a;

tt=t*0.0625;

//t= tt*10+0.5; //扩大10倍输出并四舍五入—此行没用

return(t);

}

main()

{

unsigned char i=0;

while(1)

{

i=ReadTemperature();//读温度

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/266321.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部