void i2c_start(void)
{
pin_sda_w();
SCL_W_1;
SDA_W_1;
delay_us(5);
SDA_W_0;
delay_us(5);
SCL_W_0;
delay_us(5);
}
.......
u8 i2c_readbyte(void)
{
int i;
pin_sda_r();
uint8_t byte=0;
if(!mlsb) //=0,MSB
{
for(i=7;i>=0;i--)
{
SCL_W_0; //
delay_us(5);
SCL_W_1; //....read
delay_us(5);
if(SDA_R==1)
{
byte|=(1<<i);
}
else
{
byte|=(0<<i);
}
delay_us(5); //
}
}
else //=1,LSB
{
for(i=0;i<=7;i++)
{
SCL_W_0;
delay_us(5);
SCL_W_1;
delay_us(5);
if(SDA_R==1)
{
byte|=(1<<i);
}
else byte|=(0<<i);
delay_us(5);
}
}
SCL_W_0;
delay_us(5);
return byte;
}
下划线的地方有两次置0,这样的话,会丢失一位数据吗?
还是说不读出来的就不会变