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

📄 24c02.c

📁 利用定时器
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -