DS18b20初始化问题

2020-02-05 08:45发布

void ds_reset(void)
{
   ds=1;
   _nop_();        //1us
   ds=0;
   TempDelay(80);  //当总线停留在低电平超过480us,总线上所以器件都将被复位,这里//延时约530us总线停留在低电平超过480μs,总线上的所有器件都
//将被复位。
   _nop_();
   ds=1;           //产生复位脉冲后,微处理器释放总线,让总线处于空闲状态,原因查//18b20中文资料

   TempDelay(5);  //释放总线后,以便从机18b20通过拉低总线来指示其是否在线,
                  //存在检测高电平时间:15~60us, 所以延时44us,进行            1-wire presence //detect(单线存在检测)
   _nop_();
   _nop_();
   _nop_();
   if(ds==0)
        flag=1;       //detect 18b20 success
   else
        flag=0;       //detect 18b20 fail
  TempDelay(20);    //存在检测低电平时间:60~240us,所以延时约140us
   _nop_();
   _nop_();
   ds=1;          //再次拉高总线,让总线处于空闲状态
}
ds为单片机控制口,
该初始化程序无返回值,要是在引用该初始化程序,单片机或是DS18B20是怎么知道初始化成功的呢?
希望有明白的,给讲一讲!谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
终极幻想
1楼-- · 2020-02-05 14:36
时序图写的很明白呀
sy_lixiang
2楼-- · 2020-02-05 18:19
 精彩回答 2  元偷偷看……
jetli
3楼-- · 2020-02-05 23:04

//初始化函数
Init_DS18B20(void)
{
    unsigned char x=0;
    DQ = 1;    //DQ复位
    delay18(8);  //稍做延时
    DQ = 0;    //单片机将DQ拉低
    delay18(80); //精确延时 大于 480us
    DQ = 1;    //拉高总线
    delay18(14);
    x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
    delay18(20);
}
dcqq88
4楼-- · 2020-02-06 01:32
我也期待中!
siyeb
5楼-- · 2020-02-06 06:37
最后加上 return(flag)就行吧?
Yi.king
6楼-- · 2020-02-06 07:07
sy_lixiang 发表于 2012-7-20 17:19
“该初始化程序无返回值”

你想把flag值带回去,是这个意思吗?

该程序是我在网上查到的,但是初始化无返回值
就像我写的那样,初始化能成功吗????

一周热门 更多>