娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月20日(星期五)

2018年06月20日 | 51單片機DS18B20溫度傳感器詳解

發布者:HarmoniousCharm 來源: eefocus關鍵字:51單片機  DS18B20  溫度傳感器 手機看文章 掃描二維碼
隨時隨地手機看文章

DS18B20是一種單總線數字溫度傳感器,測試溫度范圍-55℃-125℃,具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。單總線,意味著沒有時鐘線,只有一根通信線。單總線讀寫數據是靠控制起始時間和采樣時間來完成,所以時序要求很嚴格,這也是DS18B20驅動編程的難點。

一.DS18B20溫度傳感器

1.引腳圖

這里寫圖片描述

2.DS18B20內部結構圖

這里寫圖片描述 
主要由2部分組成:64位ROM、9字節暫存器,如圖所示。

(1) 64 位ROM。它的內容是64 位序列號,它可以被看作是該DS18B20 的地址序列碼,其作用是使每個DS18B20 都各不相同,這樣就可以實現一根總線上掛接多個DS18B20 的目的。

(2) 9字節暫存器包含:溫度傳感器、上限觸發TH高溫報警器、下限觸發TL低溫報警器、高速暫存器、8位CRC產生器。

3.64位ROM結構圖

這里寫圖片描述

8位CRC:是單總線系列器件的編碼,DS18B20定義為28H。 
48位序列號:是一個唯一的序列號。 
8位系列碼:由CRC產生器生產,作為ROM中的前56位編碼的校驗碼。

4.9字節暫存器結構圖

這里寫圖片描述

以上是內部9 個字節的暫存單元(包括EEPROM)。 
字節0~1 是溫度存儲器,用來存儲轉換好的溫度。 
字節2~3 是用戶用來設置最高報警和最低報警值。這個可以用軟件來實現。 
字節4 是配置寄存器,用來配置轉換精度,讓它工作在9~12 位。 
字節5~7 保留位。 
字節8 CRC校驗位。是64位ROM中的前56位編碼的校驗碼。由CRC發生器產生。

5.溫度寄存器結構圖

這里寫圖片描述

溫度寄存器由兩個字節組成,分為低8位和高8位。一共16位。 
其中,第0位到第3位,存儲的是溫度值的小數部分。 
第4位到第10位存儲的是溫度值的整數部分。 
第11位到第15位為符號位。全0表示是正溫度,全1表示是負溫度。 
表格中的數值,如果相應的位為1,表示存在。如果相應的位為0,表示不存在。

6.配置寄存器

這里寫圖片描述

精度值: 
9-bit 0.5℃ 
10-bit 0.25℃ 
11-bit 0.125℃ 
12-bit 0.0625℃

7.溫度/數據關系

這里寫圖片描述

注意:如果溫度是一個負溫度,要將讀到的數據減一再取反

二.單總線協議

1.單總線通信初始化

這里寫圖片描述

初始化時序包括:主機發出的復位脈沖和從機發出的應答脈沖。主機通過拉低單總線480-960μs產生復位脈沖;然后由主機釋放總線,并進入接收模式。主機釋放總線時,會產生一由低電平跳變為高電平的上升沿,單總線器件檢測到該上升沿后,延時15~60μs,接著單總線器件通過拉低總線60~240μsμ來產生應答脈沖。主機接收到從機的以應答脈沖后,說明有單總線器件在線,到此初始化完成。然后主機就可以開始對從機進行ROM命令和功能命令操作。

2.位寫入時序

這里寫圖片描述

寫時隙:當主機把數據線從邏輯高電平拉到邏輯低電平的時候,寫時間隙開始。有兩種寫時間隙:寫1的時間隙和寫0時間隙。所有寫時間隙必須最少持續60us,包括兩個寫周期間至少1us的恢復時間。DQ引腳上的電平變低后,DS18B20在一個15us到60us的時間窗口內對DQ引腳采樣。如果DQ引腳是高電平,就是寫1,如果DQ引腳是低電平,就是寫0。主機要生成一個寫1時間隙,必須把數據線拉到低電平然后釋放,在寫時間隙開始后的15us內允許數據線拉到高電平。主機要生成一個寫0時間隙,必須把數據線拉到低電平并保持60us。

3.位讀取時序

這里寫圖片描述

當主機把總線從高電平拉低,并保持至少1us后釋放總線;并在15us內讀取從DS18B20輸出的數據。

4.DS18B20的ROM操作命令 
用途:主要是用于選定在單總線上的DS18B20,分為5個命令 
(1).讀出ROM,代碼為33H,用于讀出DS18B20的序列號,即64位激光ROM代碼。 
(2).匹配ROM,代碼為55H,用于識別(或選中)某一特定的DS18B20進行操作。 
(3).搜索ROM,代碼為F0H,用于確定總線上的節點數以及所有節點的序列號。 
(4).跳過ROM,代碼為CCH,當總線僅有一個DS18B20時,不需要匹配 。 
(5).報警搜索,代碼為ECH,主要用于鑒別和定位系統中超出程序設定的報警溫度界限的節點。

三.驅動程序

測試平臺: 
單片機:STC89C52RC,晶振12MHZ

#include

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P3^7;  //定義數據線


void delay_us(uchar n)    //延時約16微妙

{

    while(n--);

   }


1.初始化


void DS18B20_init()

{

       DQ=1;

       delay_us(1);     //稍作延時

       DQ=0;

       delay_us(80);    //延時480到960us

       DQ=1;

       i = 0;

       while(DQ)    //等待DS18B20拉低總線

       {

           delay_us(100);

           i++;

           if(i>5)//約等待>5MS

           {

               return 0;//初始化失敗

           }    

       }

}


2.寫字節


void write_byte(uchar dat)   //寫一個字節

{

   uchar i;

   for(i=0;i<8;i++)

   {

      DQ=0;  //每寫入一位數據之前先把總線拉低1us

      _nop_();

     DQ=dat&0x01;    //取最低位寫入

     delay_us(10);   //延時68us,持續時間最少60us

     DQ=1;   //然后釋放總線

     dat=dat>>1;    //從低位開始寫

   }

   delay_us(10);

}


3.讀字節


uchar read_byte()    //讀一個字節

{

  uchar i,dat=0;

  for(i=0;i<8;i++)

  {

     DQ=0;  //先將總線拉低1us

     _nop_();

     DQ=1;  //然后釋放總線

     _nop_();_nop_();

     _nop_();_nop_();

     if(DQ) dat=dat|0x80;   //每次讀一位

     dat=dat>>1;       //從最低位開始讀

     delay_us(10);   //讀取完之后等待48us再接著讀取下一個數

   }

   return dat;

}


4.讀溫度


uint read_temper ()

{    

   uchar a,b;         

   uint t=0;

   DS18B20_init();       

   delay_us(15);

   write_byte(0xcc);   //跳過ROM操作命令

   write_byte(0x44);     //發送啟動溫度轉換命令

   DS18B20_init();       

   delay_us(15);

   write_byte(0xcc);    //跳過ROM操作命令

   write_byte(0xbe);      //發送讀溫度寄存器命令

   a=read_byte();    //先讀低八位

   b=read_byte();      //再讀高八位

   t=b;        

   t<<=8;      //左移八位

   t=t|a;      //t為16位的數,使高八位為b的值,低八位為a的值  

   return t;    //返回溫度值

}


5.溫度轉換


uint temper_change()

{

    uint temper;

    float tp;

    temper=read_temper();

    if(temper<0)    //考慮負溫度的情況

    {

        temper=temper-1;

        temper=~temper;

        tp=temper*0.0625;  //16位溫度轉換成10進制的溫度

        temper=tp*100+0.5;   //留兩個小數點,并四舍五入

    }

    else

    {

        tp=temper*0.0625;  //16位溫度轉換成10進制的溫度

        temper=tp*100+0.5;  //留兩個小數點,并四舍五入

    }

    return temper;

}

注意:在主函數中調用temper_change()函數返回的temper即為溫度值。由于單總線對時序要求嚴格,我們的延時函數可能并不適用于你的單片機,所以請根據需要自行進行修改


關鍵字:51單片機  DS18B20  溫度傳感器 引用地址:51單片機DS18B20溫度傳感器詳解

上一篇:DS18B20溫度傳感器+12864液晶串口顯示
下一篇:最后一頁

推薦閱讀

? ?從東南亞、東亞,再到此次Find X全球發布會選址的歐洲,從版圖上看, OPPO的海外戰略正在從點到面的突破過程中,他們已經進入了全球市場一盤棋的戰略階段。  “與以往感覺OPPO的穩不同,今年OPPO提出‘漸變’,到底會有哪些改變?”  這是筆者在OPPO R15發布會前向OPPO 副總裁吳強提出的一個問題。不過,當時他神秘一笑說道,“漸變是一個過...
汛期暴雨天氣多發,給城區排水防澇造成了壓力。日前,我區首批下水道機器人正式投入使用,將通過現場勘測、堵點排查、數據分析,有效保障下水道管網通暢,成為預防城市內澇利器。在位于漢豐街道九龍社區的一個小區附近,下水道管網出現了堵塞,給轄區的排水造成了影響。接到群眾投訴后,區市政工程處工作人員立即攜帶管道機器人前去進行排查。據了解,所謂...
寫在前面??就我所知,STM8的開發平臺有兩種:意法官方的STVD和IAR for STM8. STVD沒嘗試過。反正IAR用的感覺還湊合,各種該有的功能都有,但界面不怎么友好。估計是低版本的緣故,由于我長時間盯著屏幕眼睛酸痛,所以沒辦法只能把編輯界面底色改成黑色,可TM怎么行號編程白色的了?根本看不清。看不清就不看了唄,反正也沒啥用。但是就是感覺超不爽。...
盡管保時捷肯定仍然是駕駛者之車,但跑車品牌并沒有吝嗇其信息娛樂技術。全新保時捷通訊管理系統 (PCM) 6.0 旨在為駕駛員提供更多信息,同時將信息娛樂系統無縫集成到駕駛體驗中。首先,經過大修的 PCM 6.0 界面具有重新設計的字體、圖標和布局,并增加了 Apple CarPlay 的集成度。它還首次具有 Android Auto 功能。無線更新將確保保時捷司機...

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 乐亭县| 博乐市| 拜泉县| 宿松县| 隆子县| 昆明市| 广河县| 岐山县| 永平县| 茂名市| 高尔夫| 元氏县| 甘德县| 双桥区| 禹城市| 东港市| 德江县| 广东省| 肥西县| 米脂县| 商河县| 白沙| 郯城县| 铜山县| 苏尼特左旗| 乐平市| 五大连池市| 郯城县| 香河县| 潼关县| 宜都市| 开原市| 台北县| 合江县| 枞阳县| 安岳县| 诸暨市| 隆德县| 沈丘县| 阜平县| 龙州县|