[求助] 基于ATMEGA128单片机的DS2431复位问题

Doris.Lee   2016-12-8 11:15 楼主
最近做了一个ATMEGA128的DS2431的读写,不知道为什么我读到的数全是1,而且我检查出来  是复位时没有检测到拉低信号,我是按照DATASHEET上的时序写的,时间长度我也用示波器勾过了,在它的时序范围内。请大神帮忙检查一下哪里出了问题。
复位程序:
//1-Wire器件复位,并检查应答;有应答返回0,无应答返回1     
unsigned char Reset(void)   
{   
    DS_DQ_OUT;          //设置端口为输出
        DS_DQ1;   
    NOP();   
    DS_DQ0;             //复位低脉冲保持
    delay1_nus(600);   //延时     530us
    DS_DQ1;             //释放总线
    delay1_nus(70);  //延时64us后读应答
    DS_DQ_IN;           //设置端口为输入
    if(DS_DQ)           //判断wire状态  
    {   
        return(1);   
    }   
    else   
    {   beep();         //设置蜂鸣器检查程序是否运行到这里,结果蜂鸣器并没有响
                delay1_nus(500);     //延时450us
        return(0);
    }      
}  

回复评论 (3)

1-wire大部分出问题都是时序问题,注意在位操作时关闭中断。

调试时可以在proteus中仿真,效果和实际基本一样,对调试效率很有帮助。

另外确认一下没有买到假芯片。
点赞  2016-12-8 11:29
可以参考一下这个帖子:

https://bbs.eeworld.com.cn/thread-506278-1-1.html
点赞  2016-12-8 11:30
引用: dcexpert 发表于 2016-12-8 11:29
1-wire大部分出问题都是时序问题,注意在位操作时关闭中断。

调试时可以在proteus中仿真,效果和实际基 ...

加了关中断依然不好使   还是读回来的全是1
点赞  2016-12-9 17:09
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复