打印

MSSP模块的I2C模式

[复制链接]
2567|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qhcmcu|  楼主 | 2008-7-24 16:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
附件的程序为24C04采用I2C总线通信程序
在PROTEUS中调试,有两问题要解决??
1。替代延时10ms程序 如何写呢?
2。在读数据时死循环,置位不了SSBIF
请朋友们帮忙!!!
相关链接:https://bbs.21ic.com/upfiles/img/20079/200798164450377.rar
沙发
qhcmcu|  楼主 | 2008-7-24 16:32 | 只看该作者

替代延时10ms程序

要特别注意的两个问题是:1)24C04有一个约10ms的片内写周期。在这个周期内,24C04是不对外界的操作作出反应的。2)在发送数据的过程中,要确保当SCL为高电平时,SDA保持稳定。
    解决第一个问题的常见方法有两个,其一为采用延时等待,确保在写过程中,在一个字节完成发送了停止位之后,微处理器等待足够的时间,通常应该超过10ms,再送下一个字节,这段时间用来等待EEPROM完成片内写周期。另一个是采用轮询的方式,判断EEPROM是否完成了片内写周期。这种方式的主导思想是,当向EEPROM发送写标志后,正常情况下,EEPROM应该有ACK应答。但是当EEPROM在进行片内写周期的时候,则不会产生这样的应答。程序据此判断,EEPROM是否完成了片内的写周期程序。如果完成,则可以继续写入下一个要写的内容,否则继续等待。
    第一种方法编程较为简单,但是会浪费大量的机器时间,并且程序的延时时间不好确定。第二种方法的优点在于,虽然编程较为复杂,但是较为快速,对其余的程序模块影响较少,便于完成程序的模块化设计。
    对于在发送数据的过程中,要确保当SCK为高电平时,SDA必须保持稳定,应该在程序中利用软件给予保证。
    如果可以很好的解决以上两个问题,数据的写入和读出是方便快捷和可靠的。

替代延时10ms程序指的是采用上面第二种方法的程序???

使用特权

评论回复
板凳
qhcmcu|  楼主 | 2008-7-25 10:33 | 只看该作者

重启动信号启动不了

有人知道吗
为什么重启动信号启动不了?

使用特权

评论回复
地板
qhcmcu|  楼主 | 2008-7-29 16:45 | 只看该作者

PROTEUS7.2 sp6可以读,写

在PROTEUS6.7 sp3可以写,不能读(重启动信号启动不了)。
在PROTEUS7.2 sp6可以读,写。
怪!!!
采用轮询的方式,判断EEPROM是否完成了片内写周期。用代码如何实现呢?

使用特权

评论回复
5
machunshui| | 2008-7-29 16:55 | 只看该作者

if(WR == 0)

"采用轮询的方式,判断EEPROM是否完成了片内写周期。用代码如何实现呢?"

if(WR == 0)
{
do something;
}

使用特权

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

本版积分规则

45

主题

86

帖子

1

粉丝