注册 登录
编程论坛 单片机编程

AT24C1024 EEPROM怎样复位

小焦叔叔 发布于 2020-07-12 23:22, 7103 次点击
我在制作第二台掌上电脑,用了2个AT24C1024,之前我的第一台用1个AT24C1024EEPROM的试验用的掌上电脑的AT24C1024可以读写数据,但是第二台器件寻址不了,仔细研究说明书了,发现说明书说AT24C1024可以复位,于是就试了一下,添加了复位函数,但是还是寻址不了。这是我写的IIC部分程序片段:

void Init_IIC()
{
   P0M1=0x03;
   P0M0=0x03;
   SCL=0;
   SDA=0;
}

void Reset_IIC()
{
   unsigned char i;

   SCL=0;
   SDA=1;
   for(i=0;i<16;i++)
   {
      SCL=1;
      Delay_uS();
      //Feleer();
      while(SDA==0);
      //Feleer();
      SCL=0;
      Delay_uS();
   }
   //Start_IIC();
   //Feleer();
}

void Start_IIC()
{
   SDA=1;
   Delay_uS();
   SCL=1;
   Delay_uS();
   SDA=0;
   Delay_uS();
   SCL=0;
   Delay_uS();   
}

void Stop_IIC()
{
   SCL=0;
   Delay_uS();
   SDA=0;
   Delay_uS();
   SCL=1;
   Delay_uS();
   SDA=1;
}

void Addr_Dive(unsigned char addr_dive,bit p0,bit opr)
{
   //Write_Byte(addr_dive|((unsigned char)p0)<<1|opr);
   Write_Byte(0x50<<1);
   //Feleer();
   while(Read_ACK());
   Feleer();
}

void Addr_Word(unsigned char addr_word)
{
   Write_Byte(addr_word);
   while(Read_ACK());
}

void Write_Byte(unsigned char byte)
{
   unsigned char i;

   for(i=0;i<8;i++)
   {
      SCL=0;
      Delay_uS();
      if(byte&(0x80>>i))
      {
         SDA=1;
      }
      else
      {
         SDA=0;
      }
      Delay_uS();
      SCL=1;       //上升沿写入
      Delay_uS();
   }
   SCL=0;
}

bit Read_ACK()
{
   bit ack;

   SCL=0;
   Delay_uS();
   SDA=1;
   Delay_uS();
   SCL=1;
   Delay_uS();
   SCL=0;          //下降沿输出
   ack=SDA;

   return(ack);
}

void Delay_uS()
{
   ;
}

搞了好久还是没寻址成功......哪位做过2片AT24C1024读写的网友,说明书上面关于复位的2点说明是什么意思?有空的时候可否指点一下,谢谢啦!!!

只有本站会员才能查看附件,请 登录


只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2020-7-12 23:23编辑过]

2 回复
#2
小焦叔叔2020-07-14 23:56
是硬件的问题,我拿这个程序去试另一台掌上电脑,一切正常。
#3
zwk342021-02-24 08:38
硬件哪里的问题,查到了吗?
1