MEMS.c 910 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "MEMS.h"
  2. #include "IICs.h"
  3. /**
  4. * @brief MEMS数字型气体传感器IIC端口初始化
  5. * @param None
  6. * @retval None
  7. */
  8. void MEMS_init(uint8_t iicNo)
  9. {
  10. IIC_init(iicNo); // iic延时计数400
  11. }
  12. /**
  13. * @brief 读取MEMS数字型气体传感器检测浓度
  14. * @param None
  15. * @retval 返回读取到的数据 2字节
  16. */
  17. uint16_t MEMS_read(uint8_t iicNo)
  18. {
  19. uint8_t recHigh = 0,recLow = 0;
  20. IIC_start(iicNo);
  21. IIC_send_byte(iicNo, MEMS_wrAddr); // slave address + write cmd
  22. if(IIC_wait_ack(iicNo)) {
  23. IIC_stop(iicNo);
  24. return 0xFFFF;
  25. }
  26. IIC_send_byte(iicNo, 0xA1); // read cmd
  27. if(IIC_wait_ack(iicNo)) {
  28. IIC_stop(iicNo);
  29. return 0xFFFE;
  30. }
  31. IIC_start(iicNo);
  32. IIC_send_byte(iicNo, MEMS_rdAddr); // slave address + read cmd
  33. if(IIC_wait_ack(iicNo)) {
  34. IIC_stop(iicNo);
  35. return 0xFFFD;
  36. }
  37. recHigh = IIC_read_byte(iicNo, 1);
  38. recLow = IIC_read_byte(iicNo, 0);
  39. IIC_stop(iicNo);
  40. return (uint16_t)recHigh << 8 | recLow;
  41. }