单片机学习笔记.单总线one-wire协议(这里以普中开发板DS18B20为例)
硬件原理图:
DS18B20数据图:
首先根据原理图定义对应引脚:
sbit OneWire_DQ=P3^7;
one-wire时序图:
one-wire初始化:
初始化时序分析:
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位 时序分析:
写一个位:
//写一个位
void OneWire_SendBit(unsigned char Bit)
{OneWire_DQ=0;Delay14us();//10usOneWire_DQ=Bit;Delay54us();//50usOneWire_DQ=1;
}
接收一位:
//接收一位
unsigned char OneWire_ReciveBit(void)
{unsigned char Bit;OneWire_DQ=0;Delay9us();//5usOneWire_DQ=1;Delay9us();//5usBit=OneWire_DQ;Delay54us();//50usreturn Bit;
}
写入1个字节:
//写入一个字节
void OneWire_SendByte(unsigned char Byte)
{unsigned char i;for(i=0;i<8;i++){OneWire_SendBit(Byte&(0x01<<i));}
}
发送1个字节:
//发送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;
}