<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 1-Wire總線與DS18B20應(yīng)用仿真

          1-Wire總線與DS18B20應(yīng)用仿真

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

            總線的基本通信協(xié)議

          本文引用地址:http://www.ex-cimer.com/article/84508.htm

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

            1 1-Wire總線的復(fù)位

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

            程序1.1 總線復(fù)位

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

            2 1-Wire總線的寫操作

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

            程序1.2 向總線寫1bit

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

            3 1-Wire總線的讀操作

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

            程序1.3 從總線讀1bit

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

            數(shù)字溫度DS18B20


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: 仿真 1-Wire 傳感器

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();