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

[复制链接]
2616|16
 楼主| konglingfei0615 发表于 2013-8-3 10:04 | 显示全部楼层 |阅读模式
本帖最后由 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

查看全部评分

qzc13457 发表于 2013-8-6 11:33 | 显示全部楼层
参考实例改写一下多好,俺就是这么用的。

评分

参与人数 1威望 +3 收起 理由
konglingfei0615 + 3

查看全部评分

 楼主| konglingfei0615 发表于 2013-8-7 22:42 | 显示全部楼层
yulunna 发表于 2013-8-6 08:17
我写的时候跟着时钟往后走,该高时高,该低时低,建立保持只要满足最小就行了。。。。。 ...

我也是看着时序写的,但是写完后读不出值,于是找了个例程看了下发现跟时序有一点不一样,有点不解。
 楼主| konglingfei0615 发表于 2013-8-7 22:45 | 显示全部楼层
shell.albert 发表于 2013-8-6 08:59
记得DS18B20是1-Wire线的,一根线,既做为输入又做为输出。输出时置PIN为输出,输入时置PIN为输入。这点要 ...

这个有注意的,就是不知道为什么先置高
 楼主| konglingfei0615 发表于 2013-8-7 22:45 | 显示全部楼层
qzc13457 发表于 2013-8-6 11:33
参考实例改写一下多好,俺就是这么用的。

还是要会看时序图为好
xtpi 发表于 2013-8-7 23:04 | 显示全部楼层
时序图是一个很好的注解呀,很重要的东东呀,得好好看看 ,看明白才行哦!!

评分

参与人数 1威望 +2 收起 理由
konglingfei0615 + 2

查看全部评分

fe07fe 发表于 2013-8-8 07:01 | 显示全部楼层
你在哪里找了个笨蛋程序啊,这种笨蛋程序就是笨蛋写的复杂,不要什么都怪自己,责任是其他人的。

评分

参与人数 1威望 +2 收起 理由
konglingfei0615 + 2

查看全部评分

qzc13457 发表于 2013-8-8 07:53 | 显示全部楼层
konglingfei0615 发表于 2013-8-7 22:45
还是要会看时序图为好

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

评分

参与人数 1威望 +3 收起 理由
konglingfei0615 + 3

查看全部评分

stupidboy456 发表于 2013-8-8 08:11 | 显示全部楼层
加油啊,,温度采集,,

评分

参与人数 1威望 +3 收起 理由
konglingfei0615 + 3

查看全部评分

 楼主| konglingfei0615 发表于 2013-8-8 08:13 | 显示全部楼层
stupidboy456 发表于 2013-8-8 08:11
加油啊,,温度采集,,

温度已经能采集显示了,不过驱动程序里有一点不怎么懂
 楼主| konglingfei0615 发表于 2013-8-8 08:20 | 显示全部楼层
qzc13457 发表于 2013-8-8 07:53
恩恩,会看时序图是硬功夫,哈哈

对哦,基本技能之一
 楼主| konglingfei0615 发表于 2013-8-8 08:22 | 显示全部楼层
fe07fe 发表于 2013-8-8 07:01
你在哪里找了个笨蛋程序啊,这种笨蛋程序就是笨蛋写的复杂,不要什么都怪自己,责任是其他人的。 ...

:L 但是人家的程序是可以正常运行的,而且删掉那句置高的语句就不能正常采集温度了
fe07fe 发表于 2013-8-9 05:08 | 显示全部楼层
konglingfei0615 发表于 2013-8-8 08:22
但是人家的程序是可以正常运行的,而且删掉那句置高的语句就不能正常采集温度了 ...

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

评分

参与人数 1威望 +3 收起 理由
konglingfei0615 + 3

查看全部评分

叶伤 发表于 2013-8-9 09:25 来自手机 | 显示全部楼层
置高了才能采到数据,拉高了才能让DS1820把IO拉低,数据有效。拉低了,DS1820拉高就拉不起来了,好好看IO结构示意图

评分

参与人数 1威望 +3 收起 理由
konglingfei0615 + 3

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

136

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部