打印
[51单片机]

新人问DS18B20时序

[复制链接]
1286|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近看了看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 (61.67 KB )

QQ截图20140915231725.png

相关帖子

沙发
d865841995|  楼主 | 2014-9-17 08:30 | 只看该作者
大家来帮帮忙啊?新人不懂,特来求助!

使用特权

评论回复
板凳
znmcu| | 2014-9-17 08:51 | 只看该作者
振南的《单片机基础外设9日通》 [第四日 DS18B20 温度传感器]
http://www.znmcu.cn/zntec_js_jrt_ds18.html

视频教程课程主要内容:

1、认识DS18B20
2、基础资源模块上的DS18B20      
      1)电路讲解   
      2)模块实物介绍
3、DS18B20的驱动方法详解      
      1)单总线接口时序        
         a.复位过程   
         b.读过程   
         c.写过程      
      2)主要功能部件         
         a.ROM        
         b.暂存器            
      3)指令集      
      4)读取温度的方法         
         a.精度设置   
         b.多点读取   
         c.单点读取      
      5)得到最终的温度值   


使用特权

评论回复
地板
ningling_21| | 2014-9-17 13:01 | 只看该作者
这个和使用的单片机的类型有关,如果IO是准双向口则读状态之前需先写1...

使用特权

评论回复
5
d865841995|  楼主 | 2014-9-17 21:25 | 只看该作者
ningling_21 发表于 2014-9-17 13:01
这个和使用的单片机的类型有关,如果IO是准双向口则读状态之前需先写1...

不明白。。。。。。。。。。。。。。。。。。
为什么准双向口要先写1?
要是不是很好说清楚,能推荐我看哪方面的资料可以搞懂这个么?

使用特权

评论回复
6
ningling_21| | 2014-9-18 08:06 | 只看该作者
d865841995 发表于 2014-9-17 21:25
不明白。。。。。。。。。。。。。。。。。。
为什么准双向口要先写1?
要是不是很好说清楚,能推荐我看 ...

推荐《匠人手记》 ,可以好好看看...

使用特权

评论回复
7
d865841995|  楼主 | 2014-9-18 09:40 | 只看该作者
ningling_21 发表于 2014-9-18 08:06
推荐《匠人手记》 ,可以好好看看...

找了找这个资料,不知道是不是我找的不对的问题。似乎里面没有讲这个的?能具体给我说说这个问题么?谢谢

使用特权

评论回复
8
ningling_21| | 2014-9-18 09:44 | 只看该作者
d865841995 发表于 2014-9-18 09:40
找了找这个资料,不知道是不是我找的不对的问题。似乎里面没有讲这个的?能具体给我说说这个问题么?谢谢 ...

你干脆去百度一下,准双向口和双向口有什么区别 ,更快些...

使用特权

评论回复
9
d865841995|  楼主 | 2014-9-18 21:32 | 只看该作者
ningling_21 发表于 2014-9-18 09:44
你干脆去百度一下,准双向口和双向口有什么区别 ,更快些...

我明白准双向IO口了。要是低电平的话读取会出错!可我还是想问下,咱们把IO口拉高后读取数据,那样也不符合DS18B20的时序图啊,图中没有让拉高啊!!新人不懂,望勿喷。。。。。

使用特权

评论回复
10
d865841995|  楼主 | 2014-9-28 07:24 | 只看该作者
ningling_21 发表于 2014-9-18 09:44
你干脆去百度一下,准双向口和双向口有什么区别 ,更快些...

准双向IO口我明白了,不过如果读取钱直接拉高IO口的话那就不符合DS18B20的时序了啊?时序图里一直是低电平,这样做也是可以的么?为什么?还是我时序图看的不明白,望高手赐教,不胜感激!

使用特权

评论回复
11
ningling_21| | 2014-9-28 11:52 | 只看该作者
d865841995 发表于 2014-9-28 07:24
准双向IO口我明白了,不过如果读取钱直接拉高IO口的话那就不符合DS18B20的时序了啊?时序图里一直是低电 ...

读取前先写1,如果线上是0,它会马上变成0(如果是1就不变)并不影响读取高低状态...

使用特权

评论回复
12
d865841995|  楼主 | 2014-9-28 22:01 | 只看该作者
ningling_21 发表于 2014-9-28 11:52
读取前先写1,如果线上是0,它会马上变成0(如果是1就不变)并不影响读取高低状态... ...

如果线上是0,它会马上变成0(如果是1就不变)并不影响读取高低状态..

这句明白了,不过这样的话也就没有写 1 啊,15US后就不必保持高电平了,可以做其他的时序操作了
问题有点白,高手别介意哈。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

293

帖子

6

粉丝