One - Wire协议
DS18B20 使用OneWire协议,时序要求严格,不可被打断。
第一步:初始化
主机(Master)发出(Tx)最低480μs
,最高960μs
的低
电平信号。期间DS18B20主动拉高总线,共15 - 60μs
。然后DS18B20发出“存在脉冲
”,即将总线拉低
总线 60 - 240μs
。主机接收(Rx)这样的脉冲即可认为DS18B20初始化成功。接收过程不低于480μs
。
bit OneWire_Online() // 1 online 0 offline
{
bit Ack;
EA = 0;
OneWire_Port = 0;
OneWire_Delay(480);
OneWire_Port = 1;
OneWire_Delay(15);
Ack = OneWire_Port;
while(!OneWire_Port);
EA = 1;
return ~Ack;
}
第二步:写字节
主机发出低
电平1 - 15μs
(最低1μs,最高15μs)典型值为2μs
。 然后18B20开始采样 1 - 45μs 典型值为15μs
。
发0即保持低电平,发1即保持高电平。整个过程限时 60 - 120μs
。
void OneWire_Write(u8 dat)
{
u8 mask;
EA = 0;
for(mask