×
嵌入式 > 技术百科 > 详情

STM8 DS18B20温度传感器子程序

发布时间:2024-05-21 发布时间:
|

软件设计

/*********************************************************************

目 的: 建立DS18B20操作库

目标系统: 基于STM8单片机

应用软件: Cosmic CxSTM8

*********************************************************************/


void _delay_us(u8 us)

{

while(--us);

}


//-----复位-----

void resetOnewire(void)

{

OUT_DQ();

CLR_DQ();

_delay_us(750);

SET_DQ();

_delay_us(100);

IN_DQ();

//while(GET_DQ());

while(!(GET_DQ()));

SET_DQ();

}


//-----读数据-----

u8 rOnewire(void)

{

u8 data=0,i=0;

for(i=0;i<8;i++)

{

data=data>>1;

OUT_DQ();

CLR_DQ();

IN_DQ();

if(GET_DQ()) data|=0x80;

else while(!(GET_DQ()));

_delay_us(60);

}

return(data);

}

//-----写数据-----

void wOnewire(u8 data)

{

u8 i=0;

OUT_DQ();

for(i=0;i<8;i++)

{

CLR_DQ();

if(data&0x01)

{

SET_DQ();

}

else

{

CLR_DQ();

}

data=data>>1;

_delay_us(60); //65

SET_DQ();

}

}


//-----DS18B20转换温度-----

void convertDs18b20(void)

{

resetOnewire();

wOnewire(0xcc);

wOnewire(0x44);

}

//------------DS18BB0读温度----------

u8 readTemp(void)

{

u8 temp1,temp2;

convertDs18b20();

resetOnewire();

wOnewire(0xcc);

wOnewire(0xbe);

temp1=rOnewire();

temp2=rOnewire();

temp2=temp2<<4;

temp1=temp1>>4;

temp2|=temp1;

return (temp2&0x7F);

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机与PC机的通讯介绍02