⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at24m.txt

📁 AT24系列EEPROM底层驱动程序
💻 TXT
字号:
 #include <reg52.h>
  #include <intrins.h>

  #define Uchar unsigned char
  #define Uint  unsigned int
  sbit SDA=P3^2;           //数据
  sbit SCL=P1^2;            //时钟
  sbit POWER=P1^0;          //电源
  sbit RST=P1^1;            //复位
  sbit CHECK=P3^3;          //检卡

  void NOP(void)
{
    _nop_();
    _nop_();
    _nop_();
    _nop_();
//    _nop_();
//    _nop_();
//    _nop_();
//    _nop_();
//    _nop_();
//    _nop_();
}
  
void mDelay(Uchar j)
  {
    Uint i;
    for(;j>0;j--)
    {
      for(i=0;i<125;i--)
      {;}
    }
  }

void Start(void)
{
  SDA=0;
  NOP();
  SCL=0;
  NOP();
}

void Stop(void)
{
  SCL=1;
  NOP();
  SDA=1;
  NOP();
}
void Ack(void)
{
   SDA=0;
   NOP();
   SCL=1;
   NOP();
   SCL=0;
   SDA=1;
}

void NoAck(void)
{
   SDA=1;
   NOP();
   SCL=1;
   NOP();
   SCL=0;
   SDA=1;
}

void Send(Uchar Data)
{
   Uchar BitCounter=8;
   do
    {
      Data<<=1;
      SDA=CY;
      SCL=1;
      NOP();
      SCL=0;
      BitCounter--;
    }while(BitCounter);
}

Uchar Read(void)
{
   Uchar temp=0;
   Uchar BitCounter=8;
   do
   {
     SDA=1;
     NOP();
     SCL=1;
     NOP();
     temp<<=1;
     if(SDA)
       temp++;
     NOP();
     SCL=0;
     NOP();
     BitCounter--;
    }while(BitCounter);
    return(temp);
}

void WrToRom(Uchar Data[],Uchar Address,Uchar Num)
{
  Uchar i;
  Uchar *PData;
  PData=Data;
  for(i=0;i<Num;i++)
  {
    Start();
    Send(0xa0); 
    Ack();
    Send(Address+i);
    Ack();
    Send(*(PData+i));
    Ack();
    Stop(); 
    mDelay(20);
  }
}

void RdFromRom(Uchar Data[],Uchar Address,Uchar Num)
{
  Uchar i;
  Uchar *PData;
  PData=Data;

  Start();
  Send(0xa0);
  Ack();
  Send(Address+i);
  Ack();
  SDA=1;
  SCL=1;
  Start();
  Send(0xa1);
  Ack();
  for(i=0;i<Num;i++)
  {
    *(PData+i)=Read();
    if(i!=Num-1) 
       Ack();
    else
       NoAck();
  }
  Stop();
  
}

  Uchar AT24C64_Open()
  {
//    Uchar i, TmpSt[10];
    POWER=1;
    NOP();
    SCL=0;
    NOP();
    RST=0;
    NOP();
    RST=1;
    NOP();
    SDA=1;
    NOP();
    SCL=1;
    NOP();
    SCL=0;
    NOP();
    RST=0;
  /*  for(i=0;i<4;i++) TmpSt[i]=Read();
    if(TmpSt[0]==0xFF) return 1;
    if(TmpSt[1]==0xFF) return 1;
    if(TmpSt[2]==0xFF) return 1;
    if(TmpSt[3]==0xFF) return 1;*/
    return 0;
  }

Uchar AT24C64_Close()
   {
      SDA=0;
      NOP();
      SCL=0;
      NOP();
      RST=0;
      NOP();
      POWER=0;
      NOP();
      return 0;
   }

  void main()
  {
    Uchar Number[4]={1,2,3,4};
    if(CHECK==0)
    {
    AT24C64_Open();
    WrToRom(Number,4,4);
    AT24C64_Close();
    mDelay(20);
    AT24C64_Open();
    RdFromRom(Number,4,4);
    AT24C64_Close();
    mDelay(20);
    }
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -