1.IIC起始与停止信号
起始信号:在SCL为高电平期间,SDA由高电平到低电平转变
void IIC_Start(void)
{
SDA_OUT; //SDA数据线配置为输出
SCL_H; //SCL数据线拉高
dlyus(5);
SDA_H; //SDA数据线拉高
dlyus(5);
SDA_L; //SCL为高,SDA由高变低,为开始信号
dlyus(5);
SCL_L; //将SCL拉低,准备发送数据
dlyus(5);
}
停止信号:在SCL为高电平期间,SDA由低电平到高电平转变
void IIC_Stop(void)
{
SDA_OUT; //SDA数据线配置为输出
SCL_L; //SCL数据线拉低
dlyus(5);
SDA_L; //SDA数据线拉低
dlyus(5);
SCL_H; //SCL为高
dlyus(5);
SDA_H; //SCL为高电平,SDA由低变高,为停止信号
dlyus(5);
}
等待应答信号:在SCL为高电平期间,SDA为低电平为应答,SDA为高电平为非应答
void IIC_WaitACK(void)
{
unsigned char ACK_ERROR = 0;
unsigned char error = 1;
unsigned char ACK_OK = 0;
SDA_IN;
SDA_H; //主动非ACK
dlyus(2);
SCL_H;
dlyus(2);
while(READ_SDA)
{
ACK_ERROR ++;
if(ACK_ERROR >= 200)
{