单片机中 I2C总线协议中的问题 不明白 让SDA=1 为什么说是释放 数据线呢?

如题所述

I2C通讯中 SDA 口通讯双方都可为输出,如果一方输出低,另一方则如果输出高也不能使SDA为高,相当于,输出低的一方占住了SDA口。
两个口,一个出高一个出低,则线上电平是低的。这是由于,出高的驱动能力不及出低拉电流的能力。追问

大哥 谢谢你了 你帮了我好几次了 嘿嘿 不胜感激
是不是这个意思 当SDA一端为低的时候 不论那一端 为高 或 低 SDA 总是低

还有当我 写这句SDA=1的时候 是让那端为1呢? 这里有点晕了

再问个问题 释放SCL的话 是不是就是让SCL=0;

追答

SCL同SDA不一样,不存在释放。I2C通讯是有一个从动方,一个主动方( 这个是事先定好的,不存在主从互换),由主动方提供时钟,所以,SCL一直是主动方在控制,从动方一直是输入口。

SDA输出0 ,这条线是就是0 ,不管另一方,出0还是出1
SCL 只是由一方控制,另一方只输入。

追问

在嘛 大哥 有空的话 我想请教你一个问题 我在做直流电机实验的时候
我看到我的电路图上画的是 直流电机的一端接高电平 这已经是接死了 不能改变了
所以 这个直流电机只能往一个方向转 (这个直流电机是靠 ULN2003 来驱动的)
你看看我的电路图 我想让直流电机上的两根杜邦线 灵活的接上 ULN2003
因为ULN2003 是连接的 P1口的 这样就可以通过编程来控制直流电机的方向了
可是我发现这样不行 不知道为什么根本不转

追答

图上你的直流电机只是一端接5V,一端接ULN2003啊,只能通过ULN2003的out7口出低才能朝着一个方向转动。

追问

恩 我的想法是通过改变接线方式 能通过编程来达到改变 点击转向的目的

让它朝着一个方向转 我会 我想让它能通过两个方向转动

追答

想两个方向转就得另一端不要接5V,也得接到驱动上。通过IO口改变状态。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-24
{ uchar temp,a; init(); writedata(0x02,0x5); //写入的地址 数据 中第一个SCL=0:表示让对方输入数据;( I2C总线是SCL=0时从设备输出数据
第2个回答  2011-05-25
通讯中 SDA 口通讯双方都可为输出,如果一方输出低,另一方则如果输出高也不能使SDA为高,相当于,输出低的一方占住了SDA口。
两个口,因为一个出高一个出低,所以则线上电平是低的。这是由于,出高的驱动能力不及出低拉电流的能力。 知道吧
相似回答