基于ATMEGA128单片机的DS2431复位问题

2019-03-24 20:18发布

最近做了一个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条回答
dcexpert
1楼-- · 2019-03-25 03:06
1-wire大部分出问题都是时序问题,注意在位操作时关闭中断。

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

另外确认一下没有买到假芯片。
dcexpert
2楼-- · 2019-03-25 03:31
可以参考一下这个帖子:

http://bbs.eeworld.com.cn/thread-506278-1-1.html
Doris.Lee
3楼-- · 2019-03-25 09:12
dcexpert 发表于 2016-12-8 11:29
1-wire大部分出问题都是时序问题,注意在位操作时关闭中断。

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

加了关中断依然不好使   还是读回来的全是1

一周热门 更多>