//复位
bool DS18B20::Reset(void)
{
u8 ok=1,j=10;
while(ok&&j--)
{
DQ_LOW() ; //?÷?ú??????????
delay_us(500);
DQ_HIGH(); //??·?×???????×è????×???,??±???15~60us
delay_us(65);
if(DQ_IsHigh())
ok=1; //????????????????????????????
else ok=0; //??????????????
delay_us(420);
}
if(j==0) return false;
else return true;
}
//-----------------------------------------------
//写字节
void DS18B20::Wrbyte(u8 val)
{
u8 i;
for(i=8;i>0;i--)
{
DQ_LOW(); //??????????????,?ú?ú???±????
delay_us(5);
if((val&0x01))
DQ_HIGH(); //??????1,????????
delay_us(65);
DQ_HIGH();
delay_us(5);
val>>=1; //????????
}
}
//------------------------------------------------
//读字节
u8 DS18B20::Rdbyte(void)
{
u8 i;
u8 value=0; //????????
for(i=8;i>0;i--)
{
value>>=1;
DQ_LOW();
delay_us(5);
DQ_HIGH(); //??????????
delay_us(5);
if(DQ_IsHigh()) value|=0x80;
delay_us(65);
}
return(value);
}
//============================
//读取ID
void DS18B20::ReadID(u8 *IDdata)
{
u8 i = 0;
Reset(); //????18b20
Wrbyte(ReadRom); //??ROM
for(i=8;i>0;i--)
*IDdata++ = Rdbyte();
}
|