单片机模拟I2C接收数据接收不到数据问题

jooonny 2017-09-05 10:30:03

void IIC_Read_MCU(void) //从机读出数据
{
int i=0;
scl_IN_MCU();
sda_IN_MCU();
k=0;
data=0;


#if 1

for (i=0; i<8; i++)
{
data <<= 1;

Delay_SCL_H();
if(sda&0x01)
{
data |= 0x01;

}
else
{
data &= 0xfe;

}

Delay_SCL_L();
}


}

单片机模拟I2C接收数据接收不到数据问题,接收不到数据,为什么,请大神帮忙解答下 谢谢。
...全文
842 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_40396547 2017-10-16
  • 打赏
  • 举报
回复
示波器接上,。。看下时序对不对,,,有没有信号返回? 返回了是否解析正确,还是直接丢弃?
辉_alexxm 2017-09-30
  • 打赏
  • 举报
回复
示波器 拿来用
C_Rabbit 2017-09-19
  • 打赏
  • 举报
回复 1
首先要确定你的MCU的相关IO设置是不是正确,I2C通信要求双方的IO配置都是开漏输出,也就是弱上拉。方便通信双方在通信过程中拉低IO产生信号,如果有一方被设置成了推挽输出(强上拉),那么另一方发出信号的动作就会失败(因为无法拉低sda) 在其次就是要确定你的输出波形是否正确,其中包括sck和sda之间的脉冲位置,脉冲信号的情况等等,这个最好是能够通过示波器来直接观看,比较好做分析。
yzy12960 2017-09-15
  • 打赏
  • 举报
回复
这种事情,个人觉得要仔细看看你所用的I2C从器件的datasheet,静心看明白了时序控制要求后你写的代码就能读写正常了,这比上网求解管用多了!
dceacho 2017-09-06
  • 打赏
  • 举报
回复
start,ack,address,都没有

27,372

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧