IIC
-开始条件
IIC的起始条件为:在SCL高电平期间SDA由高电平变为低电平。
代码如下:
void IIC_Start(void)
{
IIC_SCL=1;
IIC_SDA=1;
delay();
IIC_SDA=0;
delay();
IIC_SCL=0;
}
-停止条件
IIC的停止条件为:SCL高电平期间SDA由低电平变为高电平。
代码如下:
void IIC_Stop(void)
{
IIC_SCL=1;
delay();
IIC_SDA=0;
delay();
IIC_SDA=1;
}
-发出应答
代码如下:
void PUT_ACK(unsigned char ACK)
{
IIC_SCL=0;
if(ACK)
IIC_SDA=1; //非应答
else
IIC_SDA=0; //应答
delay();
IIC_SCL=1;
delay();
IIC_SCL=0;
}
- 得到应答
代码如下:
unsigned char GET_ACK(void)
{
unsigned char ACK;
IIC_SCL=0;
delay();
IIC_SDA=1; //开漏输出
delay();
IIC_SCL=1;
if(Read_SDA)
ACK=1; //非应答
else
ACK=0; //应答
delay();
IIC_SCL=0;
return ACK;
}
- IIC写一字节
代码如下:
void IIC_Write_byte(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++)
{
IIC_SCL=0;
if(data&0x80)
IIC_SDA=1;
else
IIC_SDA=0;
data<<=1;
delay();
IIC_SCL=1;
delay();
}
IIC_SCL=0;
delay();
GET_ACK();
}
- IIC读一字节
代码如下:
unsigned char IIC_Read_byte(void)
{
unsigned char i,data=0;
IIC_SCL=0;
delay();
IIC_SDA=1;
delay();
for(i=0;i<8;i++)
{
IIC_SCL=1;
data<<=1;
if(Read_SDA)
data|=0x01;
else
data&=0xfe;
delay();
IIC_SCL=0;
}
PUT_ACK(ACK);
return data;
}