打印

请问程序里IO模拟I2C的发送字节里的释放总线怎么理解?

[复制链接]
461|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
考哥|  楼主 | 2020-4-7 12:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
*********************************************************************************************************
* 函 数 名: i2c_SendByte
* 功能说明: CPU向I2C总线设备发送8bit数据
* 形    参:_ucByte : 等待发送的字节
* 返 回 值: 无
*********************************************************************************************************
*/
//以8Bit为一个单元,一个BIT一个BIT的发,高位先发,低位后发,
void i2c_SendByte(uint8_t _ucByte)
{
uint8_t i;
//先发送字节的高位bit7
for (i = 0; i < 8; i++)
{  
  if (_ucByte & 0x80) //MSB在前
  {
   EEPROM_I2C_SDA_1();
  }
  else
  {
   EEPROM_I2C_SDA_0();
  }
  i2c_Delay();
  EEPROM_I2C_SCL_1();
  i2c_Delay();
  EEPROM_I2C_SCL_0();
  if (i == 7)
  {
    EEPROM_I2C_SDA_1(); //释放总线
  }
  _ucByte <<= 1; /* 左移一个bit */
  i2c_Delay();
}
}



其它都理解,里面的:
  if (i == 7)
  {
    I2C_SDA_1(); // 释放总线
  }
当全部8位发送完毕后,SDA置高,这时就算释放总线了?这时SCL没有变高。
(备注)当SDA和SCL都为高电平时,就称之为释放总线。或者 SCL保持高电平的状态下,SDA出现上升沿。停止信号过后,总线被认为“空闲”。
如果理解为发送地址后的读写控制位也不对呀,后面有调用的该函数的时候,特意加上了读写控制位。

/* 发送设备地址+读写控制bit(0 = w, 1 = r) bit7 先传 */

i2c_SendByte(_Address | EEPROM_I2C_WR);

谢谢解答。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

461

主题

477

帖子

0

粉丝