c - PIC24FJ64GA002 上的 ACKEN 位在确认序列后未清除
问题描述
uint8_t i2c_read(void)
{
uint8_t u8_readData;
uint8_t u8_ackBit = 0;
while(I2C1CON & 0x1F); //wait for idle
I2C1CONbits.RCEN = 1; //prepare device to receive
while(I2C1CONbits.RCEN);
u8_readData = I2C1RCV; //write recieved data to variable
while(I2C1CON & 0x1F); //wait for idle
I2C1CONbits.ACKDT = u8_ackBit; //prepare to send ack bit
I2C1CONbits.ACKEN = 1; //transmit ack bit
//HERE IS MY PROBLEM
while(I2C1CONbits.ACKEN); //wait for idle
return(u8_readData);
}
这是我遇到问题的代码的一部分,如代码所示 while(I2C1CONbits.ACKEN); 无法清除。这部分代码用于将红外传感器(型号:MLX90614 系列)连接到 Pic24。我的面包板连接正确,我检查了三倍。发生的情况是,当我运行代码时,代码在这个 while 循环处停止并且不再继续。
解决方案
推荐阅读
- javascript - 如何在父函数中获得异步结果?打字稿
- android - 无法解析 Intent robolectric ActivityScenarioRule 的活动
- json - 如何使用jq在json文件中过滤子对象中的某些数组
- c# - HttpListener:监听具有显式主机名的端口(无顶级通配符)
- stream - 如果使用 MemoryStream 而不是 FileStream,则 HttpResponseMessage 始终为空
- javascript - JS CountDown 刷新时请不要重新加载
- google-maps - System.Reflection.TargetInvocationException:调用的目标已引发异常。发生了
- android - 谷歌地图显示在活动顶部的片段上
- laravel - 如何为表a的每个数据计算表a数据
- sql - 如何设计一个不可变的仅附加数据库?