打印
[PIC®/AVR®/dsPIC®产品]

PIC18F25k80 I2C从模式读取偶尔会出错

[复制链接]
1596|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heqiaosheng|  楼主 | 2014-10-28 00:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
I2C从模式读取偶尔会出错,怎么解决?外部上拉了4.7K。
void IIC_InitI2cSlave(u8 SlaveAddr)
{
        IIC_InitRunParam();
        
        SSPADD = SlaveAddr;// i2c slave addr
        SSPCON1 = 0x36;// power on state
        SSPSTAT = 0x00;// power on state
        SSPCON2 = 0x01;// power on state
               
        PIR1bits.SSPIF = 0;//
        IPR1bits.SSPIP = 1;// 高优先级
        PIE1bits.SSPIE = 1;// 使能I2C1中断
}

if(PIR1bits.SSPIF)// I2C通信中断
        {
            PIR1bits.SSPIF = 0;
            if((!SSPSTATbits.R_NOT_W)&&(SSPSTATbits.S))  //是写操作,并且有启始位
            {
                if(SSPSTATbits.D_NOT_A == 0)
                {
                        // 如果当前接收的是地址
                    i = SSPBUF;
                    SSPCON1bits.CKP = 1;
                                t_I2cManage.OptFlag.Bit.CmdRegOK = 0;  //清除操作寄存器状态
                }
                else
                {        
                        // 如果当前接收的是数据
                                i = SSPBUF;
                    SSPCON1bits.CKP = 1;
                    IIC_OptWriteDataInput(i);// 写入操作对象 或 写入数据
                }
            }
            else if(SSPSTATbits.R_NOT_W)// 如果状态是读数据
            {
                if(SSPSTATbits.D_NOT_A == 0)// 如果是地址
                {
                           SSPBUF = IIC_OptReadInput();// 初次读取数据
                                SSPCON1bits.CKP = 1;
                }
                else// 如果是数据
                {
                    if(SSPCON1bits.CKP == 0)
                    {
                        SSPBUF = IIC_OptReadInput();// 连续读取数据
                        SSPCON1bits.CKP = 1;
                    }
                }
            }
        }

沙发
wangch_sh| | 2014-10-28 15:01 | 只看该作者
单片机是从机吗?

使用特权

评论回复
板凳
heqiaosheng|  楼主 | 2014-10-28 16:37 | 只看该作者
wangch_sh 发表于 2014-10-28 15:01
单片机是从机吗?

是的,slave。

使用特权

评论回复
地板
he282942873| | 2018-10-25 10:20 | 只看该作者
请问你这个现在OK了吗,能分享下完整代码吗,我现在用PIC16F887做从机还有点问题

使用特权

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

本版积分规则

5

主题

44

帖子

0

粉丝