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是怎么知道初始化成功的呢?
希望有明白的,给讲一讲!谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
jetli
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);
}

一周热门 更多>