|
我用18B20做温度检测,当温度上升到40度的时候就出错?温度值达到最高!!!就像没有接温度传感器一样,前面的数据都正常?请教高手指点。
程序如下:
/*******************************************************
*函数名称:delay_10us
*函数功能:延时程序 46个时钟
*******************************************************/
void delay_10us(void)
{
unsigned char i=3;
while(i--)
{
_NOP();
_NOP();
_NOP();
_NOP();
}
}
void delay_5us(void)
{
unsigned char i=1;
while(i--)
{
_NOP();
_NOP();
_NOP();
_NOP();
}
}
/*******************************************************
*函数名称:delay_100us
*函数功能:延时程序
*******************************************************/
void delay_100us(unsigned char i)
{
unsigned char temp1;
while(i--)
{
temp1=8;
while(temp1--)
{
delay_10us();
}
}
}
/*******************************************************
*函数名称:delay_ms
*函数功能:延时程序
*******************************************************/
void delay_ms(unsigned char i)
{
unsigned char temp1;
while(i--)
{
temp1=85;
while(temp1--)
{
delay_10us();
}
}
}
unsigned char RES_DS18B20()
{
unsigned char i;
DS18B20_OUT_SET;
DS18B20_OUT_H;
_NOP();
DS18B20_OUT_L;
delay_100us(8);
for(i=3;i>0;i--)//-----------------------------------------------------------
delay_10us();
DS18B20_OUT_H;
_NOP();
for(i=5;i>0;i--)
delay_10us();
DS18B20_IN_SET;
flag_T=DS18B20_IN_DA&BIT1;
delay_100us(2);
return flag_T;
}
void Write_Byte(unsigned char Data)
{
unsigned char i;
for(i=0;i<8;i++)
{
DS18B20_OUT_SET;
DS18B20_OUT_L;
delay_5us();
delay_10us();
delay_10us();
delay_10us();//--------------------------------------------------------------
if(Data&0x01==1)
{
DS18B20_OUT_H;
}
else
{
DS18B20_OUT_L;
}
delay_10us();
delay_10us();
delay_10us();
delay_10us();
delay_10us();
delay_10us();
DS18B20_OUT_H;
delay_5us();
Data=Data/2;
}
}
unsigned char Read_Byte()
{
unsigned char i;
unsigned char Data_d;
for(i=0;i<8;i++)
{
DS18B20_OUT_SET;
DS18B20_OUT_L;
delay_5us();
delay_10us();//--------------------------------------------------------------
delay_10us();//--------------------------------------------------------------
delay_10us();//--------------------------------------------------------------
Data_d>>=1;
DS18B20_OUT_H;
DS18B20_IN_SET;
if(DS18B20_IN_DA&BIT1)
{
Data_d|=0x80;
}
delay_10us();
delay_10us();
delay_10us();
delay_10us();
delay_10us();//--------------------------------------------------------------
delay_10us();//--------------------------------------------------------------
delay_10us();//--------------------------------------------------------------
_NOP();
}
return Data_d;
}
unsigned Get_Temp()
{
unsigned char Tmep_H,Tmep_L;
RES_DS18B20();
Write_Byte(0xcc);
Write_Byte(0x44);
RES_DS18B20();
Write_Byte(0xcc);
Write_Byte(0xbe);
delay_10us();//--------------------------------------------------------------
delay_10us();//--------------------------------------------------------------
delay_10us();//--------------------------------------------------------------
delay_10us();//--------------------------------------------------------------
delay_10us();//--------------------------------------------------------------
delay_10us();//--------------------------------------------------------------
Tmep_L=Read_Byte();
Tmep_H=Read_Byte();
Tmep_Da=(Tmep_H<<4)|(Tmep_L>>4);
return Tmep_Da;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|