void I2C_Start(void)
{
SDA_H();
SCL_H();
Delay_us(4);
if (!SDA_READ()) //SDA线为低电平则总线忙
{
return;
}
SDA_L();
Delay_us(4);
if (SDA_READ()) //SDA线为高电平则总线忙
{
return;
}
SCL_L();
}
uint8_t I2c_Start(void)
{
SDA_H();
SCL_H();
Delay_us(4);
while( !SCL_READ() ) ; //如果读到的是低电平则等待 从机完成 added by mountain
if (!SDA_READ()) //SDA线为低电平则总线忙
{
return I2C_OPERATE_ERROR;
}
SDA_L();
Delay_us(4);
if (SDA_READ()) //SDA线为高电平则总线忙
{
return I2C_OPERATE_ERROR;
}
SCL_L();
return I2C_OPERATE_SUCCESS;
}
这是I2C两个驱动程序 ,大家觉得有问题没?
|