关于I2C总线一个小问题,求大神,在线,马上采纳

voidSendByte(unsignedcharc){unsignedcharBitCnt;for(BitCnt=0;BitCnt<8;BitCnt++)/*要传送的数... void SendByte(unsigned char c)
{
unsigned char BitCnt;

for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/
{
if((c<<BitCnt)&0x80)SDA=1; /*判断发送位*/
else SDA=0;
_Nop();
SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/
_Nop();
_Nop(); /*保证时钟高电平周期大于4μs*/
_Nop();
_Nop();
_Nop();
SCL=0;
}

_Nop();
_Nop();
SDA=1; /*8位发送完后释放数据线,准备接收应答位*/
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
if(SDA==1)ack=0;
else ack=1; /*判断是否接收到应答信号*/
SCL=0;
_Nop();
_Nop();
}

/*8位发送完后释放数据线,准备接收应答位*/
为什么准备接受应答位,要将SDA置1?,SDA=0的时候不能接收数据???不是只要SCL为低电平就能接收数据吗?
展开
 我来答
mydolphin007
2013-08-25
知道答主
回答量:4
采纳率:0%
帮助的人:4.9万
展开全部
将SDA置1,就是释放数据线,这样才能确保能接收到低电平的应答信号,否则不能准确读取应答信号,如果SDA本来输出低电平并且没有置1,那么无论应答信号为高电平或低电平,从数据线读取的总是低电平。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式