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