您的位置:首页技术文栏LED应用
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

DS18B20测温程序

[日期:2008-01-09 ] [来源: 作者:] [字体: (投递新闻)

单片机C语言教程:V2.0 DS18B20测温

 

作者:江在流    教程来源:转载    点击数:183    更新时间:2006-11-26

#include"reg51.h"

sfr WDTRST = 0xA6;

sbit DQ =P2^2;   //定义通信端口

//延时函数

void delay(unsigned int i)

{

     while(i--);

     WDTRST=0x1E;

     WDTRST=0xE1;//喂狗指令,晶振为12M时每16个毫秒需喂狗一次

}

//初始化函数

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 char t=0;

Init_DS18B20();

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

WriteOneChar(0x44); // 启动温度转换

Init_DS18B20();

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

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

a=ReadOneChar();   //读取温度值低位

b=ReadOneChar();   //读取温度值高位

a=a>>4;            //低位右移4位,舍弃小数部分

t=b<<4;            //高位左移4位,舍弃符号位

t=t|a;            

return(t);

}

 

 

阅读:
录入:admin

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐