* @brief IIC start signal
* @comment SCL、SDA同为高,SDA跳变成低之后,SCL跳变成低 * @retval None */
void I2CStart(void {
HTU20_SDA_OUT(; HTU20_SDA_1(; HTU20_SCL_1(; I2CDelay(5; //大于4.7us HTU20_SDA_0(; I2CDelay(5; //大于4us HTU20_SCL_0(; I2CDelay(5; } /**
* @brief IIC Stop Signal
* @commet SCL、SDA同为低,SCL跳变成高之后,SDA跳变成高* @retvalNone
*/
void I2CStop(void {
HTU20_SDA_OUT(; HTU20_SDA_0(; HTU20_SCL_0(; I2CDelay(5; HTU20_SCL_1(; I2CDelay(5; HTU20_SDA_1(; I2CDelay(5; } /**
* @brief simu IIC write byte * @paramWrite_Byte: data * @retvalNone */
BYTE I2C_Write_Byte(BYTE Write_Byte {
BYTE i;
HTU20_SDA_OUT(; for(i = 0; i < 8; ++i {
if(Write_Byte& SHT20ADDR {
HTU20_SDA_1(; } else {
HTU20_SDA_0(; }
I2CDelay(1;
HTU20_SCL_1(; //输出SDA稳定后拉高SCL,从机检测到后采样I2CDelay(5; //保证足够长锁定时间,确保从机采样成功
HTU20_SCL_0(; I2CDelay(1; Write_Byte<<= 1; }
I2CDelay(4;
HTU20_SDA_1(; //8位发送完后释放数据线,准备接受应答信号HTU20_SCL_1(; //再次拉高SCL,告诉从机发送完毕,等待应答I2CDelay(5; //原来是5
HTU20_SDA_IN(; i = 100; do {
if(HTU20_SDA == 0 break; i--;
I2CDelay(4; //原来是5 }while(i>0; HTU20_SCL_0(; if(i return ACK; else return NACK;
// if(HTU20_SDA == 1 //SDA为高,收到NACK // return NACK;
// else //SDA为低,收到ACK // return ACK; // HTU20_SCL_0(;
// I2CDelay(15; } /**
* @brief simu read byte form IIC * @param * @retvalNone */
BYTE I2C_Read_Byte(BYTE AckValue//receivebyte {
BYTE i, RDByte = 0;
HTU20_SCL_0(; /*后改的程序*/ HTU20_SDA_OUT(; // HTU20_SCL_0(;
HTU20_SDA_1(; //释放总线,并置数据线为输入HTU20_SDA_IN(; for (i = 0; i < 8; ++i {
HTU20_SCL_1(; //拉高SCL期间,采样 I2CDelay(2; RDByte<<= 1;