起始信号和终止信号
IIC发送时序
函数:
void i2c_SendByte(uint8_t _ucByte)
{
uint8_t i;
/* 先发送字节的高位bit7 */
for (i = 0; i < 8; i++)
{
if (_ucByte & 0x80) 取出最高位,如果最高位是1,给数据线输入数据1
{
EEPROM_I2C_SDA_1();
}
else
{
EEPROM_I2C_SDA_0(); 最高位不是1,数据线输入0;
}
i2c_Delay();
EEPROM_I2C_SCL_1();//拉高SCL在SCL高电平时候读取数据,SCL低电平期间不允许数据变化
i2c_Delay();
EEPROM_I2C_SCL_0();
if (i == 7)
{
EEPROM_I2C_SDA_1(); // 释放总线/i=7即第八位写数据第八位为1;
}
_ucByte <<= 1; /* 左移一个bit */
i2c_Delay();
}
}
51 发送一个字节(8位)
void IIC_Sendate(uint8_t byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
IIC_SDA=byte&(0x80>>i);//取出最高位
IIC_SCL=1;
IIC_SDA=0;
}
}
发送函数
IIC硬件模拟的步骤:
1、初始GPIO和IIC相关的结构体
2、写入一个字节(根据EEPROM的写入时序进行写入的操作)
3、读取数据(EPPROM的读取时序)
4、等待函数,避免出现还没写完就开始读数据
(硬件模拟的时候一直卡在EV5事件出不来,原因是初始化IIC结构体的时候把开启时钟放到了后面)