七古 2021-04-09 16:40 采纳率: 0%
浏览 8

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

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

 

  • 写回答

1条回答 默认 最新

  • 七古 2021-04-12 13:46
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 android studio导航图代码argument的name的ID红色
  • ¥15 P1口接8个发光二极管,利用定时计数器1编写程序
  • ¥20 keil5编译找不到.h文件该如何解决
  • ¥15 安卓EVS如何开启服务正常实现功能
  • ¥15 canal读取mysql时报错
  • ¥15 关于 S7-PLCSIM Advanced 5.0本地TCP连接无法读写数据
  • ¥15 关于温度改变石墨烯介电性能(关键词-介电常数)
  • ¥150 HDMI分路器LT86102 的输出在890MHz频点处EMC超标8DB
  • ¥15 druid(相关搜索:数据库|防火墙)
  • ¥15 大一python作业