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

📄 at24c04.c

📁 AT24系列EEPROM底层驱动程序
💻 C
字号:
/*=============================================*/
/*;***********************************/
/*;起动24C01时序*/
void Start()
{
 SCL=1;
 SDA=1;
 
 SDA=0;
 
 SCL=0;
}
/*;************************************/
/*;停止24C01时序*/
void Stop()
{
 SDA=0;
 SCL=1;
 SDA=1;
}
/*;**************************************/
/*;检测24C01的响应信号*/
bit ACK()
{
   bit c;
   SDA=1;
   SCL=1;
   c=SDA;
   SCL=0;
   return c;
}
/*;************************************/
/*;往24C01发一8位数据*/
void SendChar(unsigned char ch)
{
 unsigned char i;
 i=8;
 do
  {
   SDA=(ch&0x80);
   SCL=1;
   SCL=0;
   ch<<=1;
  }while(--i!=0);
}
/*;**************************************/
/*;从24C01接收一8位数据*/
unsigned char RecChar()
{
 unsigned char i,j;
 i=8;
 do
  {
   SCL=1;

   j=(j<<1)|SDA;
   SCL=0;

  }while(--i!=0);
  return j;
}
//;**************************************
/*;********************************/
/*;往24C01写一字节*/
void WriteChar(unsigned int addr,unsigned char ch)
{
 unsigned char c;
 c=((*((unsigned char *)&addr))<<1)&0x02;
 
 
 Start();
 SendChar(0xa0|c);
 ACK();
 SendChar(addr);
 ACK();
 SendChar(ch);
 ACK();
 Stop();
 
 
// for(addr=4;addr!=0;addr--)
  for(ch=0xff;ch!=0;ch--) ;
}
//;**************************************
/*;********************************/
/*;往24C01写多字节*/
void WriteBuf(unsigned int addr,unsigned char idata *buf,unsigned char count)
{
 unsigned char c;
 c=((*((unsigned char *)&addr))<<1)&0x02;
 
 
 Start();
 SendChar(0xa0|c);
 ACK();
 SendChar(addr);
 ACK();
 do
  {
   SendChar(*buf++);
   ACK();
   if(count!=1)
    {if(((++addr)&0x7)==0)
     {
      Stop();
      for(c=0xff;c!=0;c--) ;
      c=((*((unsigned char *)&addr))<<1)&0x02;
      Start();
      SendChar(0xa0|c);
      ACK();
      SendChar(addr);
      ACK();
     }
    }
   else
    {
     Stop();
     for(c=0xff;c!=0;c--) ;
    }
  }while(--count!=0);
  
}
/*;**********************************/
/*;从24C01读一字节*/
/*;入口:R0中为要读出内容的地址*/
/*;出口:A中为读到的内容*/
unsigned char ReadChar(unsigned int addr)
{
  unsigned char ch;
  ch=((*((unsigned char *)&addr))<<1)&0x02;
  
  
  Start();
  SendChar(0xa0|ch);
  ACK();
  SendChar(addr);
  ACK();
  Start();
  SendChar(0xa1|ch);
  ACK();
  ch=RecChar();
  Stop();
  
  
  return ch;
  
}  
/**********************************/
/*至少读2字节*/
void ReadBuf(unsigned int addr,unsigned char idata *buf,unsigned char count)
{
  unsigned char ch;
  ch=((*((unsigned char *)&addr))<<1)&0x02;
  
  
  Start();
  SendChar(0xa0|ch);
  ACK();
  SendChar(addr);
  ACK();
  Start();
  SendChar(0xa1|ch);
  ACK();
  count--;
  do
   {
    *buf++=RecChar();
    SDA=0;
    SCL=1;
    SCL=0;
    SDA=1;
   }while(--count!=0);
  *buf=RecChar(); 
  Stop();
  
}

⌨️ 快捷键说明

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