I2C总线相关函数:
void I2Cstart()//开始标志
{
SDA=1;
SCL=1;
SDA=0;
delay1ms(4);
SCL=0;
delay1ms(4);
}
void I2Cstop()//结束标志
{
SCL=0;
delay1ms(4);
SDA=0;
delay1ms(4);
SCL=1;
delay1ms(4);
SDA=1;
delay1ms(4);
}
unsigned char I2Creadack()
{
unsigned char i,byte;
byte=0;
for(i=0;i<8;i++)
{
SCL=0;
SDA=1;
delay1ms(4);
byte<<=1;
if(SDA==1)
{
byte|=0x01;
delay1ms(4);
}
}
SCL=0;
delay1ms(4);
SDA=0;
delay1ms(4);
SCL=1;
delay1ms(4);
SCL=0;
return byte;
}
void I2Csend(unsigned char byte)//I2C写数据的过程
{
unsigned char mask,i;
for(i=0;i<8;i++)
{
SCL=0;
if((mask&byte)==0)
{
SDA=0;
}
else
{
SDA=1;
}
mask>>=1;
delay1ms(4);
SCL=1;//给足够时间让数据读取
delay1ms(4);
}
SCL=0;
SDA=1; //因为总线上有一个信号为低则低
delay1ms(4);
SCL=1;
delay1ms(4