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

📄 iic.c

📁 IIC读写EEPOM 24C02 数据程序。51单片机将测量数据写入到EEPROM中
💻 C
字号:
/*====IIC程序 2006-11-22 ===============*/
#include <reg51.h>
#include <math.h>

#define WriteDeviceAddress 0xa0  //24c02 写地址
#define ReadDviceAddress 0xa1    //24c02 读地址


sbit SDA = P1^6;   //24C02 数据端
sbit SCL = P1^7;   //24C02 时钟,上升沿有效


//=================24C02 读写函数体================================================

//===============延时毫秒 ================================================
void DelayMs(unsigned int number)
{
  unsigned char temp;
  for(;number!=0;number--)
  {
    for(temp=112;temp!=0;temp--) { ; }
  }
}

//===============起始动作================================================
void Start()
{
   SDA=1;
   SCL=1;
   SDA=0;
   SCL=0;
}

//================停止动作=================================================
void Stop()
{
   SCL=0;
   SDA=0;
   SCL=1;
   SDA=1;
}

//================应答=================================================
void Ack()
{
   SDA=0;
   SCL=1;
   SCL=0;
   SDA=1;
}

//==================无应答===============================================
void NoAck()
{
   SDA=1;
   SCL=1;
   SCL=0;
}


//==================应答测试===============================================
bit TestAck()
{
   bit ErrorBit;
   SDA=1;
   SCL=1;
   ErrorBit=SDA;
   SCL=0;
   return(ErrorBit);
}

//=======================向 24C02 写8位==========================================
bit Write8Bit(unsigned char input)
{
   unsigned char temp;
   for(temp=8;temp!=0;temp--)
   {
      SDA=(bit)(input&0x80);
      SCL=1;
      SCL=0;
      input=input<<1;
  }
}


//==========向 24C02 RomAddress起始的地址连续写入 存放在Wdata中的  number 个字节=======================================================
void Write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char number)
{
    Start();
    Write8Bit(WriteDeviceAddress);
    TestAck();
    Write8Bit(RomAddress);
    TestAck();
    for(;number!=0;number--)
    {
        Write8Bit(*Wdata);
        TestAck();
        Wdata++;
    }
    Stop();
    DelayMs(10);
}


//==================向 24C02 读8位===============================================
unsigned char Read8Bit()
{
   unsigned char temp,rbyte=0;
   for(temp=8;temp!=0;temp--)
   {
      SCL=1;
      rbyte=rbyte<<1;
      rbyte=rbyte|((unsigned char)(SDA));
      SCL=0;
   }
   return(rbyte);
}


//================向 24C02 读取 bytes 个字节=================================================
void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes)
{
   unsigned char temp,rbyte;
   Start();
   Write8Bit(WriteDeviceAddress);
   TestAck();
   Write8Bit(RomAddress);
   TestAck();
   Start();
   Write8Bit(ReadDviceAddress);
   TestAck();
   while(bytes!=1)
   {
      *RamAddress=Read8Bit();
      Ack();
      RamAddress++;
      bytes--;
   }
   *RamAddress=Read8Bit();
   NoAck();
   Stop();
}


//=================================================================

⌨️ 快捷键说明

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