📄 24c02.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 + -