找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2168|回复: 3
收起左侧

单片机IIC通信,无法接收到从机发送的数据

[复制链接]
ID:601478 发表于 2020-3-19 16:01 | 显示全部楼层 |阅读模式
uchar IIC_receive_dat()//接受数据
{
  uchar i,num;
  SCL = 0;
  delay1();
  SDA = 1;
  for(i = 0;i <= 7;i++)
  {
          SCL = 1;
          delay1();
          num = (num<<1)|SDA;
          SCL = 0;
          delay1();
  }
  return num;
}

接受程序如上,接收前已检测到从机发送的ACK信号,然后开始执行上面的接收程序,不过无法收到任何数据,从机芯片手册说的发送8bit数据,然而我把接收结果与0到255一一比较,居然没有找出收到的数据内容到底是什么,0到255没有一个数值能触发我写的条件,很迷惑,不是0,也不是0xff,这种场面真的第一次见,不知道有没有大佬知道其中的问题,谢谢

回复

使用道具 举报

ID:592807 发表于 2020-3-19 18:02 | 显示全部楼层
留个眼,
回复

使用道具 举报

ID:711971 发表于 2020-3-20 01:04 | 显示全部楼层
1.SDA = 1;之后是否需要设置SDA为输入模式?
2.从机是否需要先发送寄存器地址再进行读出操作?
3.示波器看以下SDA,是否有波动,SCL是否速度超过器件限制(100K,410K?)
回复

使用道具 举报

ID:601478 发表于 2020-3-20 13:54 | 显示全部楼层
逐位检测收到的信号后发现输出的数据常态时为0xff,触发态时数据中对应的触发位为0,已检测到共有4个触发源,然而当我用FOR循环接收8bit数据时,无法用检测对应触发位是否为0来检测收到的8bit数据内容,可能是语句出了问题,但是将接收数据子程序移植到其他IIC收发设备上发现运行正常,,目前只能用顺序语句逐位检测来确定触发位的电平状态,无法使用FOR循环
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表