c-如何使用I2C和XC16使用MCC-微芯片



这是我第一次尝试在设计中使用I2C,请耐心等待。我使用MCC设置了I2C,我有I2C.c和I2C.h。我正在尝试读取压力传感器值。该值为15位长。我需要在读取之前向slave写入吗?还是可以直接读取值?我在下面放了部分代码。你可以看到,我只是想读取一个压力值。有人能为我指出如何实现这一目标的正确方向吗?谢谢大家。

注意:使用带有xc16编译器的PIC24FJ128GB204

I2C1_MESSAGE_STATUS status;
uint8_t PressureCommand = 1; //1 indicates a read
uint16_t address = 0xE0; 
uint16_t PressureData;
uint8_t length = 2; //2 bytes of data

//Request to read 2 bytes of data
I2C1_MasterRead(&PressureData, length, address, &status);
while(I2C1_MESSAGE_PENDING == status)

是的,在能够读取某些内容之前,您确实需要"写入"到slave。通常的程序如下:

  1. 设置启动条件(SCL为HIGH时SDA从HIGH转换为LOW(
  2. 发送I2C设备地址(7位地址+bit0=0写入(
  3. 从属发送:ACK
  4. 发送您想要读取的I2C寄存器地址(8位((在您的情况下,它是压力数据(
  5. 从属发送:ACK
  6. 重复启动(SCL为HIGH时SDA的HIGH到LOW转换(
  7. 发送I2C设备地址(7位地址+bit0=1读取(
  8. 从属发送:ACK
  9. 从发送:压力数据的MSB
  10. 主发送:ACK
  11. 从机发送:压力数据的LSB
  12. 主发送:NACK
  13. 发送STOP(SCL为HIGH时SDA的LOW到HIGH转换(

在您的情况下,压力数据是一个两字节的值。然而,在步骤4中,您只需要请求第一个字节,但仍期望接收两个字节。

编辑:你可能还想看看这个论坛的帖子。

最新更新