最近做了一个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); } } |
引用: dcexpert 发表于 2016-12-8 11:29
1-wire大部分出问题都是时序问题,注意在位操作时关闭中断。
调试时可以在proteus中仿真,效果和实际基 ...