/**************************实现函数******************************************** *函数原型:void iic_ack(void) *功 能:产生ACK应答 *******************************************************************************/ void iic_ack(void) { IIC_SCL_L(); SDA_OUT(); IIC_SDA_L(); delay_us(1); IIC_SCL_H(); delay_us(1); IIC_SCL_L(); }
/**************************实现函数******************************************** *函数原型:void iic_start(void) *功 能:产生IIC起始信号 *******************************************************************************/ void iic_start(void) { SDA_OUT(); //sda线输出 IIC_SDA_H(); IIC_SCL_H(); delay_us(1); IIC_SDA_L(); //START:when CLK is high,DATA change form high to low delay_us(1); IIC_SCL_L(); //钳住I2C总线,准备发送或接收数据 }
/**************************实现函数******************************************** *函数原型:void iic_stop(void) *功 能:产生IIC停止信号 *******************************************************************************/ void iic_stop(void) { SDA_OUT(); //sda线输出 IIC_SCL_L(); IIC_SDA_L(); //STOP:when CLK is high DATA change form low to high delay_us(1); IIC_SCL_H(); IIC_SDA_H(); //发送I2C总线结束信号 delay_us(1); }
/**************************实现函数******************************************** *函数原型:void iic_send_8bits(uint8_t txd) *功 能:IIC发送一个字节 *******************************************************************************/ void iic_send_8bits(uint8_t txd) { uint8_t t; SDA_OUT(); IIC_SCL_L(); //拉低时钟开始数据传输 for(t=0;t<8;t++) { if( txd & 0x80 ) IIC_SDA_H(); else IIC_SDA_L(); txd <<= 1; delay_us(1); IIC_SCL_H(); delay_us(1); IIC_SCL_L(); delay_us(1); } }
void IIC_WriteBit(u8 Temp) { u8 i; IIC_SDA_Out(); IIC_SCL_L(); for(i=0;i<8;i++) { if(Temp&0x80) { IIC_SDA_H(); } else { IIC_SDA_L(); } Temp<<=1; IIC_Delay(1); IIC_SCL_H(); IIC_Delay(1); IIC_SCL_L(); } }