📄 i2c.c
字号:
void i2cwait_ic()
{
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
}
void Start_I2c_IC()
{ P2OUT |=SDA;
i2cwait_ic();
P2OUT |=SCL;
i2cwait_ic();
P2OUT &=~SDA;
i2cwait_ic();
P2OUT &=~SCL;
i2cwait_ic();
}
void Stop_I2c_IC()
{
P2OUT &=~SDA;
i2cwait_ic();
P2OUT |=SCL;
i2cwait_ic();
P2OUT |=SDA;
i2cwait_ic();
}
void SendByte_IC(byte c)
{
byte BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++)
{
if((c<<BitCnt)&0x80)P2OUT |=SDA;
else P2OUT &=~SDA;
i2cwait_ic();
P2OUT |=SCL;
i2cwait_ic();
P2OUT &=~SCL;
}
i2cwait_ic();
P2OUT |=SDA;
i2cwait_ic();
P2OUT |=SCL;
i2cwait_ic();
if(P2IN&SDA) ack_ic=0;
else ack_ic=1;
P2OUT &=~SCL;
i2cwait_ic();
}
byte RcvByte_IC()
{
byte retc;
byte BitCnt;
retc=0;
P2OUT |=SDA;
PORTDIRBIT(1, 1, PIN); /////
P2DIR &= ~SDA;
for(BitCnt=0;BitCnt<8;BitCnt++)
{ i2cwait_ic();
P2OUT &=~SCL;
i2cwait_ic();
P2OUT |=SCL;
i2cwait_ic();
retc=retc<<1;
if(P2IN&SDA)retc=retc+1;
i2cwait_ic();
}
P2OUT &=~SCL;
i2cwait_ic();
//PORTDIRBIT(1, 1, POUT); /////////////
P2DIR |= SDA;
return(retc);
}
void ack_ic_I2c(byte a)
{
if(a==0)P2OUT &=~SDA;
else P2OUT |=SDA;
i2cwait_ic();
P2OUT |=SCL;
i2cwait_ic();
P2OUT &=~SCL;
i2cwait_ic();
}
bit ISendStr_IC (byte sla,byte suba,byte *s,byte no)
{
byte i;
Stop_I2c_IC();
Start_I2c_IC();
SendByte_IC(sla);
if(ack_ic==0)
{return(0);}
SendByte_IC(suba);
if(ack_ic==0)
return(0);
for(i=0;i<no;i++)
{SendByte_IC(*s);
if(ack_ic==0)
return(0);
s++;
}
Stop_I2c_IC();
return(1);
}
bit IRcvStr_IC (byte sla,byte suba,byte *s,byte no)
{
byte i;
Start_I2c_IC();
SendByte_IC(sla);
if(ack_ic==0)
return(0);
SendByte_IC(suba);
if(ack_ic==0)return(0);
Start_I2c_IC();
SendByte_IC(sla+1);
if(ack_ic==0)return(0);
for(i=0;i<no-1;i++)
{
*s=RcvByte_IC();
ack_ic_I2c(0);
s++;
}
*s=RcvByte_IC();
ack_ic_I2c(1);
Stop_I2c_IC();
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -