您的位置 首页 厂商

用I/O口模仿IIC总线协议遇到的一些问题

最近做的一个项目,是基于IIC总线通信的传感器系统。由于另外一个传感器使用的是类IIC协议,而不是标准IIC,所以MCU不能与其通信,最后没有办法,只有通过I/O口模拟的方式实现IIC的总线通信。

  最近做的一个项目,是依据IIC总线通讯的传感器体系。由于别的一个传感器运用的是类IIC协议,而不是规范IIC,所以MCU不能与其通讯,最终没有办法,只要经过I/O口模仿的方法完结IIC的总线通讯。详细的程序在我博客里在从前的早些时分现已贴出来了,如果有爱好的能够查看我的博客。

  首要完结一下我在这个过程中遇见的问题

  1、在写完数据(指令或许地址)后 没有应对信号

  一般开端的时序依据手册里边的时序图很简单能够写出,第一个没有应对,就有或许向从器材写完数据今后。一般这个时分首要查看的是,上升沿和下降沿,看手册里边说的是上升沿读写仍是下降沿读写。我的项目中是上升沿读写数据,换一句话说,在上升沿的时分读写SDA线上的电平指示;下降沿的时分改动数据,其中有一点需求留意,便是先拉低SCL线发生下降沿,在程序中拉低之后要有必定的延时,由于I/O口安稳电平需求必定的时间。否则的话在SDA高的状况下,误拉低了SCL就会发生一个发动条件,天然写入的操作也就失利了。

  2、在读取数据的时分数据不对

  这样的状况是有数据可是不是有用的数据,一般这个时分就要看模仿的时序是否对了,要清晰的在上升沿的时间读取数据,然后留意的便是数据移位,每读取一位数据之后就要移位一个数据位,下面便是一段读取8位数据的代码。

  for(i=0;i<8;i++)

  {

  IIC_SCL_HIGH(); //转化完结,SLAVE器材将数据线拉低,时钟线发生上升沿读取高8位数据

  REC1=(REC1<<1)+IIC_SDA;

  delay_us(5);

  IIC_SCL_LOW(); //将时钟线拉低,等候下一个上升沿的到来

  delay_us(5);

  }

  3、在用I/O操作的过程中,凹凸电平怎么书写

  输入输出的I/O口都是有方向的,要留意方向的书写,引荐的一种写法便是高电平的写的时分将I/O装备为输入,这样上拉的效果就会向总线输出高电平,这样的优点便是能够在写完之后能够等候从器材对总线的操作,不会发生必定的抵触。下面便是一段高地电平的写法

  #define IIC_SCL_HIGH() IIC_SCL_DIR = PORT_INPUT //时钟线拉高

  #define IIC_SCL_LOW() IIC_SCL_DIR = PORT_OUTPUT;IIC_SCL=0//时钟线拉低

  #define IIC_SDA_HIGH() IIC_SDA_DIR = PORT_INPUT //数据线拉高

  #define IIC_SDA_LOW() IIC_SDA_DIR = PORT_OUTPUT;IIC_SDA=0//数据线拉低

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/298633.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部