久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3193|回復: 3
打印 上一主題 下一主題
收起左側

STM8s 用GPIO模擬IIC通信源程序

[復制鏈接]
跳轉到指定樓層
樓主
實測有效,供大家一起學習

單片機源程序如下:
  1. /**
  2.   **********************************  STM8S  ***********************************
  3.   * @文件名     : soft_iic.c
  4.   * @作者       : gaoxiao
  5.   * @文件版本   : V1.0.0
  6.   * @日期       : 2019年06月29日
  7.   * @摘要       : 軟件模擬IIC源文件
  8.   ******************************************************************************/
  9. /*----------------------------------------------------------------------------
  10.   更新日志:
  11.   2019-06-29 V1.0.0:初始版本
  12.   ----------------------------------------------------------------------------*/
  13. /* 包含的頭文件 --------------------------------------------------------------*/
  14. #include "soft_iic.h"


  15. /************************************************
  16. 函數名稱 : IIC_init
  17. 功    能 : iic初始化函數
  18. 參    數 : 無
  19. 返 回 值 : 無
  20. 作    者 : gaoxiao
  21. *************************************************/
  22. void IIC_init(void)
  23. {
  24.   iic_scl_out();
  25.   iic_sda_out();
  26. }

  27. /************************************************
  28. 函數名稱 : IIC_Start
  29. 功    能 : iic起始函數
  30. 參    數 : 無
  31. 返 回 值 : 無
  32. 作    者 : gaoxiao
  33. *************************************************/
  34. void IIC_Start(void)
  35. {
  36.   iic_sda_out();

  37.   iic_sda_1();
  38.   iic_scl_1();
  39.   system_delay_100us(1);
  40.   iic_sda_0();
  41.   system_delay_100us(1);
  42.   iic_scl_0();
  43. }

  44. /************************************************
  45. 函數名稱 : IIC_Stop
  46. 功    能 : iic結束函數
  47. 參    數 : 無
  48. 返 回 值 : 無
  49. 作    者 : gaoxiao
  50. *************************************************/
  51. void IIC_Stop(void)
  52. {
  53.   iic_sda_out();
  54.   iic_sda_0();
  55.   iic_scl_0();
  56.   system_delay_100us(1);
  57.   iic_sda_1();
  58.   iic_scl_1();
  59.   system_delay_100us(1);
  60. }

  61. /************************************************
  62. 函數名稱 : IIC_Wait_Ack
  63. 功    能 : 等待應答信號到來
  64. 參    數 : 無
  65. 返 回 值 : 1,接收應答失敗  0,接收應答成功
  66. 作    者 : gaoxiao
  67. *************************************************/
  68. uint8_t IIC_Wait_Ack(void)
  69. {
  70.   uint8_t ucErrTime = 0;
  71.   
  72.   iic_sda_in();

  73.   system_delay_100us(1);
  74.   iic_scl_1();
  75.   system_delay_100us(1);
  76.   while(iic_sda_read())
  77.   {
  78.     ucErrTime++;
  79.     if(ucErrTime > 50)
  80.     {
  81.       IIC_Stop();
  82.       return 1;
  83.     }
  84.     system_delay_100us(1);
  85.   }
  86.   iic_scl_0();
  87.   
  88.   return 0;
  89. }

  90. /************************************************
  91. 函數名稱 : IIC_Ack
  92. 功    能 : 產生ACK應答信號
  93. 參    數 : cak 1:應答  2:無應答
  94. 返 回 值 : 無
  95. 作    者 : gaoxiao
  96. *************************************************/
  97. void IIC_Ack(uint8_t ack)
  98. {
  99.   iic_scl_0();
  100.   iic_sda_out();
  101.   
  102.   if(1 == ack) iic_sda_0();
  103.   else iic_sda_1();
  104.   
  105.   system_delay_100us(1);
  106.   iic_scl_1();
  107.   system_delay_100us(1);
  108.   iic_scl_0();
  109. }

  110. /************************************************
  111. 函數名稱 : IIC_SendByte
  112. 功    能 : 寫一個字節,from MSB to LSB
  113. 參    數 : data 數據
  114. 返 回 值 : 無
  115. 作    者 : gaoxiao
  116. *************************************************/
  117. uint8_t IIC_WriteByte(uint8_t data)
  118. {
  119.   uint8_t bits;
  120.   
  121.   iic_sda_out();
  122.   
  123.   for(uint8_t Loop_i = 0;Loop_i < 8;Loop_i ++)
  124.   {
  125.     bits = data&0x80;
  126.     if(0x80 == bits)
  127.     {
  128.       iic_sda_1();
  129.     }
  130.     else
  131.     {
  132.       iic_sda_0();
  133.     }
  134.     system_delay_100us(1);
  135.    
  136.     iic_scl_1();
  137.     system_delay_100us(1);
  138.     iic_scl_0();
  139.     data = data << 1;   
  140.   }

  141.   iic_sda_1();
  142.   
  143.   return IIC_Wait_Ack();//等待應答
  144. }

  145. /************************************************
  146. 函數名稱 : IIC_ReadByte
  147. 功    能 : 讀一個字節
  148. 參    數 : 無
  149. 返 回 值 : 數據
  150. 作    者 : gaoxiao
  151. *************************************************/
  152. uint8_t IIC_ReadByte(void)
  153. {
  154.   uint8_t data = 0;
  155.   
  156.   iic_sda_1();
  157.   iic_sda_in();
  158.   system_delay_100us(1);

  159.   for(uint8_t Loop_i = 0;Loop_i < 8;Loop_i ++)
  160.   {
  161.     iic_scl_1();
  162.     system_delay_100us(1);   
  163.     if(iic_sda_read())
  164.     {
  165.       data = (1 << 1)|data;
  166.     }
  167.     else
  168.     {
  169.       data = (0 << 1)|data;
  170.     }
  171.     system_delay_100us(1);
  172.     iic_scl_0();
  173.     system_delay_100us(1);
  174.   }

  175.   IIC_Ack(1);
  176.   
  177.   return data;
  178. }
復制代碼

所有資料51hei提供下載:
soft_iic.7z (1.36 KB, 下載次數: 52)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:605144 發表于 2019-8-29 15:37 | 只看該作者
謝謝LZ分享,學習了
回復

使用道具 舉報

板凳
ID:68189 發表于 2019-8-30 16:23 | 只看該作者
感謝樓主的分享,學習受教了.
回復

使用道具 舉報

地板
ID:1009545 發表于 2022-3-10 22:22 | 只看該作者
能用,不完整
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美视频| 国产观看 | 九九九久久国产免费 | 91新视频| 91精品久久久久久久久中文字幕 | 久久久91精品国产一区二区三区 | 欧美天堂在线 | 日韩在线免费视频 | 狠狠狠色丁香婷婷综合久久五月 | 国产成人a亚洲精品 | 国产一区免费 | 精品一区二区三区在线观看国产 | 精品视频在线播放 | 色婷婷av久久久久久久 | 欧美日韩成人 | 国产一区2区 | 欧美在线观看网站 | 日韩欧美三区 | 免费一级黄 | 国产成人精品免高潮在线观看 | 久久国产精品网站 | 日韩久久精品视频 | 日日夜夜影院 | 国产91精品网站 | 亚洲国产中文在线 | 欧美一区二 | 亚洲人精品午夜 | 日韩欧美不卡 | 日韩一区二区三区视频 | 国产日韩欧美 | 精品美女在线观看 | 国产精品一区一区三区 | 免费国产一区 | 久久久久亚洲精品 | 日韩视频一区二区在线 | 18性欧美 | 精品日韩一区二区 | 亚洲成av人片在线观看无码 | 91大神在线资源观看无广告 | 国产精品久久久久无码av | 日本黄色短片 |