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单片机