📄 i2c.c
字号:
/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
/*$$$$$$$$$$$$$$$$$$$$$$$24C01部分子程序$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
sbit SDA = P2^7;
sbit SCL = P2^6;
//起动24C01时序//
void Start()
{
SCL=1;
SDA=1;
SDA=0;
SCL=0;
}
//停止24C01时序//
void Stop()
{
SDA=0;
SCL=1;
SDA=1;
}
/*;检测24C01的响应信号*/
bit ACK()
{
bit c;
SDA=1;
SCL=1;
c=SDA;
SCL=0;
return c;
}
/*;往24C01发一8位数据*/
void SendChar(Uchar ch)
{
Uchar i;
i=8;
do
{
SDA=(ch&0x80);
SCL=1;
SCL=0;
ch<<=1;
}while(--i!=0);
}
/*;从24C01接收一8位数据*/
Uchar RecChar()
{
Uchar i,j;
i=8;
do
{
SCL=1;
j=(j<<1)|SDA;
SCL=0;
}while(--i!=0);
return j;
}
/*往24C01写多字节*/
void WriteBuf(Uint addr,Uchar idata *buf,Uchar count)
{
Uchar c;
c=((*((Uchar *)&addr)))&0x02;
Start();
SendChar(0xa0|c);
ACK();
SendChar(addr);
ACK();
do
{
SendChar(*buf++);
ACK();
if(count!=1)
{
if(((++addr)&0x7)==0)
{
Stop();
for(c=0xff;c!=0;c--) ;
c=((*((Uchar *)&addr))<<1)&0x02;
Start();
SendChar(0xa0|c);
ACK();
SendChar(addr);
ACK();
}
}
else
{
Stop();
for(c=0xff;c!=0;c--) ;
}
}while(--count!=0);
}
/*至少读2字节*/
void ReadBuf(Uint addr,Uchar idata *buf,Uchar count)
{
Uchar ch;
ch=((*((Uchar *)&addr))<<1)&0x02;
Start();
SendChar(0xa0|ch);
ACK();
SendChar(addr);
ACK();
Start();
SendChar(0xa1|ch);
ACK();
count--;
do
{
*buf++=RecChar();
SDA=0;
SCL=1;
SCL=0;
SDA=1;
}while(--count!=0);
*buf=RecChar();
Stop();
}
/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
/*$$$$$$$$$$$$$$$$$$$$$$$24C01部分子程序结束$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -