<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    例說單片機數據通信之單總線數據傳輸

    發布時間:2014-9-1 14:49    發布者:看門狗
    關鍵詞: 單片機 , DS18B20 , 控制器 , 數據通信
    作者:liklon

      純單片機干不了大事,必須得配上各種外設,那么了解單片機與傳感器之間的數據通信就顯得必不可少了。常見的單片機數據通信方式有SPI,IIC,RS232,單總線等等。每種通信方式都有相應的時序圖,分析時序圖并完成代碼的編寫是單片機學習者的必修課。本文以DS18B20為例分析一下單總線數據傳輸。



      DS18B20是單總線數據傳輸,因此對于時序的要求就非常的高,學會分析其時序圖是非常有必要的。

      1.初始化時序圖分析:



      首先是由總線控制器拉低總線,維持480us。在480us后釋放總線,由上拉電阻講總線拉高。等待5-60us后,DS18B20開始響應,會將數據總線拉低60-240us.之后便釋放總線,由上拉電阻拉高總線。轉換為代碼如下:

    u8 dsbInit() //初始化,返回0表示DS18B20無反應,反之有響應
    {
            dsbDQStat(0); //控制器拉低總線
            delay500us(); //拉低總線一段時間
            dsbDQStat(1); //釋放總線
            delay60us(); //等待DS18B20響應
            if(dsb_DQ) //如果沒有相應直接返回0
            {
            return 0;
      }
      delay240us(); //有響應則等待響應結束
      return 1; //返回初始化狀態
    }

      2.讀時序圖分析:



    首先由控制器將總線拉低>1us的時間,此時控制器釋放總線,如果此時控制器采樣為低電平,那么讀到的值便是0,如果為高電平,則讀到的值為1。注意圖中標有一個15us,其意思便是控制器采樣在15us內完成。15us后是由上拉電阻將總線拉高維持45us。整個讀周期為15+45=60us。這個周期的時間也是得控制的。轉換為代碼如下:

    u8 dsbReadByte() //讀出一個字節的數據,從低位開始讀取
    {
      u8 i,tmp = 0;
      for(i = 0;i < 8;i++)
      {
            dsbDQStat(0); //控制器拉低總線
             tmp >>= 1; //低位開始讀
            dsbDQStat(1); //釋放總線
            if(dsb_DQ) tmp |= 0x80;
            delay15us();
            delay45us(); //控制周期時間
      }
      return tmp;
    }

      3.寫時序圖分析:



      首先由控制器拉低總線15us,之后,如果要寫入0,則繼續拉低總線并為此45us.如果要寫入1則釋放總線由上拉電阻拉高總線,也為此45us。寫時序相對比較簡單,轉換為代碼如下:

    void dsbWriteByte(u8 dat)//寫一個字節的數據,從低位開始
    {
      u8 i;
      for(i = 0;i < 8;i++)
      {
            dsbDQStat(0); //控制器拉低總線
            delay15us(); //維持15us
            if(dat & 0x01) dsbDQStat(1);
            else dsbDQStat(0);
            dat >>= 1;
            delay45us();
            dsbDQStat(1); //45us后釋放總線
      }
    }

      DS18B20的三個時序圖就分析完了,DS18B20只是單總線數據通信中的一個例子,大家了解了DS18B20時序圖的分析,那么就可以試試分析DHT11的時序圖完成其初始化函數,以及讀數據函數。
    本文地址:http://www.portaltwn.com/thread-132447-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區

    相關在線工具

    相關視頻

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷