/* ********************************************************************************************************* * 函 数 名: i2c_SendByte * 功能说明: CPU向I2C总线设备发送8bit数据 * 形 参: _ucByte : 等待发送的字节 * 返 回 值: 无 ********************************************************************************************************* */ void i2c0_SendByte(uint8_t _ucByte) { uint8_t i; /* 先发送字节的高位bit7 */ for (i = 0; i < 8; i++) { if (_ucByte & 0x80) { I2C_SDA_1(); } else { I2C_SDA_0(); } i2c0_Delay(); I2C_SCL_1(); i2c0_Delay(); I2C_SCL_0(); if (i == 7) { I2C_SDA_1(); // 释放总线 } _ucByte <<= 1; /* 左移一个bit */ i2c0_Delay(); } }
/* ********************************************************************************************************* * 函 数 名: i2c_Start * 功能说明: CPU发起I2C总线停止信号 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void i2c0_Stop(void) { /* 当SCL高电平时,SDA出现一个上跳沿表示I2C总线停止信号 */ I2C_SDA_0(); I2C_SCL_1(); i2c0_Delay(); I2C_SDA_1(); }
/* ********************************************************************************************************* * 函 数 名: i2c_Ack * 功能说明: CPU产生一个ACK信号 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void i2c0_Ack(void) { I2C_SDA_0(); /* CPU驱动SDA = 0 */ i2c0_Delay(); I2C_SCL_1(); /* CPU产生1个时钟 */ i2c0_Delay(); I2C_SCL_0(); i2c0_Delay(); I2C_SDA_1(); /* CPU释放SDA总线 */ }
/* ********************************************************************************************************* * 函 数 名: i2c_Start * 功能说明: CPU发起I2C总线启动信号 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void i2c0_Start(void) { /* 当SCL高电平时,SDA出现一个下跳沿表示I2C总线启动信号 */ I2C_SDA_1(); I2C_SCL_1(); i2c0_Delay(); I2C_SDA_0(); i2c0_Delay(); I2C_SCL_0(); i2c0_Delay(); }
/* ********************************************************************************************************* * 函 数 名: i2c_Start * 功能说明: CPU发起I2C总线停止信号 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void i2c_Stop(void) { SDA_OUT(); //sda线输出 /* 当SCL高电平时,SDA出现一个上跳沿表示I2C总线停止信号 */ I2C_SCL_0(); I2C_SDA_0(); i2c_Delay(); I2C_SCL_1(); I2C_SDA_1(); i2c_Delay(); }
/* ********************************************************************************************************* * 函 数 名: i2c_Start * 功能说明: CPU发起I2C总线启动信号 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void i2c_Start(void) { SDA_OUT(); //sda线输出 /* 当SCL高电平时,SDA出现一个下跳沿表示I2C总线启动信号 */ I2C_SDA_1(); I2C_SCL_1(); i2c_Delay(); I2C_SDA_0(); i2c_Delay(); I2C_SCL_0(); i2c_Delay(); }
/* ********************************************************************************************************* * 函 数 名: i2c_SendByte * 功能说明: CPU向I2C总线设备发送8bit数据 * 形 参:_ucByte : 等待发送的字节 * 返 回 值: 无 ********************************************************************************************************* */ void i2c_SendByte(uint8_t _ucByte) { uint8_t i; I2C_SCL_0(); /* 先发送字节的高位bit7 */ for (i = 0; i < 8; i++) { if (_ucByte & 0x80) { I2C_SDA_1(); } else { I2C_SDA_0(); } _ucByte <<= 1; /* 左移一个bit */ i2c_Delay(); I2C_SCL_1(); i2c_Delay(); I2C_SCL_0(); i2c_Delay(); } I2C_SDA_1(); // 释放总线 i2c_Delay(); I2C_SCL_0(); i2c_Delay(); if(I2C_SDA_READ()) { I2C_SCL_0(); return ; } else { I2C_SCL_0(); return ; } }
/* ********************************************************************************************************* * 函 数 名: i2c_Start * 功能说明: CPU发起I2C总线启动信号 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void i2c_Start(void) { /* 当SCL高电平时,SDA出现一个下跳沿表示I2C总线启动信号 */ I2C_SDA_1(); i2c_Delay(); I2C_SCL_1(); i2c_Delay(); if(!I2C_SDA_READ()) return ; I2C_SDA_0(); i2c_Delay(); I2C_SCL_0(); i2c_Delay(); if(I2C_SDA_READ()) return; }
/* ********************************************************************************************************* * 函 数 名: i2c_SendByte * 功能说明: CPU向I2C总线设备发送8bit数据 * 形 参:_ucByte : 等待发送的字节 * 返 回 值: 无 ********************************************************************************************************* */ void i2c_SendByte(uint8_t _ucByte) { uint8_t i; /* 先发送字节的高位bit7 */ for (i = 0; i < 8; i++) { I2C_SCL_0(); if (_ucByte & 0x80) { I2C_SDA_1(); } else { I2C_SDA_0(); } i2c_Delay(); I2C_SCL_1(); i2c_Delay(); _ucByte<<=1; } }