硬件原理图:
DS18B20数据图:
首先根据原理图定义对应引脚:
cpp
sbit OneWire_DQ=P3^7;
one-wire时序图:
one-wire初始化:
初始化时序分析:
cpp
unsigned char OneWire_Init(void)
{
unsigned char AckBit;
OneWire_DQ=1;
OneWire_DQ=0;
Delay500us();
OneWire_DQ=1;
Delay70us();
AckBit=OneWire_DQ;
Delay500us();
return AckBit;
}
one-wire读/写 1位:
one-wire读/写 1位 时序分析:
写一个位:
cpp
//写一个位
void OneWire_SendBit(unsigned char Bit)
{
OneWire_DQ=0;
Delay14us();//10us
OneWire_DQ=Bit;
Delay54us();//50us
OneWire_DQ=1;
}
接收一位:
cpp
//接收一位
unsigned char OneWire_ReciveBit(void)
{
unsigned char Bit;
OneWire_DQ=0;
Delay9us();//5us
OneWire_DQ=1;
Delay9us();//5us
Bit=OneWire_DQ;
Delay54us();//50us
return Bit;
}
写入1个字节:
cpp
//写入一个字节
void OneWire_SendByte(unsigned char Byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
OneWire_SendBit(Byte&(0x01<<i));
}
}
发送1个字节:
cpp
//发送1个字节
unsigned char OneWire_ReciveByte(void)
{
unsigned char Byte=0x00;
unsigned char i;
for(i=0;i<8;i++)
{
if(OneWire_ReciveBit()){Byte|=(0x01<<i);}
}
return Byte;
}