{
u8i,tmp=0;
for(i=0;i<8;i++)
{
dsbDQStat(0);//控制器拉低总线
tmp>>=1;//低位开始读
dsbDQStat(1);//释放总线
if(dsb_DQ)tmp|=0x80;
delay15us();
delay45us();//控制周期时间
}
returntmp;
}
3.写时序图分析:
首先由控制器拉低总线15us,之后,如果要写入0,则继续拉低总线并为此45us.如果要写入1则释放总线由上拉电阻拉高总线,也为此45us。写时序相对比较简单,转换为代码如下:
voiddsbWriteByte(u8dat)//写一个字节的数据,从低位开始
{
u8i;
for(i=0;i<8;i++)
{
dsbDQStat(0);//控制器拉低总线
delay15us();//维持15us
if(dat&0x01)dsbDQStat(1);
elsedsbDQStat(0);
dat>>=1;
delay45us();
dsbDQStat(1);//45us后释放总线
}
}
DS18B20的三个时序图就分析完了,DS18B20只是单总线数据通信中的一个例子,大家了解了DS18B20时序图的分析,那么就可以试试分析DHT11的时序图完成其初始化函数,以及读数据函数。
关于接口,总线,驱动就介绍完了,您有什么想法可以联系小编。