首页 > 解决方案 > 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 循环处停止并且不再继续。

标签: cpicmplabpic24

解决方案


推荐阅读