新人问DS18B20时序
时间:10-02
整理:3721RD
点击:
最近看了看DS18B20的手册,也有对应的程序。可是有些不理解它的时序,从而程序也有些不太懂。
这是我在手册里的截图,写的时序我看明白了,可读的不是很懂。在看程序的时候会现有一个低脉冲。拉低后又拉高之后再读取数据,这是为什么?时序图上也没有那个低脉冲啊?
附上 读的程序
unsigned char Read18B20()
{
unsigned char dat;
unsigned char mask;
EA = 0;
for(mask=0x01; mask!=0; mask<<=1)
{
IO_18B20 = 0;
_nop_();
_nop_();
IO_18B20 = 1;
_nop_();
_nop_();
if(!IO_18B20)
dat &= ~mask;
else
dat |= mask;
DelayX10us(6);
}
EA = 1;
return dat;
}
这是我在手册里的截图,写的时序我看明白了,可读的不是很懂。在看程序的时候会现有一个低脉冲。拉低后又拉高之后再读取数据,这是为什么?时序图上也没有那个低脉冲啊?
附上 读的程序
unsigned char Read18B20()
{
unsigned char dat;
unsigned char mask;
EA = 0;
for(mask=0x01; mask!=0; mask<<=1)
{
IO_18B20 = 0;
_nop_();
_nop_();
IO_18B20 = 1;
_nop_();
_nop_();
if(!IO_18B20)
dat &= ~mask;
else
dat |= mask;
DelayX10us(6);
}
EA = 1;
return dat;
}
for(mask=0x01; mask!=0; mask<<=1)
{
IO_18B20 = 0; //这里拉低,出现下降沿,通知18B20准备往外输出数据,
_nop_();
_nop_();
IO_18B20 = 1; //这里拉高,把数据总线让出,准备接收18B20的数据。看看18B20到底是怎么输出的。是维持高电平,还是拉低数据线。
_nop_();
_nop_();
if(!IO_18B20)
dat &= ~mask;
else
dat |= mask;
DelayX10us(6);
}
EA = 1;