微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 各位大师,帮忙看看这个程序,多谢了。

各位大师,帮忙看看这个程序,多谢了。

时间:10-02 整理:3721RD 点击:
  • uchar read_byte()//读一个字节  
  • {  
  •     uchar i,k;  
  •     scl=0;  
  •     delay();  
  •     sda=1;  
  •     delay();  
  •     for(i=0;i<8;i++)  
  •     {  
  •         scl=1;//上升沿时,IIC设备将数据放在sda线上,并在高电平期间数据已经稳定,可以接收啦  
  •         delay();      
  •         k=(k<<1)|sda;  
  •         scl=0;//拉低SCL,使发送端可以把数据放在SDA上  
  •         delay();      
  •     }  
  •     return k;  
  • }  
  • 这个程序是关于IIC通信的一个收字节的的函数,scl=0;delay();和SDA=1;DELAY();这两句的含义是什么?

就是将IIC时钟线拉低和拉高嘛,你看一下IIC通信的时序图就明白了。DELAY是限制时钟速度

建议你仔细看下I2C通信的时序

I2C读字节的时序逻辑,

兄弟,我看了没看明白。所以才请教的,你能不能指教一二?

为什么读的时候,要拉低SCL

SDA高电平或低电平状只能在SCL为低时才能改变。

多谢了!兄弟,我还是没有看得太透。
主机向从机开始读数据时,SCL=0,表明从机可以改变SDA上的状态,在从机要控制SDA时,主机必须释放SDA线,所以有了SDA=1这句是不?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top