微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > C51读写AT24512问题求教

C51读写AT24512问题求教

时间:10-02 整理:3721RD 点击:
用单片机连续写数据组,然后再读出来后发现有一些数据不对,都是FF。好像是跨页读写出了问题。求指教!/********************************************************************
向iic设备写入N个字节
说明:write_data,写入字节的数组
      Address,从address处开始写入
      n,写入的字节数      
***********************************************************************/
void AT24C512_W(uchar d[], uint address, uchar num)
{
  uchar i;
  iic_start();
  iic_send_byte(0xa0);                  //器件地址
  iic_wait_ack();
  iic_send_byte(address/256);   //传高8位地址
  iic_wait_ack();
  iic_send_byte(address%256);  //传低8位地址
  iic_wait_ack();
  for(i=0; i<num; i++)
  {
    iic_send_byte(d[i]);
    iic_wait_ack();
        address++;
        if(address%256==0)
        {
        iic_stop();
        delay_24c(4);
       
        iic_start();
        iic_send_byte(0xa0);                  //器件地址
        iic_wait_ack();
        iic_send_byte(address/256);   //传高8位地址
        iic_wait_ack();
        iic_send_byte(address%256);  //传低8位地址
        iic_wait_ack();
        iic_delay();
        }
//        iicdizhi=address;
  }
  iic_stop();
  delay_24c(4);
}
/********************************************************************
从iic设备读取N个字节
说明:read_data ,存放字节的数组 ;
address,指定从address处开始读取
num,读取的字节数      
***********************************************************************/
void AT24C512_R(uchar r[] , uint address, uchar n)
{
  uchar i;
  iic_start();
  iic_send_byte(0xa0);
  iic_wait_ack();
  iic_send_byte(address>>8);
  iic_wait_ack();
  iic_send_byte(address & 0xff);
  iic_wait_ack();
  iic_start();
  iic_send_byte(0xa1);
  iic_wait_ack();       
  for (i=0; i<n; i++)
  {
   r[i] = iic_receive_byte();
   if (i <(n - 1))     
    {
      ack();
    }
     //iic_wait_ack();
//        address++;
//        if(address%256==0)
//        {
//        iic_stop();
//        delay_24c(4);
//       
//        iic_start();
//        iic_send_byte(0xa0);                  //器件地址
//        iic_wait_ack();
//        iic_send_byte(address/256);   //传高8位地址
//        iic_wait_ack();
//        iic_send_byte(address%256);  //传低8位地址
//        iic_wait_ack();
//        iic_delay();
//        }                       
               
  }
  iic_noack();
  iic_stop();  
}

如果你认为是跨页出现问题,那么你可以写少于一页的数据再读出来看看,既然你自己有了想法,就要去验证

读写的时候地址是不是不对呢,以2为步进

上一篇:无线烧程序
下一篇:C8051检测脉冲

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top