📄 i2c.c
字号:
#include <i2c.h>
void Delay(unsigned char i)
{
while(i>0)
i--;
}
void Start()
{
SDA=1;
SCL=1;
Delay(TIME);
SDA=0;
Delay(TIME);
SCL=0;
Delay(TIME);
}
void Stop()
{
SDA=0;
SCL=1;
Delay(TIME);
SDA=1;
Delay(TIME);
SCL=0;
Delay(TIME);
}
void Sent1()
{
SDA=1;
SCL=1;
Delay(TIME);
SCL=0;
Delay(TIME);
}
void Sent0()
{
SDA=0;
SCL=1;
Delay(TIME);
SCL=0;
Delay(TIME);
}
bit ACK_chack()
{
bit F0;
SDA=1;
SCL=1;
Delay(TIME/2);
F0=SDA;
Delay(TIME/2);
SCL=0;
Delay(TIME);
if(F0==0) return 1;
else return 0;
}
void Write_c(unsigned char sent)
{
unsigned char i;
for(i=0;i<8;i++)
if((sent<<i)&0x80)
Sent1();
else
Sent0();
}
bit Write_nc(unsigned char *buffer,unsigned char n)
{
unsigned char i;
Start();
for(i=0;i<n;i++)
{
Write_c(*buffer);
if(!ACK_chack())
{
Stop();
return 0;
}
buffer=buffer+1;
}
Stop();
return 1;
}
unsigned char Read_c()
{
unsigned char b=0,i;
bit F0;
for(i=0;i<8;i++)
{
SDA=1;
SCL=1;
Delay(TIME/2);
F0=SDA;
Delay(TIME/2);
SCL=0;
if(F0==1)
{
b=b<<1;
b=b|0x01;
}
else b=b<<1;
}
return b;
}
bit Read_nc(unsigned char SlaveAdr,unsigned char n,unsigned char *buffer)
{
unsigned char i;
Start();
Write_c(SlaveAdr);
if(!ACK_chack())
return 0;
for(i=0;i<n;i++)
{
*buffer=Read_c();
if(i!=n)
Sent0(); //发送应答
else
Sent1(); //发送非应答
buffer=buffer+1;
}
Stop();
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -