stm8 ds18b20读温度代码





void DS18B20_Init( void )
{
DS18B20_DQ_OUT;
DS18B20_DQ_PUSH_PULL;
DS18B20_DQ_HIGH;
Delay1us( 10 );
DS18B20_DQ_LOW;
Delay1us( 600 ); /*复位脉冲 */


DS18B20_DQ_IN;
DS18B20_DQ_PULL_UP;
Delay1us( 60 );
while ( DS18B20_DQ_VALUE == 1 )
;
Delay1us( 400 );
}




void DS18B20_WriteByte( unsigned char _data )
{
unsigned char i = 0;


DS18B20_DQ_OUT;
for ( i = 0; i < 8; i++ )
{
DS18B20_DQ_LOW;
Delay1us( 2 );
if ( _data & 0x01 )
{
DS18B20_DQ_HIGH;
}
_data >>= 1;
Delay1us( 60 );
DS18B20_DQ_HIGH;
}
}




unsigned char DS18B20_ReadByte( void )
{
unsigned char i = 0, _data = 0;


for ( i = 0; i < 8; i++ )
{
DS18B20_DQ_OUT;
DS18B20_DQ_LOW;
Delay1us( 5 );
_data >>= 1;
DS18B20_DQ_HIGH;
DS18B20_DQ_IN;
if ( DS18B20_DQ_VALUE )
{
_data |= 0x80;
}
DS18B20_DQ_OUT;
DS18B20_DQ_HIGH;
Delay1us( 60 );
}


return(_data);
}




float DS18B20_ReadTemperature( void )
{
unsigned char temp = 0;
float t = 0;


DS18B20_Init();
DS18B20_WriteByte( 0xcc );
DS18B20_WriteByte( 0x44 );


DS18B20_Init();
DS18B20_WriteByte( 0xcc );
DS18B20_WriteByte( 0xbe );


temp = DS18B20_ReadByte();
t = ( ( (temp & 0xf0) >> 4) + (temp & 0x07) * 0.125);
temp = DS18B20_ReadByte();
t += ( (temp & 0x0f) << 4);


return(t);
}

你可能感兴趣的:(stm8 ds18b20读温度代码)