• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > EDA/PCB > 設計應用 > 1-Wire總線與DS18B20應用仿真

    1-Wire總線與DS18B20應用仿真

    作者: 時間:2008-06-19 來源:今日電子 收藏

      總線的基本通信協議

    本文引用地址:http://www.czjhyjcfj.com/article/84508.htm

      作為一種單主機多從機的總線系統,在一條總線上可掛接的從器件數量幾乎不受限制。為了不引起邏輯上的沖突,所有從器件的1- Wire總線接口都是漏極開路的,因此在使用時必須對總線外加上拉電阻(一般取5kΩ左右)。主機對總線的基本操作分為復位、讀和寫三種,其中所有的讀寫操作均為低位在前高位在后。復位、讀和寫是1-Wire總線通信的基礎,下面通過具體程序詳細介紹這3種操作的時序要求。(程序中DQ代表1 -Wire總線,定義為P1.0,uchar定義為unsigned char)

      1 1-Wire總線的復位

      復位是1-Wire總線通信中最為重要的一種操作,在每次總線通信之前主機必須首先發送復位信號。如程序1.1所示,產生復位信號時主機首先將總線拉低480~960μs然后釋放,由于上拉電阻的存在,此時總線變為高電平。1-Wire總線器件在接收到有效跳變的15~60μs內會將總線拉低60~240μs,在此期間主機可以通過對DQ采樣來判斷是否有從器件掛接在當前總線上。函數Reset()的返回值為0表示有器件掛接在總線上,返回值為1表示沒有器件掛接在總線上。

      程序1.1 總線復位

      uchar Reset(void)
      {
       uchar tdq;
       DQ=0;  //主機拉低總線
       delay480μs(); //等待480μs
       DQ=1; //主機釋放總線
       delay60μs();  //等待60μs
       tdq=DQ;  //主機對總線采樣
       delay480μs();  //等待復位結束
       return tdq;  //返回采樣值
      }

      2 1-Wire總線的寫操作

      由于只有一條I/O線,主機1-Wire總線的寫操作只能逐位進行,連續寫8次即可寫入總線一個字節。如程序1.2所示,當MCS-51單片機的時鐘頻率為12MHz時,程序中的語句_nop_();可以產生1μs的延時,調用此函數時需包含頭文件“intrins.h”。向1-Wire總線寫1bit至少需要60μs,同時還要保證兩次連續的寫操作有1μs以上的間隔。若待寫位wbit為0則主機拉低總線60μs然后釋放,寫0操作完成。若待寫位wbit為1,則主機拉低總線并在1~15μs內釋放,然后等待60μs,寫1操作完成。

      程序1.2 向總線寫1bit

      void Writebit(uchar wbit)
      {
       _nop_();
      //保證兩次寫操作間隔1μs以上
       DQ=0;
       _nop_();
      //保證主機拉低總線1μs以上
       if(wbit)
       {            
      //向總線寫1
       DQ=1;
      delay60μs();
       }
       else
       {            
      //向總線寫0
       delay60μs();
       DQ=1;
       }
      }

      3 1-Wire總線的讀操作

      與寫操作類似,主機對1-Wire總線的讀操作也只能逐位進行,連續讀8次,即可讀入主機一個字節。從1-Wire總線讀取1bit同樣至少需要60μs,同時也要保證兩次連續的讀操作間隔1μs以上。如程序1.3所示,從總線讀數據時,主機首先拉低總線1μs以上然后釋放,在釋放總線后的 1~15μs內主機對總線的采樣值即為讀取到的數據。

      程序1.3 從總線讀1bit

      uchar Readbit()
      {
       uchar tdq;
       _nop_();
      //保證兩次連續寫操作間隔1μs以上
       DQ=0;
       _nop_(); 
      //保證拉低總線的時間不少于1μs
       DQ=1;
       _nop_();
       tdq=DQ; 
      //主機對總線采樣
       delay60μs();
      //等待讀操作結束
       return tdq;
      //返回讀取到的數據
      }

      數字溫度DS18B20


    上一頁 1 2 3 下一頁

    關鍵詞: 仿真 1-Wire 傳感器

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 桑植县| 福海县| 太保市| 乐陵市| 贵阳市| 麻江县| 嘉义县| 金平| 洪江市| 田东县| 苍梧县| 绿春县| 阿拉善盟| 茶陵县| 建始县| 光山县| 徐汇区| 周至县| 昌图县| 神农架林区| 合水县| 社会| 芮城县| 建阳市| 连云港市| 延川县| 修文县| 沙田区| 于田县| 奉节县| 昌江| 射洪县| 博罗县| 神农架林区| 修文县| 蒙阴县| 桂林市| 青川县| 丁青县| 廊坊市| 卢龙县|