DS18b20初始化问题
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是怎么知道初始化成功的呢?
希望有明白的,给讲一讲!谢谢 时序图写的很明白呀 “该初始化程序无返回值”
你想把flag值带回去,是这个意思吗?
unsigned char ds_reset(void)
{
...............
return flag;
}
//初始化函数
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);
}{:sweat:} 我也期待中!{:smile:} 最后加上 return(flag)就行吧? sy_lixiang 发表于 2012-7-20 17:19 static/image/common/back.gif
“该初始化程序无返回值”
你想把flag值带回去,是这个意思吗?
该程序是我在网上查到的,但是初始化无返回值
就像我写的那样,初始化能成功吗???? jetli 发表于 2012-7-20 17:36 static/image/common/back.gif
//初始化函数
Init_DS18B20(void)
{
无返回值,单片机怎么知道它初始化成功的! 4楼的程序有一句x=DQ;该芯片可以把高电平直接置零,如果单片机检验到置零则说明初始化成功,如果是一就是失败。。。四楼解释很清楚 Yi.king 发表于 2012-7-21 16:20 static/image/common/back.gif
无返回值,单片机怎么知道它初始化成功的!
我给的初始化没有必要返回,所以干脆屏蔽了
你要返回,把函数的void改为uchar
加句return(x);即可,在调用init_ds18后判读{:titter:}
页:
[1]