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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5146|回復: 2
收起左側

51單片機IIC時序及對IIC器件使用時的一些理解和源程序

[復制鏈接]
ID:382067 發表于 2018-9-8 11:10 | 顯示全部樓層 |閱讀模式
IIC時序在多種通訊方式中是明顯比較復雜,他不僅在時間上有嚴格的要求,而且還具有多種模式。
新手往往對SCK,SDA還有讀寫應答時序很難理解,而且對主從機與接收發送機的關系很頭疼。
這次整理了一些常用程序和個人理解,以及IIC協議講解,希望對大家有幫助。

一、IIC通訊協議其實對大部分iic器件是通用的,但是它有不同的工作模式,比如說在單片機中,我們就學習了標準模式(PCF8591 A/D轉換芯片),快速模式(24C02存儲芯片),其實還有HS模式等等,目前我感覺得區別就是時間上的區別。

兩種模式.jpg 周期范圍.jpg
二、對于應答信號來說,雖然主機和從機的身份是固定的,但是接收方和發送方的身份是可以變化的,而且應答信號的產生是接收方發出的,所以比如說讀的時候,主機是接收方,從機是發送方,主機在讀完數據后,需要根據情況發出(非)應答信號;寫的時候則是相反的,需要從機作出應答。


三、接收從機應答的時序和讀時序其實很相似,都需要自從機接收數據。
總線時序.jpg

SDA_IN與起始、終止及寫時序有關
SDA_OUT與應答、讀時序有關

單片機源程序如下:
  1. /**********************BST-V51實驗開發板例程************************
  2. *  平臺:BST-V51 + Keil U3 + STC89C52
  3. *  名稱:為IIC總線的基本驅動程序(此程序沒有寫主函數,只是一些IIC必備的子函數)
  4. *  晶振:11.0592MHZ
  5. *  說明:免費開源,不提供源代碼分析.
  6. ******************************************************************/

  7. #include<reg51.h>
  8. #include <intrins.h>
  9. #define uint unsigned int
  10. #define uchar unsigned char
  11. sbit sda=P2^0;                          //IO口定義
  12. sbit scl=P2^1;

  13. void nop()
  14. {
  15.         _nop_();
  16.         _nop_();
  17. }
  18. /////////24C02讀寫驅動程序////////////////////
  19. void delay1(unsigned int m)
  20. {        unsigned int n;
  21.           for(n=0;n<m;n++);
  22. }

  23. void init()  //24c02初始化子程序
  24. {
  25.         scl=1;
  26.         nop();
  27.         sda=1;
  28.         nop();
  29. }

  30. void start()        //啟動I2C總線
  31. {
  32.         sda=1;
  33.         nop();
  34.         scl=1;
  35.         nop();
  36.         sda=0;
  37.         nop();
  38.         scl=0;
  39.         nop();
  40. }

  41. void stop()         //停止I2C總線
  42. {
  43.         sda=0;
  44.         nop();
  45.         scl=1;
  46.         nop();
  47.         sda=1;
  48.         nop();
  49. }

  50. void writebyte(unsigned char j)  //寫一個字節
  51. {
  52.         unsigned char i,temp;
  53.            temp=j;
  54.            for (i=0;i<8;i++)
  55.    {
  56.            temp=temp<<1;
  57.            scl=0;
  58.            nop();
  59.            sda=CY;                //temp左移時,移出的值放入了CY中
  60.            nop();
  61.            scl=1;                //待sda線上的數據穩定后,將scl拉高
  62.            nop();
  63.    }
  64.    scl=0;
  65.    nop();
  66.    sda=1;
  67.    nop();
  68. }

  69. unsigned char readbyte()   //讀一個字節
  70. {
  71.    unsigned char i,j,k=0;
  72.    scl=0; nop(); sda=1;
  73.    for (i=0;i<8;i++)
  74.    {  
  75.                 nop(); scl=1; nop();
  76.               if(sda==1)
  77.                 j=1;
  78.               else
  79.                 j=0;
  80.               k=(k<<1)|j;
  81.                   scl=0;
  82.         }
  83.            nop();
  84.         return(k);
  85. }

  86. void clock()         //I2C總線時鐘
  87. {
  88.    unsigned char i=0;
  89.    scl=1;
  90.    nop();
  91.    while((sda==1)&&(i<255))
  92.              i++;
  93.    scl=0;
  94.    nop();
  95. }
復制代碼
0.png
所有資料51hei提供下載:
iic時序及講解.rar (1.4 MB, 下載次數: 43)
51單片機IIC常用函數.rar (1.04 KB, 下載次數: 35)


評分

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

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

ID:358100 發表于 2020-4-16 09:20 | 顯示全部樓層
收藏學習學學。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表