搜索
bottom↓
回复: 4

【求助】DS18B20无法初始化

[复制链接]

出0入0汤圆

发表于 2015-5-13 16:13:40 | 显示全部楼层 |阅读模式
uint8 DST_Reset(void)
{
        uint8         value = 1;
        uint16 counter=400;
        DST_IO_OUT();
        DST_IO_SET();
        DST_IO_CLR();
        Delay_us(600);        //>480us
       
        DST_IO_SET();
        DST_IO_IN();
        Delay_us(60);

        do{
                        counter--;
        }while(DST_IO_READ()&&(counter>0));
        if(counter > 0){
                DST_IO_SET();
                DST_IO_OUT();       
                Delay_us(500);
                value = 0;
        }
        Delay_us(500);
        return (value);
}
以上是复位代码,之后后总返回1,初始化总是失败,延时程序都是精准的。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2015-5-13 16:14:09 | 显示全部楼层
有坛友懂的吗?搭救一下。

出0入0汤圆

发表于 2015-5-13 16:32:08 | 显示全部楼层
本帖最后由 lcw_swust 于 2015-5-13 16:33 编辑

用示波器看看
counter--;
后要加Delay_us(1)

出0入0汤圆

 楼主| 发表于 2015-5-13 17:16:38 | 显示全部楼层
lcw_swust 发表于 2015-5-13 16:32
用示波器看看
counter--;
后要加Delay_us(1)

修改了等待部分的代码,新代码如下,感觉已经没问题了。示波器坏了,我对了时序图,应该没错的,但就是不行,有点怀疑是硬件问题。
uint8 DST_Reset(void)
{
        uint8        retry = 0;
        //uint16 counter=400;
        DST_IO_OUT();
        DST_IO_SET();
        DST_IO_CLR();
        Delay_us(530);        //>480us
       
        DST_IO_SET();
        DST_IO_IN();
        Delay_us(16);

        while(DST_IO_READ()&&retry<218){
                retry++;
                Delay_us(1);
        }
        if(retry>=218)
                return 1;
        else
                retry = 0;
        while((DST_IO_READ()==0)&&retry<261){
                retry++;
                Delay_us(1);
        }
        if(retry>=261)
                return 2;
        else
                return 0;
}
PS:我用的是LPC1758,以下是管脚配置宏定义:
#define         DST_IO_IN()         LPC_GPIO1->FIODIR3  &=~(1 << 6)
#define         DST_IO_OUT()           LPC_GPIO1->FIODIR3  |=(1 << 6)
#define         DST_IO_CLR()    LPC_GPIO1->FIOCLR3  |=(1 << 6)
#define         DST_IO_SET()    LPC_GPIO1->FIOSET3  |=(1 << 6)
#define          DST_IO_READ()         LPC_GPIO1->FIOPIN3  &=~(0 << 6)

出0入0汤圆

发表于 2015-5-13 19:06:19 | 显示全部楼层
拿来主义吧。网上先套能用的程序。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 21:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表