举个例子:结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。 这是库函数指南上写的 ,正确I2C协议
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=0; 一开始SCL,SDA是低电平,延时4US SCL变高电平,然后SDA变高电平,延时。这能识别出来结束信号吗?
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);
这是我以前看到用C51写的
void ADXL345_Stop()
{
SDA = 0; //拉低数据线 先让SCL变高,然后延时,SDA再拉高。 同样是SCL先高SDA再高,但我总觉得这个更符合,或是更安全。。。
SCL = 1; //拉高时钟线
Delay5us(); //延时
SDA = 1; //产生上升沿
Delay5us(); //延时
} |