24c02.c

来自「利用定时器」· C语言 代码 · 共 111 行

C
111
字号
#include <reg52.h>
#define uchar unsigned char 
#define uint unsigned int
#define WriteAddress 0xa0  //定义器件在I2C总线中的地址
#define ReadAddress 0xa1   //定义器件在I2C总线中的地址
sbit SCL=P2^0;
sbit SDA=P2^1;


void delay(uint t)
{
 uchar number;
 while(t--)
 {
   for(number=0;number<110;number++);
 }
}

//开始总线
void Star(void)
{
 SDA=1;
 SCL=1;
 SDA=0;
 SCL=0;     //数据线   时钟线由高变低,开始总线
 
}

//结束总线
void Stop(void)
{
 SCL=0;
 SDA=0;
 SCL=1;
 SDA=1;     //时钟线 数据线由低变高,停止数据传送

}

//测试ACK
bit Testack()
{
 bit ErrorBit;
 SDA=1;
 SCL=1;
 ErrorBit=SDA;
 SCL=0;                    //数据线为高电平,时钟线由高变低,测试ACK
 return(ErrorBit);
}

//写8 bit到24c02 
Write8bit(uchar ch)
{
 uchar temp;
for(temp=8;temp!=0;temp--)
   {
     SDA=(bit)(ch&0x80);
     SCL=1;
     SCL=0;
     ch=ch<<1;
   }
}


//写一个字节到24c02
Write24c02(uchar ch,uchar address)
{
   Star();
   Write8bit(WriteAddress);
   Testack();
   Write8bit(address);
   Testack();
   Write8bit(ch);
   Testack();
   Stop();
   delay(10);
}


//从24c02中读出8bit 
 Read8bit(uchar ch) 
{ 
  uchar temp;
  for(temp=8;temp!=0;temp--)
  {
   SCL=1;
   ch=ch<<1;
   ch=ch|((uchar)(SDA));
   SCL=0;
  }
  return(ch);
}


//从24c02中读出一个字节
Read24c02(uchar address)
{ 
  uchar ch;
  Star();
  Write8bit(ReadAddress);
  Testack();
  Write8bit(address);
  Testack();
  Star();
  Write8bit(ReadAddress);
  Testack();
  ch=Read8bit();

  Stop();
  return(ch);
}
  

⌨️ 快捷键说明

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