收藏官网首页
查看: 12866|回复: 1

可以和iic设备通信吗?

1

主题

2

帖子

233

积分

中级会员

Rank: 3Rank: 3

积分
233
跳转到指定楼层
楼主
发表于 2016-5-5 16:18:43 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
汉枫LPB120模块
rt 想和bmp180气压温度传感器通信该如何是好呢?

2

主题

8

帖子

84

积分

注册会员

Rank: 2

积分
84
沙发
发表于 2016-5-9 22:48:00 | 只看该作者
可以使用模拟iic
  1. /*****************************************/
  2. /*                        初始化IIC                          */
  3. /*****************************************/
  4. void INIT_IIC(void)
  5. {

  6. SCL_dir = 1;
  7. SCL_dir = 1;
  8. SCL = 1;
  9. SDA = 1;
  10. }

  11. /*****************************************/
  12. /*                         启动IIC                           */
  13. /*****************************************/
  14. void I2Cstart(void)
  15. {
  16.   SCL_dir = 1;
  17.   SDA_dir = 1;
  18.   SDA = 1;
  19.   somenop();
  20.   SCL = 1;
  21.   somenop();
  22.   somenop();
  23.   SDA = 0;
  24.   somenop();
  25.   somenop();
  26.   SCL = 0;
  27. }

  28. /*****************************************/
  29. /*                       IIC发送数据                         */
  30. /*****************************************/
  31. void I2Csend(byte data)
  32. {
  33. unsigned char i=8;
  34. SCL_dir = 1;
  35. SDA_dir = 1;
  36. while(i)
  37. {
  38.       SCL = 0;  
  39.       somenop();
  40.       SDA=(data&0x80)>>7;
  41.       data<<=1;
  42.       somenop();
  43.       SCL = 1;
  44.       somenop();
  45.       somenop();
  46.       i--;     
  47. }
  48. SCL = 0;
  49. SDA_dir = 0;
  50. }

  51. /*****************************************/
  52. /*                       IIC接收数据                         */
  53. /*****************************************/
  54. unsigned char I2Creceive(void)
  55. {
  56. unsigned char i=8;
  57. unsigned char data=0;

  58. SCL_dir = 1;
  59. SDA_dir = 0;
  60. while(i)
  61. {
  62.       SCL = 0;  
  63.       somenop();
  64.       somenop();
  65.       SCL = 1;
  66.       somenop();
  67.       data<<=1;
  68.       data|=SDA;
  69.       somenop();
  70.       i--;     
  71. }
  72. SCL = 0;
  73. return(data);
  74. }

  75. /*****************************************/
  76. /*                      IIC读取应答位                        */
  77. /*****************************************/
  78. void I2Creadack(void)
  79. {
  80.   SCL_dir = 1;
  81.   SDA_dir = 0;
  82.   SCL = 0;
  83.   somenop();
  84.   somenop();
  85.   SCL = 1;
  86.   somenop();
  87.   if(SDA == 1)
  88.   {
  89.      for(;;) ;  
  90.   }
  91.   somenop();
  92.   SCL = 0;
  93.   somenop();
  94.   somenop();
  95. }

  96. /*****************************************/
  97. /*                      IIC发送应答位                        */
  98. /*****************************************/
  99. void I2Csendack(void)
  100. {
  101.   SCL_dir = 1;
  102.   SDA_dir = 1;
  103.   SCL = 0;
  104.   somenop();
  105.   SDA = 0;
  106.   somenop();
  107.   SCL = 1;
  108.   somenop();
  109.   somenop();
  110.   SCL = 0;
  111.   somenop();
  112.   somenop();
  113. }

  114. /*****************************************/
  115. /*                         停止IIC                           */
  116. /*****************************************/
  117. void I2Cstop(void)
  118. {
  119.   SCL = 0;
  120.   SDA = 0;
  121.   SCL_dir = 1;
  122.   SDA_dir = 1;
  123.   SCL = 0;
  124.   SDA = 0;
  125.   somenop();
  126.   somenop();
  127.   SCL = 1;
  128.   somenop();
  129.   SDA = 1;
  130.   somenop();
  131.   somenop();
  132.   SCL_dir = 0;
  133.   SDA_dir = 0;
  134. }


  135. /*****************************************/
  136. /*                         主函数                            */
  137. /*****************************************/
  138. void main(void) {
  139.   DisableInterrupts;
  140.   INIT_PLL();
  141.   INIT_IIC();
  142.   LEDCPU_dir = 1;
  143.   LED_dir=0xff;
  144.   LEDCPU = 0;
  145.   EnableInterrupts;

  146.   for(;;)
  147.   {
  148.       delay();
  149.       I2Cstart();
  150.       I2Csend(0b01000001);
  151.       I2Creadack();
  152.       receivedata = I2Creceive();      //读取数据
  153.       I2Cstop();
  154.       LED=receivedata;                 //显示读取到的数据
  155.   }
  156. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表