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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

  [復制鏈接]
跳轉到指定樓層
樓主
自己寫的IIC程序,因為初學,還是有借鑒的地方,但是所有程序均為手打,每一行都有詳細的注釋



單片機源程序如下:
  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 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:242300 發表于 2018-10-5 23:56 | 只看該作者
收藏學習一下
回復

使用道具 舉報

板凳
ID:162431 發表于 2018-10-28 21:30 | 只看該作者
請問樓主這個測試過可以用的嗎
回復

使用道具 舉報

地板
ID:417004 發表于 2018-10-29 02:20 來自觸屏版 | 只看該作者
樓主辛苦了,收藏了
回復

使用道具 舉報

5#
ID:469847 發表于 2019-1-17 19:58 | 只看該作者
學習一下
回復

使用道具 舉報

6#
ID:369907 發表于 2019-3-19 10:29 | 只看該作者
Rhysking 發表于 2018-10-28 21:30
請問樓主這個測試過可以用的嗎

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

使用道具 舉報

7#
ID:612010 發表于 2019-9-17 10:09 | 只看該作者
收藏學習一下
回復

使用道具 舉報

8#
ID:682679 發表于 2020-2-21 10:51 | 只看該作者
這個對新手很友好
回復

使用道具 舉報

9#
ID:607312 發表于 2020-2-24 08:51 | 只看該作者
感謝分享,學習了
回復

使用道具 舉報

10#
無效樓層,該帖已經被刪除
11#
ID:733307 發表于 2020-4-20 10:20 | 只看該作者
非常感謝樓主分享這個。
回復

使用道具 舉報

12#
ID:733307 發表于 2020-4-21 10:38 | 只看該作者
感謝分享
謝謝樓主
回復

使用道具 舉報

13#
ID:752705 發表于 2020-5-18 07:12 | 只看該作者
親測好用,就用它
回復

使用道具 舉報

14#
無效樓層,該帖已經被刪除
15#
ID:52653 發表于 2020-5-27 10:16 來自觸屏版 | 只看該作者
謝謝分享
回復

使用道具 舉報

16#
ID:94642 發表于 2020-6-16 08:43 | 只看該作者
樓主怎么返回一個32位的一個數據,我這個IIC的數據類型是32位的,現在數據是8位的uchar型的
回復

使用道具 舉報

17#
ID:307544 發表于 2020-6-16 10:17 | 只看該作者
程序注釋清晰,感謝大俠分享!
回復

使用道具 舉報

18#
無效樓層,該帖已經被刪除
19#
無效樓層,該帖已經被刪除
20#
ID:817725 發表于 2021-4-2 13:15 | 只看該作者
為什么寫入設備地址要+1
回復

使用道具 舉報

21#
無效樓層,該帖已經被刪除
22#
ID:336232 發表于 2022-4-15 09:10 | 只看該作者
lgl12345 發表于 2021-4-2 13:15
為什么寫入設備地址要+1

讀寫位
回復

使用道具 舉報

23#
無效樓層,該帖已經被刪除
24#
無效樓層,該帖已經被刪除
25#
ID:1069725 發表于 2023-4-3 19:09 | 只看該作者
收藏學習一下
回復

使用道具 舉報

26#
無效樓層,該帖已經被刪除
27#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 噜久寡妇噜噜久久寡妇 | 91色综合| 日韩成人免费视频 | 欧美一区二区三区 | 操操操日日日 | 亚洲成人av一区二区 | 欧洲色 | 九九看片| 日韩精品免费一区二区在线观看 | 久久不卡日韩美女 | 亚洲精品无人区 | 久在线视频播放免费视频 | 一级欧美一级日韩片 | 亚洲一区二区三区视频 | 丁香五月网久久综合 | 久久一级大片 | 日韩欧美在线一区 | 九九精品影院 | 久久久久久久久久久福利观看 | www.久草| 中文字幕一区在线观看视频 | 欧美色性| 91.色 | 91国产在线视频在线 | 国产精品久久久久久久久久免费 | 在线播放一区 | 人人干人人干人人干 | 亚洲女人天堂网 | 精品国产一区二区三区观看不卡 | 国产丝袜一区二区三区免费视频 | 特级黄一级播放 | 久久精品网 | 欧美一级精品片在线看 | 亚洲视频不卡 | 国产日韩欧美一区二区 | 精品视频久久久久久 | 中文成人在线 | 综合色久 | 国产成人午夜高潮毛片 | 一区中文字幕 | 免费在线观看成人av |