您的位置 首页 汽车

I2C总线留意关键

1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL。2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从

1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL。

2、每个连接到总线的器材都能够经过仅有的地址和一向存在的简略的主机/从机联系软件设定地址,主机能够作为主机发送器或主机接收器。

3、在传输数据的时分,SDA线有必要在时钟的高电平周期保持稳定,SDA的高或低电平状况只要在SCL线的时钟信号是低电平时才干改动。

4、SCL线是高电平时,SDA线从高电平向低电平切换,这个状况表明开端条件。

5、SCL线是高电平时,SDA线由低电平向高电平切换,这个状况表明中止条件。

6、数据传输有必要带呼应,相关的呼应时钟脉冲由主机发生。在呼应的时钟脉冲期间发送器开释SDA线(高)。呼应的时钟脉冲期间,接收器有必要将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。

7、第一个字节的头7位组成了从机地址,最低位(LSB)是第8位,它决议了传输的方向。第一个字节的最低位是“0”,表明主时机写信息到被选中的从机;“1”表明主时机向从机读信息,当发送了一个地址后,体系中的每个器材都在开端条件后将头7位与它自己的地址比较,假如相同,器材会断定它被主机寻址,至所以从机接收器仍是从机发送器,都由R/W位决议的。

voidI2C_delay(void)

{

u8i=200;

while(i)

{

i–;

}

}

voidI2C_Start(void)

{

SDA_H;

I2C_delay();

SCL_H;//SCL线是高电平时,SDA线从高电平向低电平切换,总线开端

I2C_delay();

SDA_L;

I2C_delay();

SCL_L;

I2C_delay();

}

voidI2C_Stop(void)

{

SDA_L;

I2C_delay();

SCL_H;//SCL线是高电平时,SDA线由低电平向高电平切换,总线完毕。

I2C_delay();

SDA_H;

I2C_delay();

}

//等候ACK应对

voidWaitACK1(void)

{

u8errtime=225;

SDA_IN();//设置SDA端口为输入形式

I2C_delay();

SCL_H;

I2C_delay();

while(SDA_read)//SCL拉高后,等候SDA被拉低(ACK)

{

errtime–;

if(errtime==0)

{

I2C_Stop();

SDA_OUT();

break;

}

}

SCL_L;

SDA_OUT();

I2C_delay();

}

//写入单字节数据

voidWritebyte(unsignedcharData)

{

unsignedchari;

for(i=0;i<8;i++)

{

if((Data<

{

SDA_H;

}

else

{

SDA_L;

}

I2C_delay();

SCL_H;

I2C_delay();

SCL_L;

}

SDA_L;

I2C_delay();

WaitACK1();

I2C_delay();

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/233093.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部