关于i2c模拟通信的问题

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,这样的话,会丢失一位数据吗?

还是说不读出来的就不会变

 

不会这个就像你把delay_us(5)改成了delay_us(10)