打印

PIC16F877A与FM24C16A进行I2C通讯时遇到的问题

[复制链接]
2728|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
temphc|  楼主 | 2013-5-17 16:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 temphc 于 2013-5-17 16:44 编辑

    新手做I2C通讯,芯片是PIC16F877A和FM24C16A。
    简单程序如下,在Proteus里仿真时可以出现预期的波形,没有问题。但是MPLAB里运行时,在子程序WRITE()的第一个while(RW==1)处卡住。然后尝试断点设在子程序WRITE()的第一句SEN=1处调试,发现单步运行过这一句后SSPCON2还是0x00,语句竟然不能对寄存器修改。似乎SEN=1没有起作用,所以硬件也看不到任何波形。很是奇怪,找资料也调试了好多天还是找不到原因,故向大家请教!谢谢!

#include<pic.h>
void I2CINT(void);
void WRITE(void);

void main()
{      I2CINT();
        WRITE();
}

void I2CINT(void)
{       TRISC=0X18;                //RC3、RC4设为输入引脚
        SSPSTAT=0X00;        //使能变化率控制(400khz)
        SSPCON=0X38;        //SSPEN=1;I2C主动模式
        SSPCON2=0X00;        
        SSPADD=19;                //晶振16M,设置每位时间为5us,200khz
}

void WRITE(void)
{
        SEN=1;
        while(SEN==1);               
        SSPBUF=0XA0;                                //Slave Address,write
        while(RW==1);
        while(SSPIF==0);        
        while(ACKSTAT==1);        
        
        SSPBUF=0X00;                                //Word Address
        while(RW==1);
        while(SSPIF==0);        
        while(ACKSTAT==1);

        SSPBUF=0X05;                                //data
        while(RW==1);
        while(SSPIF==0);        
        while(ACKSTAT==1);               

        PEN=1;
        while(PEN==1);
}






沙发
temphc|  楼主 | 2013-5-18 16:39 | 只看该作者
额,没有大神指点一下么:'(

使用特权

评论回复
板凳
zhuweiliang| | 2013-5-19 08:07 | 只看该作者
你写时序有问题

使用特权

评论回复
地板
temphc|  楼主 | 2013-5-19 15:04 | 只看该作者
zhuweiliang 发表于 2013-5-19 08:07
你写时序有问题

额,我基本是参照北航《PIC16系列单片机C程序设计与PROTEUS仿真》的I2C部分写的,也找了网上的一些程序,但都是类似的问题。请教一下问题在哪里?谢谢!

使用特权

评论回复
5
temphc|  楼主 | 2013-5-20 16:28 | 只看该作者
哎,终于解决了,是EEPROM的问题,换了一块新的就好了

使用特权

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

本版积分规则

3

主题

14

帖子

0

粉丝