打印

问个IIC外设的问题?IIC死掉

[复制链接]
3897|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Ryanhsiung|  楼主 | 2011-8-8 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Ryanhsiung 于 2011-8-8 15:08 编辑

开发环境:MPLAB8.63 编译器c18 3.34,单片机PIC18F4620。
   使用内部的IIC外设对24C256进行操作,若对最后两个地址读操作(读后第一个数据采到了),例如0X7FFE,0X7FFF,会造成IIC的数据线一直拉低。IIC就这样死掉了,重新上电才能恢复!
  
若不操作最后两个地址,则不会出现问题,或者进行写操作也不出问题

我一开始以为是PIR2BITS.BCLIF,我现在发送START前还把PIR2BITS.BCLIF清0。
但还是没有解决。
特请教PIC老手来指点一下,原因是什么,要怎么解决 附件是我的代码
坐等高人!

scr.rar

4.07 KB

沙发
Ryanhsiung|  楼主 | 2011-8-8 15:01 | 只看该作者
这个IIC外设对我很重要,上面挂了很多器件。

使用特权

评论回复
板凳
yewuyi| | 2011-8-8 21:02 | 只看该作者
具体为什么会拉底,俺确定不了,不过如果你的ACK机制正确的话,则在SDA被拉死以后,会不断的发送SCL,当累计到9次SCL操作后,IIC上的所有从器件将被强制复位,此时从器件拉死SDA的问题自然就解决了,如果你不能写出一个强健的ACK代码的话,建议你用一个笨办法,那就是在所有启动IIC进行通信前,强制操作总线9次,这样可以强制所有的从器件释放IIC总线.

俺很多年前在侃单片机版面讨论过这个问题,LZ可以翻翻看老贴

使用特权

评论回复
地板
Ryanhsiung|  楼主 | 2011-8-9 10:00 | 只看该作者
3# yewuyi 谢谢,yewuyi 大牛,下午试试,
好像是24c256拉低的

使用特权

评论回复
5
dogglove| | 2011-8-9 13:35 | 只看该作者
累计到9次SCL操作, 这个挺重要。

使用特权

评论回复
6
Ryanhsiung|  楼主 | 2011-8-9 15:13 | 只看该作者
3# yewuyi 可以复位,24C256只要5个脉冲就复位了,不知道为啥!
我现在的复位程序写了10个脉冲,不怕它不复位

使用特权

评论回复
7
Ryanhsiung|  楼主 | 2011-8-9 15:14 | 只看该作者
yewuyi 我给了18分,其它2分给了5L,谢谢大家的帮助

使用特权

评论回复
8
yewuyi| | 2011-8-9 16:18 | 只看该作者
3# yewuyi 可以复位,24C256只要5个脉冲就复位了,不知道为啥!
我现在的复位程序写了10个脉冲,不怕它不复位
Ryanhsiung 发表于 2011-8-9 15:13


9个意思就是:最多需要9个,9个的情况下可以确保不管是何种情况均能保证从器件释放总线。

:L ,你搞出10个有点忙不讲理了。

使用特权

评论回复
9
Ryanhsiung|  楼主 | 2011-8-10 09:34 | 只看该作者
8# yewuyi 10个不会出事吧?

使用特权

评论回复
10
yewuyi| | 2011-8-10 10:20 | 只看该作者
8# yewuyi 10个不会出事吧?
Ryanhsiung 发表于 2011-8-10 09:34


不会有事,但只是浪费!

使用特权

评论回复
11
Ryanhsiung|  楼主 | 2011-8-10 13:33 | 只看该作者
10# yewuyi 呵呵

使用特权

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

本版积分规则

认证:嵌入式技术专家
简介:道阻且长,行则将至!

64

主题

4653

帖子

14

粉丝