主机读从机数据时,SDA和SCL的高低应该如何设置?

主机给从机写数据时先要将SCL设置为低,然后根据需要将SDA设置为高或者低,可是主机读从机数据的过程我不太清楚,读的时候SCL是设置成高还是低呢?因为是从一个管脚读进一位... 主机给从机写数据时先要将SCL设置为低,然后根据需要将SDA设置为高或者低,可是主机读从机数据的过程我不太清楚,读的时候SCL是设置成高还是低呢?因为是从一个管脚读进一位数据(即数据是从机发送的,主机未知),SDA又应该如何设置呢? 展开
 我来答
百度网友3a2aee6
2012-02-13 · TA获得超过132个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:147万
展开全部
不知道你是什么单片机,AVR和ST的首先将SDA置为输入状态,51的好像不用,然后置高SDA,读取数据时,将SCL置高,判断SDA管脚电平状态,若为高,DATA |= 1。再将SCL置低,等待下一位读取,DATA<<1,数据左移一位。再置高SCL,判断SDA状态。依次完成8位数据。
INT8U I2C_ReciveByte(void)
{
INT8U data = 0;
INT8U iLoop;

SETBIT(I2C_PORT,SDA ); // 置高SDA

CLEARBIT(I2C_DIR,SDA ); // 设置SDA为输入

//按位依次读取8位数据
for(iLoop = 0; iLoop < 8; iLoop++){
SETBIT(I2C_PORT,SCL); // 置高SCL
I2C_Delay(1);
data <<= 1;
if(CHECKBIT(I2C_IN,SDA) != 0){//检测SDA状态
data |= 1;
}

CLEARBIT(I2C_PORT,SCL); // 置低SCL
I2C_Delay(1);
}

SETBIT(I2C_DIR,SDA ); // 设置SDA为输出

return data;
}
追问
用的是MSP430里的5438
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式