打印

怎么根据DS18B20读写时序写驱动程序

[复制链接]
2084|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 konglingfei0615 于 2013-8-3 10:09 编辑

最近看DS18B20,发现读时序与程序对应不起来,到底怎么看?         

#include <msp430x14x.h>
#define DQ1 P1OUT |= BIT7
#define DQ0 P1OUT &= ~BIT7
#define DQOUT P1DIR |= BIT7
#define DQIN P1DIR &= ~BIT7



/*******************************************
函数名称:Read_Byte
功    能:从DS18B20中读出1字节数据
参    数:无
返回值  :temp
********************************************/
uchar Read_Byte()
{
  uchar i,temp;
  for(i=0;i<8;i++)
  {  
    DQOUT;//主机输出状态
    temp >>= 1;//8位依次接收
    DQ0;//低电平至少1us
    Delayus(6);
    DQ1;      //这边为什么要置高电平,时序中没有啊????
    Delayus(8);
    DQIN;//主机接收状态,采样总线
    if(P1IN & BIT7)//总线为1
    {
      temp |= 0x80;
    }
    Delayus(45);
    DQOUT;//主机切换为输出状态
    DQ1;//切换为高电平空闲状态
    Delayus(10);
  }
  return temp;
}






相关帖子

沙发
konglingfei0615|  楼主 | 2013-8-6 07:56 | 只看该作者
大家有什么高见谈谈啊

使用特权

评论回复
板凳
yulunna| | 2013-8-6 08:17 | 只看该作者
我写的时候跟着时钟往后走,该高时高,该低时低,建立保持只要满足最小就行了。。。。。:lol

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
konglingfei0615 + 3
地板
shell.albert| | 2013-8-6 08:59 | 只看该作者
记得DS18B20是1-Wire线的,一根线,既做为输入又做为输出。输出时置PIN为输出,输入时置PIN为输入。这点要注意啦。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
konglingfei0615 + 3
5
qzc13457| | 2013-8-6 11:33 | 只看该作者
参考实例改写一下多好,俺就是这么用的。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
konglingfei0615 + 3
6
konglingfei0615|  楼主 | 2013-8-7 22:42 | 只看该作者
yulunna 发表于 2013-8-6 08:17
我写的时候跟着时钟往后走,该高时高,该低时低,建立保持只要满足最小就行了。。。。。 ...

我也是看着时序写的,但是写完后读不出值,于是找了个例程看了下发现跟时序有一点不一样,有点不解。

使用特权

评论回复
7
konglingfei0615|  楼主 | 2013-8-7 22:45 | 只看该作者
shell.albert 发表于 2013-8-6 08:59
记得DS18B20是1-Wire线的,一根线,既做为输入又做为输出。输出时置PIN为输出,输入时置PIN为输入。这点要 ...

这个有注意的,就是不知道为什么先置高

使用特权

评论回复
8
konglingfei0615|  楼主 | 2013-8-7 22:45 | 只看该作者
qzc13457 发表于 2013-8-6 11:33
参考实例改写一下多好,俺就是这么用的。

还是要会看时序图为好

使用特权

评论回复
9
xtpi| | 2013-8-7 23:04 | 只看该作者
时序图是一个很好的注解呀,很重要的东东呀,得好好看看 ,看明白才行哦!!

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
konglingfei0615 + 2
10
fe07fe| | 2013-8-8 07:01 | 只看该作者
你在哪里找了个笨蛋程序啊,这种笨蛋程序就是笨蛋写的复杂,不要什么都怪自己,责任是其他人的。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
konglingfei0615 + 2
11
qzc13457| | 2013-8-8 07:53 | 只看该作者
konglingfei0615 发表于 2013-8-7 22:45
还是要会看时序图为好

恩恩,会看时序图是硬功夫,哈哈

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
konglingfei0615 + 3
12
stupidboy456| | 2013-8-8 08:11 | 只看该作者
加油啊,,温度采集,,

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
konglingfei0615 + 3
13
konglingfei0615|  楼主 | 2013-8-8 08:13 | 只看该作者
stupidboy456 发表于 2013-8-8 08:11
加油啊,,温度采集,,

温度已经能采集显示了,不过驱动程序里有一点不怎么懂

使用特权

评论回复
14
konglingfei0615|  楼主 | 2013-8-8 08:20 | 只看该作者
qzc13457 发表于 2013-8-8 07:53
恩恩,会看时序图是硬功夫,哈哈

对哦,基本技能之一

使用特权

评论回复
15
konglingfei0615|  楼主 | 2013-8-8 08:22 | 只看该作者
fe07fe 发表于 2013-8-8 07:01
你在哪里找了个笨蛋程序啊,这种笨蛋程序就是笨蛋写的复杂,不要什么都怪自己,责任是其他人的。 ...

:L 但是人家的程序是可以正常运行的,而且删掉那句置高的语句就不能正常采集温度了

使用特权

评论回复
16
fe07fe| | 2013-8-9 05:08 | 只看该作者
konglingfei0615 发表于 2013-8-8 08:22
但是人家的程序是可以正常运行的,而且删掉那句置高的语句就不能正常采集温度了 ...

那些defind定义是屏蔽其他位的影响,读取的时候只读哪一位,写的时候也只写哪一位,不影响其他的,为了做到这些就写到这吗复杂  DQ1 P1OUT |= BIT7
你把它拆了就行,我呢不会,技术差劲,自己弄,我也是看的。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
konglingfei0615 + 3
17
叶伤| | 2013-8-9 09:25 | 只看该作者
置高了才能采到数据,拉高了才能让DS1820把IO拉低,数据有效。拉低了,DS1820拉高就拉不起来了,好好看IO结构示意图

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
konglingfei0615 + 3
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

136

帖子

0

粉丝