目录
三、等待应答函数:u8 IIC_Wait_Ack(void)
四、应答函数:void IIC_Ack(void)、void IIC_NAck(void)
五、IIC发送一个字节函数:void IIC_Send_Byte(u8 txd)
六、IIC接收一个字节函数:u8 IIC_Read_Byte(unsigned char ack)
一、IIC起始信号— IIC_Start(void):
函数源码:
void IIC_Start(void)
{
SDA_OUT(); //SDA线输出模式
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0; //START: when CLK is high,DATA change form high to low
delay_us(4);
IIC_SCL=0; //钳住IIC总线,准备发送或接收数据
}
首先设置数据线SDA端口为输出模式;由于空闲状态时数据线SDA和时钟线SCL都处于高电平状态,所以将IIC_SDA 和 IIC_SCL都设置为高电平。根据起始信号时序—当SCL处于高电平时,SDA由高向低进行跳变,所以将IIC_SDA设置为低电平,此时IIC起始信号已经模拟完成,最后将IIC_SCL设置为低电平,钳住IIC总线,准备发送或接收数据。
二、IIC停止信号— IIC_Stop(void)
函数源码:
void IIC_Stop(void)
{
SDA_OUT(); //SDA端口设置为输出
IIC_SCL=0;
IIC_SDA=0; //STOP: when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1; //发送IIC总线结束信号
delay_us(4);
}
如上图,数据发送完成后数据线SDA和时钟线SCL应该处于低电平状态,所以先将IIC_SDA 和 IIC_SCL都设置为低电平;根据停止信号时序,先将时钟线SCL设置为高电平,后再将数据线SDA由低电平设置为高电平,此时IIC停止信号已经模拟完成,此时数据线SDA和时钟线SCL都为高电平,IIC处于空闲状态。
三、等待应答函数:u8 IIC_Wait_Ack(void)
函数源码&#