打印

请大家看看i2c程序问题出在哪?

[复制链接]
2060|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lylkr|  楼主 | 2008-6-17 19:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      #include<pic.h>
      void first()
      {
      TRISC=0xff;
      SSPADD=9;
      STAT_SMP=1;
      STAT_CKE=0;
      SSPCON=0B00111000;
      
      }
      void test()
      {
       SSPIF=0;
       while(SSPIF==0){;}
      }
      void main()
      {
      char i;
      first();      
      SEN=1;      
      test();
      SSPBUF=0B10100000;
      test();
      SSPBUF=0B00000000;
      test();
      RSEN=1;
      test();
      SSPBUF=0B10100001;
      test();
      FSR=0X32;
      for (i=1;i<7;i++)
      {
      RCEN=1;
       test();
       INDF=SSPBUF;
       ACKDT=0;
       ACKEN=1;
       test();
        FSR++;
      }      
      PEN=1;      
      test();
      SSPIF=0;
      asm("nop");
     }

用的是1片16f873a,1片24c16,
运行第一次,数据能够正常读出,发出停止位后,在test()中无法出来,而且BCLIF位被置“1”,暂停后reset,重新运行,即使将BCLIF位清零,在发送“起始位”时就陷入循环中,而且BCLIF又被置“1”。
只能断电后重新上电,然后再运行再读出数据,但仍然在发出停止位后陷入循环中。

  请大家帮忙看看问题在哪?

  万分谢谢!!!
         
沙发
machunshui| | 2008-6-17 20:03 | 只看该作者

楼主的程序是一个夭折的婴儿

楼主的程序是一个夭折的婴儿.

才一出生,没活几天就夭折了.


主程序应该是个,无限循环结构!

你的就是一段代码,运行完毕就进入了无代码的区域!

能行才怪!

使用特权

评论回复
板凳
lylkr|  楼主 | 2008-6-17 23:53 | 只看该作者

回楼上

我在nop处设置了断点,无法运行到那,发出停止位后,在test()中无法出来

使用特权

评论回复
地板
westsfw| | 2008-6-19 14:19 | 只看该作者

那就是发送停止条件没有成功(好别扭)

先ACK一个1试试,我最近也在玩PIC的IIC,但总也不行。

使用特权

评论回复
5
machunshui| | 2008-6-19 20:05 | 只看该作者

我写的一个基于中断的pic主控i2c的例子

我写的一个基于中断的pic主控i2c的例子,可供参考

https://bbs.21ic.com/club/bbs/bbsView.asp?action=repliedmyannounce

使用特权

评论回复
6
westsfw| | 2008-6-20 08:54 | 只看该作者

看一下相关的寄存器吧

看一下相关的寄存器,是不是MCU在自愉自乐;俺的问题解决了,一个非常弱的原因,把WP接在了高电平上;还有就是建议像二楼说的加个while(1)试试再说。

使用特权

评论回复
7
westsfw| | 2008-6-20 09:28 | 只看该作者

晕。

你接收完之后最后ACK了一个0,24会接着发送数据,然后就是总线冲突了。。。我猜的。

使用特权

评论回复
8
xieyuanbin| | 2008-6-20 10:43 | 只看该作者

没有示波器吗?

通讯程序,用示波器看看是最好的方法。

使用特权

评论回复
9
dream2010| | 2008-6-24 15:13 | 只看该作者

right

 STAT_SMP=1;
 STAT_CKE=0;    未先宏定义


接收完之后最后ACK了一个0,24会接着发送数据,然后就是总线冲突了 应该为1 数据.

使用特权

评论回复
10
lylkr|  楼主 | 2008-6-25 12:34 | 只看该作者

xx

感谢,7、9楼正解
接收最后一个数据后要送非应答位

使用特权

评论回复
11
强仔00001| | 2014-8-2 15:11 | 只看该作者
你有搞过PIC32MZ的硬件的I2C吗??

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

20

帖子

0

粉丝