I2C总线由数据线SDA和时钟线SCL两条线构成通信线路,既可以发送数据,也可以接收数据。以下为单片机模拟I2C总线通信的几个关键程序:
1、总线初始化
void main()
{
SCl=1;
delay();
SDA=1;
delay();
}
2、启动信号
void start()
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}
//SCL在高电平期间,SDA一个下降沿启动信号
3、应答信号
void respons()
{
uchar i=0;
SCL=1;
delay();
while(SDA==1)&&(i<255))
i++;
SCL=0;
delay();
}
4、停止信号
void stop()
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}
//SCL在高电平期间,SDA一个上升沿停止信号
5、写一个字节
void writebyte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;//temp左移一位,最高位将移入PSW寄存器的CY位中
SCL=0; //然后将CY赋给SDA进而在SCL的控制下发送出去
delay();
SDA=CY;
delay();
SCL=1;
delay();
}
SCL=0;
delay();
SDA=1;
delay();
}
//串行发送一个字节时,需要把这个字节中的8位一位一位地发出去
6、读一个字节
uchar readbyte()
{
uchar i,k;
SCL=0;
delay();
SDA=1;
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;//将k左移一位与SDA进行“或”运算,
SCL=0; //依次把8个独立的位放入一个字节中来完成接收
delay();
}
delay();
return k;
}
同样的,接收一个字节时需将8位一位一位地接收