ds18b20显示温度不正确

来源:百度知道 编辑:UC知道 时间:2024/05/31 05:47:26
#include<reg52.h>
#include<intrins.h>
sbit DQ=P1^7;
sbit led=P1^0;
#define uchar unsigned char
#define uint unsigned char
uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
uchar data sex[3];
uchar num;
void delayus(uchar gaq)
{
while(gaq--);

}
void ds18b20rest() //复位
{
uchar x;
DQ=1;
delayus(2);
DQ=0;
delayus(80);
DQ=1;
delayus(5);
x=DQ;
delayus(18);
if(x) //判断初始化成功了么
led=0;
}
void ds18b20write(uchar date) //写函数
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=date&0x01;
delayus(7);
DQ=1;
date>>=1;
}
}
uchar ds18b20read() //读函数
{
uchar i,date;
for(i=0;i<8;i++)
{
DQ=0;
date>>=1;
DQ=1;
if(DQ)
date=date|0x80;
delayus(7);
}

只能测试0---15.9度,说明你只读取温度的低八位,也就是a=ds18b20read();

从程序上看,你的定义的uint。。。。#define uint unsigned char
定义错误,更改成#define uint unsigned int

所以在你temp<<=8; 之后,温度的th位是为0的。
temp=temp|a; //合并成一个字节
合成的温度就是温度的低八位。

先不说别的,你初始化成功了么
单步调试看看,初始化成功了么,你这个程序看LED,
void ds18b20rest() //复位
{
uchar x;
DQ=1;
delayus(2);
DQ=0;
delayus(80);
DQ=1;
delayus(5);
x=DQ;
delayus(18);
if(x) //判断初始化成功了么
led=0;
}