关于IIC 的读写问题 急求大神~~~~~~~~~~~~~~~~~~~~~~~

2019-07-16 03:33发布

  1. void  writebyte(char date)
  2. {
  3.         char i,temp;
  4.         temp = date;
  5.         for( i = 0; i < 8; i++)
  6.         {
  7.                 temp = temp<<1;
  8.                 SCL = 0;
  9.                 delay();
  10.                 SDA = CY;
  11.                 delay();
  12.                 SCL = 1;
  13.                 delay();
  14.         }
  15.         SCL = 0;                                          // scl 为什么要拉低?
  16.         delay();                       
  17.         SDA = 1 ;                                         // sda 为什么要拉高?       
  18.         delay();
  19. }

  20. char readbyte()
  21. {
  22.         char i,k;
  23.         SCL = 0;
  24.         delay();
  25.         SDA = 1;                          //这里的scl 和 sda 为何要分别为低电平和高电平?
  26.         delay();
  27.         for(i = 0; i < 8;i++)
  28.         {
  29.                 SCL = 1;                                     //当 scl为高电平的时候数据不可以改变
  30.         delay();
  31.                 k = ( k<<1 )|SDA;
  32.                 SCL = 0;                              
  33.                 delay();                  

  34.         }

  35.         return k;
  36. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
3htech
1楼-- · 2019-07-16 05:56
芊Sunshine
2楼-- · 2019-07-16 10:47
  1.         SCL = 0;                                          // scl 为什么要拉低?

  2.           delay();                        

  3.              SDA = 1 ;                                         // sda 为什么要拉高?  
  4.    
复制代码如果要释放总线 scl 不应该也是高电平吗? 然后等待应答信号
andylfg
3楼-- · 2019-07-16 13:09
 精彩回答 2  元偷偷看……
lovezjf234
4楼-- · 2019-07-16 16:21
因为你写的是模拟I2C所以在总线上主机不会自动拉高进行ACK,ACK是指在scl为低电平的时候从机经行应答,所以在你里面需要先拉低scl再拉高SDA
190471306
5楼-- · 2019-07-16 21:31
看看,数据手册,看读写时序。。。。。。。。。。。
lstcspring
6楼-- · 2019-07-16 23:13
自己把I2C时序翻出来看一下

一周热门 更多>