📄 24c02.c
字号:
#include"24C02.h"
bit ack;
void delay5us()
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
void Start_I2C()
{
SDA=1;
_nop_();
SCL=1;
delay5us();
SDA=0;
delay5us();
SCL=0;
_nop_();
}
void Stop_I2C()
{
SDA=0;
_nop_();
SCL=1;
delay5us();
SDA=1;
delay5us();
}
void SendByte(unsigned char Data)
{
unsigned char i;
for (i=0;i<8;i++)
{
SDA=Data&0x80;
Data=Data<<1;
SCL=1;
delay5us();
SCL=0;
}
_nop_();
SDA=1;
_nop_();
SCL=1;
if(SDA==1)
ack=0;
else
ack=1;
SCL=0;
}
uchar RcvByte()
{
uchar retc=0;
uchar i;
SDA=1;
for ( i=0;i<8;i++)
{
SCL=0;
delay5us();
SCL=1;
retc=retc<<1;
if(SDA==1)retc++;
_nop_();
}
SCL=0;
return(retc);
}
void Ack_I2C(bit a)
{
if(a==0)
SDA=0;
else
SDA=1;
_nop_();
SCL=1;
delay5us();
SCL=0;
_nop_();
}
void I2CSendByte(uchar suba,uchar Byte)
{
Start_I2C(); // 启动总线
SendByte(0XA0); //写器件地址
SendByte(suba); //写数据地址
SendByte(Byte); //写数据
Stop_I2C(); //结束总线
}
uchar I2CReadByte(uchar suba)
{
uchar Byte;
Start_I2C(); // 启动总线
SendByte(0XA0); //写器件地址
SendByte(suba); //写数据地址
Start_I2C(); // 重新启动总线
SendByte(0XA0+1); //写器件地址并以下是读状态
Byte=RcvByte(); //读指定地址中的数据
Ack_I2C(1); //应答
Stop_I2C(); //结束总线
return(Byte);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -