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

[复制链接]
 楼主| lylkr 发表于 2008-6-17 19:04 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include&ltpic.h&gt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;first()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRISC=0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPADD=9;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STAT_SMP=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STAT_CKE=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPCON=0B00111000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;test()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPIF=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(SSPIF==0){;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;main()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEN=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPBUF=0B10100000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPBUF=0B00000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RSEN=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPBUF=0B10100001;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSR=0X32;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=1;i&lt7;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RCEN=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INDF=SSPBUF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACKDT=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACKEN=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSR++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PEN=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPIF=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;nop&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />用的是1片16f873a,1片24c16,<br />运行第一次,数据能够正常读出,发出停止位后,在test()中无法出来,而且BCLIF位被置“1”,暂停后reset,重新运行,即使将BCLIF位清零,在发送“起始位”时就陷入循环中,而且BCLIF又被置“1”。<br />只能断电后重新上电,然后再运行再读出数据,但仍然在发出停止位后陷入循环中。<br /><br />&nbsp;&nbsp;请大家帮忙看看问题在哪?<br /><br />&nbsp;&nbsp;万分谢谢!!!<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
machunshui 发表于 2008-6-17 20:03 | 显示全部楼层

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

楼主的程序是一个夭折的婴儿.<br /><br />才一出生,没活几天就夭折了.<br /><br /><br />主程序应该是个,无限循环结构!<br /><br />你的就是一段代码,运行完毕就进入了无代码的区域!<br /><br />能行才怪!
 楼主| lylkr 发表于 2008-6-17 23:53 | 显示全部楼层

回楼上

我在nop处设置了断点,无法运行到那,发出停止位后,在test()中无法出来
westsfw 发表于 2008-6-19 14:19 | 显示全部楼层

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

先ACK一个1试试,我最近也在玩PIC的IIC,但总也不行。
machunshui 发表于 2008-6-19 20:05 | 显示全部楼层

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

我写的一个基于中断的pic主控i2c的例子,可供参考<br /><br />https://bbs.21ic.com/club/bbs/bbsView.asp?action=repliedmyannounce
westsfw 发表于 2008-6-20 08:54 | 显示全部楼层

看一下相关的寄存器吧

看一下相关的寄存器,是不是MCU在自愉自乐;俺的问题解决了,一个非常弱的原因,把WP接在了高电平上;还有就是建议像二楼说的加个while(1)试试再说。
westsfw 发表于 2008-6-20 09:28 | 显示全部楼层

晕。

你接收完之后最后ACK了一个0,24会接着发送数据,然后就是总线冲突了。。。我猜的。
xieyuanbin 发表于 2008-6-20 10:43 | 显示全部楼层

没有示波器吗?

通讯程序,用示波器看看是最好的方法。
dream2010 发表于 2008-6-24 15:13 | 显示全部楼层

right

&nbsp;STAT_SMP=1;<br />&nbsp;STAT_CKE=0;&nbsp;&nbsp;&nbsp;&nbsp;未先宏定义<br /><br /><br />接收完之后最后ACK了一个0,24会接着发送数据,然后就是总线冲突了&nbsp;应该为1&nbsp;数据.
 楼主| lylkr 发表于 2008-6-25 12:34 | 显示全部楼层

xx

感谢,7、9楼正解<br />接收最后一个数据后要送非应答位
强仔00001 发表于 2014-8-2 15:11 | 显示全部楼层
你有搞过PIC32MZ的硬件的I2C吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部