//==========================================================================//
//向18b20写数据
//==========================================================================//
void Write18B20_byte(uchar data)
{
uchar i,dat;
for(i=0;i<8;i++)
{
SysCtlPeriEnable(DQ_PERIPH); // 使能GPIOB端口
GPIOPinTypeOut(DQ_PORT , DQ_PIN); // 设置PB0输出类型
GPIOPinWrite(DQ_PORT , DQ_PIN , 0x00); // PB0输出低电平
Delay(18);
dat=data & 0x01;
GPIOPinWrite(DQ_PORT , DQ_PIN , dat);
GPIOPinRead(DQ_PORT , DQ_PIN);
Delay(50);
GPIOPinTypeOut(DQ_PORT , DQ_PIN);
GPIOPinWrite(DQ_PORT , DQ_PIN , 0xff);
data>>=1;
}
Delay(5* (TheSysClock / 4000));
}
//==========================================================================//
//读取18b20数据
//==========================================================================//
uchar Read18B20_byte(void)
{
uint i;
uchar value;
for(i=0;i<8;i++)
{
SysCtlPeriEnable(DQ_PERIPH); // 使能GPIOB端口
GPIOPinTypeOut(DQ_PORT , DQ_PIN); // 设置PB0输出类型
GPIOPinWrite(DQ_PORT , DQ_PIN , 0x00); // PB0输出低电平
Delay(5);
value>>=1;
GPIOPinWrite(DQ_PORT , DQ_PIN , 0xff);
Delay(40); // 延时2us
if(GPIOPinRead(DQ_PORT , DQ_PIN))
value|=0x80;
Delay(3 * (TheSysClock / 4000));
}
return (value);
}
//===========================================================================//
//18b20测温程序
//===========================================================================//
uint readtemp(void)
{
unsigned char TemL,TemH;
Init_DS18B20(); //复位18b20
Delay(1200); //时 //延时300us
Write18B20_byte(0xcc); //跳过ROM区域 //延时10us
Write18B20_byte(0x44); //温度转换
Delay(1200); //延时1s
Init_DS18B20();
Write18B20_byte(0xcc); //跳过ROM区域 //延时10us
Write18B20_byte(0xbe);
TemL=Read18B20_byte(); //读低位温度值
TemH=Read18B20_byte(); //读高位温度值
TemH<<=4;
TemH+=(TemL&0xf0)>>4;
TemH=TemH*(0.0625);
return (TemH);
}
/*******************************************************************/
void Delay(uint val)
{
uint i;
for(;val>0;val--)
for(i=0;i<3;i++);
}
温度传感器18b20一直显示15,这是为什么?各位大侠帮助....