有关atmega128的DS2431数据读回全是1的问题

2019-07-15 12:24发布

最近做了一个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条回答
china
1楼-- · 2019-07-15 16:43
  1. //环境:winavr+avr studio

  2. char temp=0;

  3. ISR(TIMER1_COMPA_vect )//中断函数
  4. {
  5.     // user code here
  6.     temp++;
  7.     if (temp==10)
  8.     temp=0;
  9.     PORTA=temp;
  10.     DDRA=0xff;
  11. }



  12. void mytimer_init(void)
  13. {
  14.   //关总中断
  15.   cli();
  16.   //TCCR1A为配置引脚输出模式,这里取默认为0,未连接即可,因此不需要为其赋值
  17.   //T/C1时钟源选择为clk/64,CLK现为内部晶振4MHZ,因此时钟为4,000,000/64 HZ = 62500 HZ
  18.   TCCR1B &= ~0x07;
  19.   TCCR1B |= 0x03;
  20.   //选择模式 WGM10~WGM13
  21.   TCCR1A &= ~0x03;
  22.   TCCR1B &= ~(0x03<<3);//模式4 CTC
  23.   TCCR1B |=  0x01<<3;
  24.   //赋值定时初值 16位
  25.   TCNT1=0;
  26.   //赋值比较寄存器TOP初值 16位 ,在以上工作模式下,当TCNT1=OCR1A时,TCNT1自动清0
  27.   OCR1A = 62500;//一秒中断一次

  28.   //使能定时器T/C1溢出中断,T/C1的其它中断屏蔽掉
  29.   TIMSK  &= ~(0xf0<<2);
  30.   TIMSK  |= (0x01<<4);
  31.   ETIMSK &= ~0x01;
  32.   //清中断溢出标志位,进入中断后也会自动清除,以后不用再清了
  33.   TIFR   |= 1<<2;
  34.   //启动定时器
  35.   SFIOR  &= 0x7e;  
  36.   //开总中断
  37.   sei();  

  38. }
复制代码
水瓶电子小菜菜
2楼-- · 2019-07-15 21:02
china 发表于 2016-12-8 10:00

跟我问的毫无关系
254958441
3楼-- · 2019-07-15 23:46
楼主解决了吗?  加我qq 254958441  备注 DS2431

一周热门 更多>