📄 ds18b20.c
字号:
/************DS18B20初始化******/
uchar Ds18b20_Init(void)//存在返0.否则返1
{ uchar temp=1;
uchar outtime=ReDetectTime;//超时时间
while(outtime--&& temp)
{
IoOut_DQ();
Delay_us(2);//(250)1514us时间可以减小吗
ReleaseDQ();
Delay_us(2);
PullDownDQ();
Delay_us(600);//514us(480-960)
ReleaseDQ();
Delay_us(70);//73us(>60)
IoIn_DQ();
temp=ReadDQ();
Delay_us(500);//us
}
return temp;
}
/*************写bit2DS18B20***********/
void Ds18b20_WriteBit(uchar bitdata)
{ ioout_dq();
if(bitdata)
{
PullDownDQ();
Delay_us(2);//2us(>1us)
ReleaseDQ();//(上述1-15)
Delay_us(85);//86us(45-x,总时间>60)
}else
{
PullDownDQ();
Delay_us(2);//86us(60-120)
}
ReleaseDQ();
Delay_us(2);//2us(>1us)
}
/***********写Byte Ds18b20*********/
void Ds18b20_WriteByte(uchar chrdata)
{
uchar ii;
for(ii=0;ii<8;ii++)
{
Ds18b20_WriteBit(chardata &Ox01);
chadata>>=1;
}
}
/***********写Ds18b20*********/
void Ds18b20_Write(uchar *p_readdata,uchar butes)
{
while(bytes--)
{
Ds18b20_WriteByte(*p_readdata);
p_readdata++;
}
}
/**********读bit from Ds18b20*********/
uchar Ds18b20_ReadBit(void)
{
uchar bitdata;
IoOut_DQ();
PullDownDQ();
Delay_us(2);//2us(>1us)
ReleaseDQ();
Delay_us(8);//8us(<15us)
IoIn_DQ();
bitdata=ReadDQ();
Delay_us(85);//85us(上述总时间要>60us)
return bitdata;
}
/**********读 Byte Ds18b20 *********/
uchar Ds18b20_ReadByte(void)
{
uchar ii,chardata;
for(ii=0;ii<8;ii++)
{
chardata>>=1;
if(Ds18b20_ReadByte())chardata|=Ox80;
}
return chardata;
}
/**********读 Ds18b20 ROM**********/
bit Ds18b20_ReadRom(uchar *P_readdata)//成功返回0,失败返回1
{
uchar ii=8;
if(Ds18b20_Init()) return 1;
Ds18b20_WriteByte(ReadRom);
while(ii--)
{
*P_readdata=Ds18b20_ReadByte();
p_readdata++;
}
return 0;
}
/**********读 Ds18b20 EE**********/
uchar Di18b20_ReadEE(uchar *P_readdata)//成功返回0,失败返回1
{
uchar ii=9;
if(Ds18b20_Init())return 1;
Delay_us(1);
Ds18b20_WriteByte(SkipRom);
Delay_us(1);
Ds18b20_WriteByte(ReadScr);
Delay_us(1);
while(i--)
{
*p_readdata=Di18b20_ReadByte();
p_readdata++;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -