用DS18B20测量温度
不知道为什么显示出来的温度和传感器上的值不一样。
下面是程序:
#include"ds18b20.h"
sbit Temp = P3^7;
uchar DS18B20Init(void)
{
uint i;
Temp = 0;
i = 103;
while(i>0) i--;
Temp = 1;
i=0;
while(Temp)
{
i++;
if(i>5000)
return 0;
}
return 1;
}
void DS18B20WriteByte(uchar date)
{
uint i=0,j;
for(j = 0; j < 8; j++)
{
Temp = 0;
i++;
Temp = date&0x01;
i = 6;
while(i--);
Temp = 1;
date >>= 1;
}
}
bit TempReadBit(void)
{
bit get;
uint i;
Temp = 0;
i++;
Temp = 1;
i++;i++;
get = Temp;
i=8;
while(i>0)i--;
return get;
}
uchar DS18B20ReadByte()
{
uchar i,j;
uchar datas=0;
uchar get;
for(i = 0; i < 8; i++)
{
get = TempReadBit();
datas = (datas>>1)|(get<<7);
j=4;
while(j--);
}
return datas;
}
void delaym(uint t)
{
uint i,j;
for(i = t; i > 0; i++)
{
for(j = 110; j > 0; j--);
}
}
int ReadTempData()
{
uint temph,templ,temp;
DS18B20Init();
delaym(1);
DS18B20WriteByte(0xcc);
DS18B20WriteByte(0xbe);
templ = DS18B20ReadByte();// 低八位
temph = DS18B20ReadByte();// 高八位
temp = temph;
temp <<= 8;
temp = templ|temp;
return temp;
}
void Transform(void)
{
DS18B20Init();
delaym(1);
DS18B20WriteByte(0xcc);
DS18B20WriteByte(0x44);
}
int GetTemp()
{
int temp;
Transform();
temp = ReadTempData();
return temp;
}
电路图