您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC24F之EEPROM读写中断事件处理函数要点 正文
PIC24F之EEPROM读写中断事件处理函数要点

PIC24F之EEPROM读写中断事件处理函数要点

点击数:7161 次   录入时间:03-04 11:59:12   整理:http://www.55dianzi.com   PIC单片机
                    I2cExit();//错误的ACK信号    
                }    
                break;
            case I2C_MR_DATA://收到接收数据
                if (I2CRegs.Count < I2CRegs.RxCount)
                {
//                    I2C1STATbits.I2COV = 0;
                    I2CRegs.RxBuffer[I2CRegs.Count ++] = I2C1RCV;
                    if (I2CRegs.Count < I2CRegs.RxCount)
                    {
                         I2C1CONbits.ACKDT = 0;//应答子机
                        I2CRegs.State = I2C_MR_DATA_EN;//下次应该收到器件允许继续读信号
                    }
                    else
                    {
                        I2C1CONbits.ACKDT = 1;//非应答子机    
                        I2CRegs.State = I2C_MR_DATA_STOP;//下次应该收到退出信号
                    }
                     I2C1CONbits.ACKEN = 1;//向从机发送(非)应答信号
                }
                else//正确的状态已分支到I2C_MR_DATA_STOP
                {
                    I2cExit();//错误
                }
                break;
            case I2C_MR_DATA_EN://收到器件允许继续读信号
                I2C1CONbits.RCEN = 1;//开始接收数据
                I2CRegs.State = I2C_MR_DATA;//下次应该继续接收数据
                break;
            case I2C_MR_DATA_STOP://收到器件退出信号
                I2cStop();//正常接收结束
                break;
            default://其他不可预料的错误
                I2cExit();//错误
        }
    }
    else if (I2C1STATbits.P)//收到Stop信号
    {
        if (I2CRegs.State == I2C_SUCCEEDED)//成功,回调
        {
            if (I2CRegs.I2CAddr & 1)//读
            {
                I2CBits.ReadFlag = 1;//激活用户读回调函数I2CReadCallBack()
            }
            else//写
            {
                I2CBits.WriteFlag = 1;//激活用户写回调函数I2CWriteCallBack()
            }
        }
    }
    else//无法确认的复杂错误 
    {
        I2cExit();//错误出错退出
    }
}


上一页  [1] [2] [3] [4] 


本文关键字:暂无联系方式PIC单片机单片机-工控设备 - PIC单片机