首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用MCC -微芯片将I2C与XC16结合使用

如何利用MCC -微芯片将I2C与XC16结合使用
EN

Stack Overflow用户
提问于 2020-02-20 16:25:16
回答 1查看 1.4K关注 0票数 0

这是我第一次尝试在我的设计中使用I2C,所以请容忍我。我使用MCC来设置I2C,我有I2C.c和I2C.h。我在试着读取压力传感器值。该值为15位长。我是需要在阅读前写到奴隶,还是可以直接读取这个值?我已经把我的部分代码放在下面了。你可以看到我只是试着读取一个压力值。有人能为我指出如何实现这一目标的正确方向吗?谢谢你们。

注意:在PIC24FJ128GB204编译器中使用xc16

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2020-02-23 10:24:51

是的,你确实需要“写”给奴隶,然后才能读懂一些东西。通常的程序如下:

  1. 设置启动条件( SDA的高到低转换,而SCL较高)
  2. 发送I2C设备地址(7位地址+ bit0 =0写入)
  3. 从发送: ACK
  4. 发送您想要读取的I2C寄存器地址(8位)(在您的情况下,它是压力数据)
  5. 从发送: ACK
  6. 重复启动( SDA的高-低转变,而SCL高)
  7. 发送I2C设备地址(7位地址+ bit0 =1)
  8. 从发送: ACK
  9. 从发送:压力数据的MSB
  10. 师父发送:
  11. 从发送:压力数据的LSB
  12. 师父派人:纳克
  13. 发送停止(当SCL较高时,SDA的低到高转换)

在您的例子中,压力数据是一个两个字节的值。但是,在步骤4中,您只需要请求第一个字节,但仍然需要接收两个字节。

编辑:您可能还想看看这个论坛线

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60324465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档