产品快速通道
热电阻
PT1000
温度传感器
热电偶
一体化温度变送器
隔离变送器
湿度传感器
温湿度传感器
湿度变送器
温湿度变送器
压力变送器
压力传感器
液位计
液位变送器
液位传感器
温度巡检仪
ds18b20
巡检仪
数据采集
温控器
温度控制器
铂热电阻
PT100
差压变送器
温度变送器
水位传感器
湿度控制器
温湿度控制器
 
实现对ds18b20的读取
文章类型:行业新闻   文章加入时间:2008年9月3日9:40

实现对ds18b20的读取 

#include"reg51.h"
sbit DQ =P2^5;   //定义通信端口
//延时函数
void delay(unsigned int i)
{
 while(i--);
}
//初始化函数
bit 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);
 return (x);
}
//读一个字节
char 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);
}
//写一个字节
void 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);
}
//读取温度
int ReadTemperature(void)
{
 unsigned char a=0;
 unsigned char b=0;
 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;
 return(t);
}
main()
{
 int Temp=0;
 while(1)
   {
    Temp=ReadTemperature();//读温度
   }
}
文章出处:动态网站制作指南
文章作者:SAYYES
新 闻 推 荐