新人问DS18B20时序

2019-07-15 18:31发布

最近看了看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;
}



QQ截图20140915231725.png.thumb.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
qduwg
2019-07-15 23:55
   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;

一周热门 更多>