<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

1-Wire總線(xiàn)與DS18B20應用仿真

作者: 時(shí)間:2008-06-19 來(lái)源:今日電子 收藏

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

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

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

  1 1-Wire總線(xiàn)的復位

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

  程序1.1 總線(xiàn)復位

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

  2 1-Wire總線(xiàn)的寫(xiě)操作

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

  程序1.2 向總線(xiàn)寫(xiě)1bit

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

  3 1-Wire總線(xiàn)的讀操作

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

  程序1.3 從總線(xiàn)讀1bit

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

  數字溫度DS18B20


上一頁(yè) 1 2 3 下一頁(yè)

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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>