资讯详情

BH1750光强传感器在G2Lauchpad应用之I2C探究

先来重新学习回顾I2C的协议: /**********************************************

//IIC Start **********************************************/ void IIC_Start() { SCL_HIGH;// SCL一直为高电平,等待SDA的下降沿到来产生一个起始信号 i2c_delay_us(); SDA_HIGH; i2c_delay_us(); SDA_LOW; i2c_delay_us(); SCL_LOW;// SCL拉低,允许SDA变化 i2c_delay_us(); } /********************************************** //IIC Stop **********************************************/ void IIC_Stop(void) { SCL_HIGH;// SCL一直为高电平,等待SDA的上升沿到来产生一个停止信号 i2c_delay_us(); SDA_LOW; i2c_delay_us(); SDA_HIGH; i2c_delay_us(); } //**********************主机接收应答信号 uint8 Master_RecvACK(void) { uint8 i = 200; uint8 Temp = 0; SCL_HIGH;// 在响应的时钟脉冲期间接收器将SDA线拉低使它在这个时钟脉冲的高电平期间保持稳定的低电平 i2c_delay_us(); while((SDA_State!=0) || (i>0)) i--;// 判断数据线时候存在应答信号"0", i是防止死循环死机 Temp = SDA_IN; SCL_LOW;// SCL拉低,允许SDA变化 i2c_delay_us(); return Temp; } //**********************主机发送应答信号(ACK:0 NCK:1) void Master_SendACK(uint8 bit) { //SCL_LOW;// SCL拉低,允许SDA变化 //i2c_delay_us(); if(bit == 0)// ACK { SDA_LOW; i2c_delay_us(); } else if(bit == 1)// NCK { SDA_HIGH; i2c_delay_us(); } SCL_HIGH;//时钟线置1,数据被写进 i2c_delay_us(); SCL_LOW;// SCL拉低,允许SDA变化 i2c_delay_us(); } /********************************************** // 通过I2C总线读一个字节 **********************************************/ uint8 IIC_Read_Byte(void) { uint8 i,Temp; SDA_HIGH;// 释放SDA,让从机控制(读数据时SDA由从机控制) i2c_delay_us(); for(i=8; i>0; i--) { SCL_HIGH; i2c_delay_us(); Temp <<= 1; if((SDA_IN )== BIT7) //先收高位 Temp |= BIT0; SCL_LOW ; i2c_delay_us(); } return(Temp); } /********************************************** // 通过I2C总线写一个字节 **********************************************/ void IIC_Write_Byte(uint8 IIC_Byte) { uint8 i; //SCL_LOW;// SCL拉低,允许SDA变化 //i2c_delay_us(); for(i=8;i>0;i--) { if(IIC_Byte & BIT7)// 先写高位 SDA_HIGH; else SDA_LOW; IIC_Byte<<=1; SCL_HIGH;//时钟线置1,数据被写进 i2c_delay_us(); SCL_LOW;//时钟线置0,数据线上的数据允许变化 i2c_delay_us(); } Master_RecvACK(); }
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台