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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11977|回復: 17
收起左側

注釋非常詳細的51單片機IIC源程序

  [復制鏈接]
ID:369907 發表于 2018-9-21 17:55 | 顯示全部樓層 |閱讀模式
自己寫的IIC程序,因為初學,還是有借鑒的地方,但是所有程序均為手打,每一行都有詳細的注釋

0.png

單片機源程序如下:
  1. #include <reg52.h>
  2. #include <iic.h>

  3. sbit IIC_SDA=P2^6;        //聲明IIC總線的數據線接在單片機的P2.6端口。
  4. sbit IIC_SCL=P2^7;        //聲明IIC總線的時鐘線接在單片機的P2.5端口。


  5. //void delay(unsigned int t)
  6. //{//延時函數
  7. //    while(t){t--;};                    //延時循環計數
  8. //}
  9. //-------------------------------------------------------------------
  10. void delay_IIC(void)   
  11. {//IIC總線限速延時函數。
  12. //該函數是空函數,延時4個機器周期。
  13.         ;
  14.         ;
  15. }
  16. //-------------------------------------------------------------------
  17. void IIC_Init(void)
  18. {//IIC總線初始化函數
  19.     IIC_SDA=1;//釋放IIC總線的數據線。
  20.     IIC_SCL=1;//釋放IIC總線的時鐘線。
  21. }
  22. //-------------------------------------------------------------------
  23. void IIC_start(void)
  24. {//IIC總線產生起始信號函數  
  25.    IIC_SDA=1;//拉高數據線
  26.          IIC_SCL=1;//拉高時鐘線
  27.          delay_IIC();
  28.          IIC_SDA=0;//在時鐘線為高電平時,拉低數據線,產生起始信號。
  29.          delay_IIC();
  30.    IIC_SCL=0;//拉低時鐘線
  31. }
  32. //-------------------------------------------------------------------
  33. void IIC_stop(void)
  34. {//IIC總線產生停止信號函數
  35.     IIC_SDA=0;//拉低數據線
  36.     delay_IIC();
  37.     IIC_SCL=1;//拉高時鐘線。
  38.     delay_IIC();
  39.     IIC_SDA=1;//時鐘時線為高電平時,拉高數據線,產生停止信號。
  40.     delay_IIC();
  41. }
  42. //-------------------------------------------------------------------
  43. bit IIC_Tack(void)
  44. {//接收應答信號函數
  45.     bit ack;//定義一個位變量,來暫存應答狀態。
  46.     IIC_SDA=1;//釋放數據總線,準備接收應答信號。
  47.     delay_IIC();
  48.     IIC_SCL=1;//拉高時鐘線。
  49.     delay_IIC();
  50.     ack=IIC_SDA;//讀取應答信號的狀態。
  51.     delay_IIC();
  52.     IIC_SCL=0;//拉低時鐘線。
  53.     delay_IIC();
  54.     return ack;//返回應答信號的狀態,0表示應答,1表示非應答。
  55. }
  56. //-------------------------------------------------------------------
  57. void IIC_write_byte(unsigned char Data)
  58. {//向IIC總線寫入一個字節的數據函數
  59.         unsigned char i;
  60.          for(i=0;i<8;i++)//有8位數據
  61.         {
  62.                         IIC_SDA=Data&0x80;//寫最高位的數據
  63.                         delay_IIC();
  64.                         IIC_SCL=1; //拉高時鐘線,將數寫入到設備中。
  65.                         delay_IIC();
  66.                         IIC_SCL=0;//拉低時鐘線,允許改變數據線的狀態
  67.                         delay_IIC();
  68.                         Data=Data<<1;//數據左移一位,把次高位放在最高位,為寫入次高位做準備
  69.         }
  70. }
  71. //-------------------------------------------------------------------
  72. unsigned char IIC_read_byte()
  73. {//從IIC總線讀取一個字節的數據函數
  74.     unsigned char i;
  75.     unsigned char Data;       //定義一個緩沖寄存器。
  76.     for(i=0;i<8;i++)//有8位數據
  77.     {
  78.         IIC_SCL=1;//拉高時鐘線,為讀取下一位數據做準備。
  79.         delay_IIC();
  80.         Data=Data<<1;//將緩沖字節的數據左移一位,準備讀取數據。
  81.         delay_IIC();
  82.         
  83.         if(IIC_SDA)//如果數據線為高平電平。
  84.             Data=Data|0x1;//則給緩沖字節的最低位寫1。
  85.         IIC_SCL=0;//拉低時鐘線,為讀取下一位數據做準備。
  86.         delay_IIC();
  87.     }
  88.     return Data;//返回讀取的一個字節數據。
  89. }
  90. void IIC_single_byte_write(unsigned char Daddr,unsigned char Waddr,unsigned char Data)
  91. {//向任意地址寫入一個字節數據函數
  92.     IIC_start();//產生起始信號
  93.     IIC_write_byte(Daddr);//寫入設備地址(寫)
  94.     IIC_Tack();//等待設備的應答
  95.     IIC_write_byte(Waddr);//寫入要操作的單元地址。
  96.     IIC_Tack();//等待設備的應答。
  97.     IIC_write_byte(Data);//寫入數據。
  98.     IIC_Tack();//等待設備的應答。
  99.     IIC_stop();//產生停止符號。
  100. }
  101. //-------------------------------------------------------------------
  102. unsigned char IIC_single_byte_read(unsigned char Daddr,unsigned char Waddr)
  103. {//從任意地址讀取一個字節數據函數
  104.     unsigned char Data;//定義一個緩沖寄存器。

  105.     IIC_start();//產生起始信號
  106.     IIC_write_byte(Daddr);//寫入設備地址(寫)
  107.     IIC_Tack();//等待設備的應答
  108.     IIC_write_byte(Waddr);//寫入要操作的單元地址。
  109.     IIC_Tack();//等待設備的應答。
  110.    
  111.     IIC_start();//產生起始信號
  112.     IIC_write_byte(Daddr+1);//寫入設備地址(讀)。
  113.     IIC_Tack();//等待設備的應答。
  114.     Data=IIC_read_byte();//寫入數據。
  115.     IIC_stop();//產生停止符號。
  116.     //-------------------返回讀取的數據--------------------
  117.     return Data;//返回讀取的一個字節數據。
  118. }
復制代碼

所有資料51hei提供下載:
IIC.rar (1.48 KB, 下載次數: 317)

評分

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

查看全部評分

回復

使用道具 舉報

ID:242300 發表于 2018-10-5 23:56 | 顯示全部樓層
收藏學習一下
回復

使用道具 舉報

ID:162431 發表于 2018-10-28 21:30 | 顯示全部樓層
請問樓主這個測試過可以用的嗎
回復

使用道具 舉報

ID:417004 發表于 2018-10-29 02:20 來自手機 | 顯示全部樓層
樓主辛苦了,收藏了
回復

使用道具 舉報

ID:469847 發表于 2019-1-17 19:58 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:369907 發表于 2019-3-19 10:29 | 顯示全部樓層
Rhysking 發表于 2018-10-28 21:30
請問樓主這個測試過可以用的嗎

可以,我用的就是這個
回復

使用道具 舉報

ID:612010 發表于 2019-9-17 10:09 | 顯示全部樓層
收藏學習一下
回復

使用道具 舉報

ID:682679 發表于 2020-2-21 10:51 | 顯示全部樓層
這個對新手很友好
回復

使用道具 舉報

ID:607312 發表于 2020-2-24 08:51 | 顯示全部樓層
感謝分享,學習了
回復

使用道具 舉報

ID:733307 發表于 2020-4-20 10:20 | 顯示全部樓層
非常感謝樓主分享這個。
回復

使用道具 舉報

ID:733307 發表于 2020-4-21 10:38 | 顯示全部樓層
感謝分享
謝謝樓主
回復

使用道具 舉報

ID:752705 發表于 2020-5-18 07:12 | 顯示全部樓層
親測好用,就用它
回復

使用道具 舉報

ID:52653 發表于 2020-5-27 10:16 來自手機 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:94642 發表于 2020-6-16 08:43 | 顯示全部樓層
樓主怎么返回一個32位的一個數據,我這個IIC的數據類型是32位的,現在數據是8位的uchar型的
回復

使用道具 舉報

ID:307544 發表于 2020-6-16 10:17 | 顯示全部樓層
程序注釋清晰,感謝大俠分享!
回復

使用道具 舉報

ID:817725 發表于 2021-4-2 13:15 | 顯示全部樓層
為什么寫入設備地址要+1
回復

使用道具 舉報

ID:336232 發表于 2022-4-15 09:10 | 顯示全部樓層
lgl12345 發表于 2021-4-2 13:15
為什么寫入設備地址要+1

讀寫位
回復

使用道具 舉報

ID:1069725 發表于 2023-4-3 19:09 | 顯示全部樓層
收藏學習一下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99国产精品久久99果冻传媒 | 五月综合激情在线 | www.日本国产 | 国产精品久久久久久久久 | 丁香五月网久久综合 | 欧美成人久久 | 日韩中文字幕在线观看 | 欧美黑人体内she精在线观看 | 日韩精品成人在线 | 亚洲精品888 | 国产福利视频网站 | 超碰97免费在线 | 伊人网站 | 国产在线一区二 | 中文字幕电影在线观看 | 中文字幕亚洲一区二区三区 | 欧美激情在线观看一区二区三区 | www.久久.com | 国产激情小视频 | 一区二区三区视频 | av在线播放网站 | 日韩免费福利视频 | 在线一区二区三区 | 中文字幕 亚洲一区 | 天天天操 | japanhdxxxx裸体| 在线观看国产91 | 三级黄视频在线观看 | 国产精品欧美一区二区 | 日本亚洲一区二区 | 色噜噜狠狠色综合中国 | 国产丝袜一区二区三区免费视频 | 欧美一区二区三区免费电影 | 三级黄色片在线播放 | 欧美国产日韩精品 | 欧美国产视频一区二区 | 国产在线资源 | 色资源在线观看 | 成人不卡 | 色视频免费 | 日韩毛片中文字幕 |