欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 12174|回復(fù): 17
收起左側(cè)

注釋非常詳細(xì)的51單片機(jī)IIC源程序

  [復(fù)制鏈接]
ID:369907 發(fā)表于 2018-9-21 17:55 | 顯示全部樓層 |閱讀模式
自己寫(xiě)的IIC程序,因?yàn)槌鯇W(xué),還是有借鑒的地方,但是所有程序均為手打,每一行都有詳細(xì)的注釋

0.png

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

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


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

  105.     IIC_start();//產(chǎn)生起始信號(hào)
  106.     IIC_write_byte(Daddr);//寫(xiě)入設(shè)備地址(寫(xiě))
  107.     IIC_Tack();//等待設(shè)備的應(yīng)答
  108.     IIC_write_byte(Waddr);//寫(xiě)入要操作的單元地址。
  109.     IIC_Tack();//等待設(shè)備的應(yīng)答。
  110.    
  111.     IIC_start();//產(chǎn)生起始信號(hào)
  112.     IIC_write_byte(Daddr+1);//寫(xiě)入設(shè)備地址(讀)。
  113.     IIC_Tack();//等待設(shè)備的應(yīng)答。
  114.     Data=IIC_read_byte();//寫(xiě)入數(shù)據(jù)。
  115.     IIC_stop();//產(chǎn)生停止符號(hào)。
  116.     //-------------------返回讀取的數(shù)據(jù)--------------------
  117.     return Data;//返回讀取的一個(gè)字節(jié)數(shù)據(jù)。
  118. }
復(fù)制代碼

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


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:242300 發(fā)表于 2018-10-5 23:56 | 顯示全部樓層
收藏學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:162431 發(fā)表于 2018-10-28 21:30 | 顯示全部樓層
請(qǐng)問(wèn)樓主這個(gè)測(cè)試過(guò)可以用的嗎
回復(fù)

使用道具 舉報(bào)

ID:417004 發(fā)表于 2018-10-29 02:20 來(lái)自觸屏版 | 顯示全部樓層
樓主辛苦了,收藏了
回復(fù)

使用道具 舉報(bào)

ID:469847 發(fā)表于 2019-1-17 19:58 | 顯示全部樓層
學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:369907 發(fā)表于 2019-3-19 10:29 | 顯示全部樓層
Rhysking 發(fā)表于 2018-10-28 21:30
請(qǐng)問(wèn)樓主這個(gè)測(cè)試過(guò)可以用的嗎

可以,我用的就是這個(gè)
回復(fù)

使用道具 舉報(bào)

ID:612010 發(fā)表于 2019-9-17 10:09 | 顯示全部樓層
收藏學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:682679 發(fā)表于 2020-2-21 10:51 | 顯示全部樓層
這個(gè)對(duì)新手很友好
回復(fù)

使用道具 舉報(bào)

ID:607312 發(fā)表于 2020-2-24 08:51 | 顯示全部樓層
感謝分享,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

10#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:733307 發(fā)表于 2020-4-20 10:20 | 顯示全部樓層
非常感謝樓主分享這個(gè)。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

14#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:52653 發(fā)表于 2020-5-27 10:16 來(lái)自觸屏版 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:94642 發(fā)表于 2020-6-16 08:43 | 顯示全部樓層
樓主怎么返回一個(gè)32位的一個(gè)數(shù)據(jù),我這個(gè)IIC的數(shù)據(jù)類型是32位的,現(xiàn)在數(shù)據(jù)是8位的uchar型的
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

18#
無(wú)效樓層,該帖已經(jīng)被刪除
19#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:817725 發(fā)表于 2021-4-2 13:15 | 顯示全部樓層
為什么寫(xiě)入設(shè)備地址要+1
回復(fù)

使用道具 舉報(bào)

21#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:336232 發(fā)表于 2022-4-15 09:10 | 顯示全部樓層
lgl12345 發(fā)表于 2021-4-2 13:15
為什么寫(xiě)入設(shè)備地址要+1

讀寫(xiě)位
回復(fù)

使用道具 舉報(bào)

23#
無(wú)效樓層,該帖已經(jīng)被刪除
24#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:1069725 發(fā)表于 2023-4-3 19:09 | 顯示全部樓層
收藏學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

26#
無(wú)效樓層,該帖已經(jīng)被刪除
27#
無(wú)效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表