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);
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值