<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • DS18B20數(shù)字溫度計(jì)的設(shè)計(jì)(一)

    時(shí)間:2024-10-24 22:03:46 電子信息工程畢業(yè)論文 我要投稿
    • 相關(guān)推薦

    DS18B20數(shù)字溫度計(jì)的設(shè)計(jì)(一)

    目錄

    第 一 章    引言----------------------------------------------------------- 2
    第 二 章    系統(tǒng)硬件電路的設(shè)計(jì)-------------------------------------- 3
     一 主控制器----------------------------------------------------- 3
     二 顯示電路----------------------------------------------------- 3
     三 溫度傳感器工作原理-------------------------------------- 3
     四 DS18B20 與單片機(jī)的接口電路------------------------- 8
    第 三 章    系統(tǒng)程序的設(shè)計(jì)-------------------------------------------- 9
     一 主程序--------------------------------------------------------- 9
     二 讀出溫度子程序--------------------------------------------- 10
     三 溫度轉(zhuǎn)換命令子程序--------------------------------------- 11
     四 計(jì)算溫度子程序--------------------------------------------- 11
     五 顯示數(shù)據(jù)刷新子程序--------------------------------------- 12
     六 DS18B20的各條ROM命令---------------------------------- 12
     七 溫度數(shù)據(jù)的計(jì)算處理方法--------------------------------- 14
    第 四 章    調(diào)試及性能分析--------------------------------------------- 15
    第 五 章    程序清單------------------------------------------------------ 16
     第 一 章 引言
     在日常生活及工農(nóng)業(yè)生產(chǎn)中,經(jīng)常要用到溫度的檢測(cè)及控制,傳統(tǒng)的測(cè)溫元件有熱電偶和熱電阻。而熱電偶和熱電阻測(cè)出的一般都是電壓,再轉(zhuǎn)換成對(duì)應(yīng)的溫度,需要比較多的外部硬件支持。其缺點(diǎn)如下:
    硬件電路復(fù)雜;
    軟件調(diào)試復(fù)雜;
    制作成本高。
         本數(shù)字溫度計(jì)設(shè)計(jì)采用美國(guó)DALLAS半導(dǎo)體公司繼DS18B20之后推出的一種改進(jìn)型智能溫度傳感器DS18B20作為檢測(cè)元件,測(cè)溫范圍為-55~-125 ℃,最高分辨率可達(dá)0.0625℃.
    DS18B20可以直接讀出被測(cè)溫度值,而且采用三線(xiàn)制與單片機(jī)相連,減少了外部的硬件電路,具有低成本和易使用的特點(diǎn)。
    按照系統(tǒng)設(shè)計(jì)的功能和要求,確定系統(tǒng)由3個(gè)模塊組成:主控制器,測(cè)溫電路和顯示電路。
    數(shù)字溫度計(jì)總體電路結(jié)構(gòu)框圖如圖1所示。
     
     
     設(shè)計(jì)要求:
     1.測(cè)溫范圍 -55~~+125 ℃
     2. 誤差 +0.5℃以?xún)?nèi)
     3.采用LED數(shù)碼管直讀顯示
     第 二 章 系統(tǒng)硬件電路的設(shè)計(jì)
     溫度計(jì)設(shè)計(jì)原理圖如圖所示,控制器使用單片機(jī)AT89C2051,溫度傳感器使用DS18B20,用4位共陽(yáng)LED數(shù)碼管以動(dòng)態(tài)掃描法實(shí)現(xiàn)溫度顯示。
      
     
     一 主控制器
     單片機(jī)AT89C2051具有低電壓供電和小體積等特點(diǎn),兩個(gè)端口剛好滿(mǎn)足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用。系統(tǒng)可用兩節(jié)電池供電。
     二 顯示電路
     顯示電路采用4位共陽(yáng)LED數(shù)碼管,從P1口輸出段碼,列掃描用P3.0~P3.3來(lái)實(shí)現(xiàn),列驅(qū)動(dòng)用9012三極管。
     三 溫度傳感器工作原理
     1.DS18B20的性能特點(diǎn)
     DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器。與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀取方式。DS18B20的性能特點(diǎn)如下:
     ●獨(dú)特的單線(xiàn)接口僅需要一個(gè)端口引腳進(jìn)行通信;
     ●多個(gè)DS18B20可以并聯(lián)在惟一的三線(xiàn)上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;
     ●無(wú)須外部器件;
     ●可通過(guò)數(shù)據(jù)線(xiàn)供電,電壓范圍為3.0~5.5V;
     ●零待機(jī)功耗;
     ●溫度以9或12位數(shù)字;
     ●用戶(hù)可定義報(bào)警設(shè)置;
     ●報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件;
     ●負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作。
     2.DS18B20的內(nèi)部結(jié)構(gòu)
     DS18B20采用3腳PR-35封裝或8腳SOIC封裝,其內(nèi)部結(jié)構(gòu)如圖2所示。
     
     
     
     

     
     64位ROM的位結(jié)構(gòu)如圖3所示。開(kāi)始8位是產(chǎn)品類(lèi)型的編號(hào);接著是每個(gè)器件的惟一的序號(hào),共有48位;最后8位是前面56位的CRC檢驗(yàn)碼,這也是多個(gè)DS18B20可以采用一線(xiàn)進(jìn)行通信的原因。非易失性溫度報(bào)警觸發(fā)器TH和TL,可通過(guò)軟件寫(xiě)入戶(hù)用戶(hù)報(bào)警上下限數(shù)據(jù)。
     
    8位檢驗(yàn)CRC 48位序列號(hào) 8位工廠(chǎng)代碼(10H) 
    MSB             LSB    MSB            LSB   MSB            LSB
                             圖3   64位ROM結(jié)構(gòu)框圖
     DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的E2PROM。
     高速暫存RAM的結(jié)構(gòu)為9字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如下圖4所示。頭2個(gè)字節(jié)包含測(cè)得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié),為配置寄存器,其內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義如圖5所示。其中,低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式,DS18B20出廠(chǎng)時(shí)該位被設(shè)置為0,用戶(hù)不要去改動(dòng),R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),即用來(lái)設(shè)置分辨率。其定義方法見(jiàn)表1。
     
    TM R1 R0 1 1 1 1 1 
     圖5配置寄存器定義
     

     R1  R0  分辨率//位 溫度最大
    轉(zhuǎn)換時(shí)間/ms 
     0  0  9  93.75 
     0  1  10  187.5 
     1  0  11     375 
     1  1  12  750 
     表1DS18B20分辨率的定義和規(guī)定
     由表1可見(jiàn),DS18B20溫度轉(zhuǎn)換的時(shí)間比較長(zhǎng),而且設(shè)定的分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間越長(zhǎng)。因此,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮。
     高速暫存RAM的第6、7、8字節(jié)保留未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來(lái)檢驗(yàn)數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。
     當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開(kāi)始啟動(dòng)轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲(chǔ)在高速暫存存儲(chǔ)器的第1、2字節(jié)。
       單片機(jī)可以通過(guò)單線(xiàn)接口讀出該數(shù)據(jù)。讀數(shù)據(jù)時(shí)低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB形式表示。           
     溫度值格式如圖6所示。
     
     低字節(jié)
    23 22 21 20 2-1 2-2 2-3 2-4 
     
     高字節(jié)
    S S S S S 26 25 24 
     圖6溫度數(shù)據(jù)值格式
     圖中,S表示符號(hào)位。當(dāng)S=0時(shí),表示測(cè)得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)S=1時(shí),表示測(cè)得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制數(shù)值。表2是部分溫度值對(duì)應(yīng)的二進(jìn)制溫度數(shù)據(jù)。
    溫度/℃ 二進(jìn)制表示 十六進(jìn)制表示 溫度/℃ 二進(jìn)制表示 十六進(jìn)制表示 
    +125 0000 0111 1101  0000 07D0H 0 0000  0000
    0000  0000 0000H 
    +85 0000  0101
    0101  0000 0550H -0.5 1111  1111
    1111  1000 FFF8H 
    +26.0625 0000  0001
    1001  0001 0191H -10.125 1111  1111
    0101  1110 FF5EH 
    +10.125 0000  0000
    1010  0010 00A2H -25.0625 1111  1110
    0110  1111 FE6FH 
    +0.5 0000  0000
    0000  1000 0008H -55 1111  1100
    1001  0000 FC90H 
     表2 DS18B20溫度與表示值對(duì)應(yīng)表
     
     DS18B20完成溫度轉(zhuǎn)換后,就把測(cè)得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容作比較。若T>TH或T<TL,則將該器件內(nèi)的報(bào)警標(biāo)志位置位,并對(duì)主機(jī)發(fā)出的報(bào)警搜索命令作出響應(yīng)。因此,可用多只DS18B20同時(shí)測(cè)量溫度并進(jìn)行報(bào)警搜索。
     在64位ROM的最高有效字節(jié)中存儲(chǔ)有循環(huán)冗余檢驗(yàn)碼(CRC)。主機(jī)ROM的前56位來(lái)計(jì)算CRC值,并和存入DS18B20的CRC值作比較,以判斷主機(jī)收到的ROM數(shù)據(jù)是否正確。
    3.DS18B20測(cè)溫原理
    如圖7所示,圖中低溫度系數(shù)振蕩器的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給減法計(jì)數(shù)器1;高溫度系數(shù)振蕩器隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的脈沖輸入。
     圖7 DS18B20測(cè)溫原理圖
    圖中還隱含著計(jì)數(shù)門(mén),當(dāng)計(jì)數(shù)門(mén)打開(kāi)時(shí)DS18B20就對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù),進(jìn)而完成溫度測(cè)量。計(jì)數(shù)門(mén)的開(kāi)啟時(shí)間由高溫度系數(shù)振蕩器來(lái)決定,每次測(cè)量前,首先將-55℃所對(duì)應(yīng)的一個(gè)基數(shù)分別置入減法計(jì)數(shù)器1和溫度寄存器中,減法計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。
     減法計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開(kāi)始停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值就是所測(cè)溫度值,圖7中的斜率累加器用于補(bǔ)償和修正測(cè)溫過(guò)程中的非線(xiàn)形性,其輸出用于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)門(mén)仍未關(guān)閉就重復(fù)上述過(guò)程,直到溫度寄存器值達(dá)到被測(cè)溫度值。
     另外,由于DS18B20單線(xiàn)通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫(xiě)時(shí)序很重要。系統(tǒng)對(duì)DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲(chǔ)器操作命令→處理數(shù)據(jù)。

     

    四 DS18B20 與單片機(jī)的接口電路
     DS18B20可以采用兩種方式供電:一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號(hào)線(xiàn),3腳接電源。另一種是寄生電源供電方式,如圖8 所示單片機(jī)端口接單線(xiàn)總線(xiàn),為保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個(gè)MOSFET管來(lái)完成對(duì)總線(xiàn)的上拉。
     當(dāng)DS18B20處于寫(xiě)存儲(chǔ)器操作和溫度A/D轉(zhuǎn)換操作時(shí),總線(xiàn)上必須有強(qiáng)的上拉,上拉開(kāi)啟時(shí)間最大為500us。采用寄生電源供電方式時(shí),VDD端均接地。由于單線(xiàn)制只有一根線(xiàn),因此發(fā)送接口必須是三態(tài)的。

     圖8 DS18B20采用寄生電源的電路圖
     
      
     
     第 三 章 系統(tǒng)程序的設(shè)計(jì)
     系統(tǒng)程序主要包括主程序、讀出溫度子程序。溫度轉(zhuǎn)換命令子程序、計(jì)算溫度子程序和顯示數(shù)據(jù)刷新子程序。
    一 主程序
     主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量的當(dāng)前溫度值,溫度測(cè)量每1s進(jìn)行一次。
     主程序流程見(jiàn)圖9所示。
     主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量的當(dāng)前溫度值,溫度測(cè)量每1s進(jìn)行一次。這樣可以在一秒之內(nèi)測(cè)量一次被測(cè)溫度,其程序流程見(jiàn)圖9所示。

     圖9 主程序流程圖
    二 讀出溫度子程序
     讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫(xiě)。其程序流程圖如圖10示。

                                                                               

    圖10 讀出溫度子程序流程圖

    三 溫度轉(zhuǎn)換命令子程序
     溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開(kāi)始命令,當(dāng)采用12位分辨率時(shí)轉(zhuǎn)換時(shí)間約為750ms,在本程序設(shè)計(jì)中,采用1s顯示程序延時(shí)法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程圖11所示
    圖11 溫度轉(zhuǎn)換命令子程序流程圖

    四 計(jì)算溫度子程序
     計(jì)算溫度子程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,
     其程序流程圖如圖12所示。
     
       
     
     圖12 計(jì)數(shù)溫度子程序流程圖
     
    五 顯示數(shù)據(jù)刷新子程序
     顯示數(shù)據(jù)刷新子程序主要是對(duì)顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高顯示位為0時(shí)將符號(hào)顯示位移入下一位。程序流程圖如圖13。
     圖13 顯示數(shù)據(jù)刷新子程序流程圖

    六 DS18B20的各條ROM命令
    1.Read ROM[33H]。這條命令允許總線(xiàn)控制器讀到DS18B20的8位系列編碼、唯一的序列號(hào)和8位CRC碼。只有在總線(xiàn)上存在單只DS18B20時(shí),才能使用該命令。
    如果總線(xiàn)上有不止一個(gè)從機(jī),則當(dāng)所有從機(jī)試圖同時(shí)傳送信號(hào)時(shí)就會(huì)發(fā)生數(shù)據(jù)沖突(漏極開(kāi)路連在一起形成相“與”的效果)。
    2. Match ROM[55H]。這是一條匹配ROM命令,后跟64位ROM序列,讓總線(xiàn)控制器在多點(diǎn)總線(xiàn)上定位一只特定的DS18B20。只有與64位ROM序列完全匹配的DS18B20才能響應(yīng)隨后的存儲(chǔ)器操作。所有與64位ROM序列不匹配的從機(jī)都將等待復(fù)位脈沖。這條命令在總線(xiàn)上有單個(gè)或多個(gè)器件時(shí)都可以使用。
    3. Skip ROM[0CCh=H]。這條命令允許總線(xiàn)控制器不用提供64位ROM編碼就使用存儲(chǔ)器操作命令,在單點(diǎn)總線(xiàn)情況下,可以節(jié)省時(shí)間。如果總線(xiàn)上不止一個(gè)從機(jī),則在Skip ROM命令之后跟著發(fā)一條讀命令。由于多個(gè)從機(jī)同時(shí)傳送信號(hào),所以總線(xiàn)上就會(huì)發(fā)生數(shù)據(jù)沖突(漏極開(kāi)路下拉效果相當(dāng)于相“與”)。
    4. Search ROM[0F0H]。當(dāng)一個(gè)系統(tǒng)初次啟動(dòng)時(shí),總線(xiàn)控制器可能并不知道單線(xiàn)總線(xiàn)上有多少器件或它們的64位ROM編碼。搜索ROM命令允許總線(xiàn)控制器用排除法識(shí)別總線(xiàn)上的所有從機(jī)的64位編碼。
    5. Alarm Search[0ECH]。這條命令的流程與Search ROM相同。然而,只有在最近一次測(cè)溫后遇到符合報(bào)警條件的情況下,DS18B20才會(huì)響應(yīng)這條命令。報(bào)警條件定義為溫度高于TH或低于TL。只要DS18B20不掉電,報(bào)警狀態(tài)將一直保持,直到再一次測(cè)得的溫度值達(dá)不到報(bào)警條件。
    6. Write Scratchpad[4EH]。這條命令向DS18B20的暫存器TH和TL中寫(xiě)入數(shù)據(jù)。可以在任何時(shí)刻發(fā)出復(fù)位命令來(lái)中止寫(xiě)入。
    7. Read scratchpad[0BEH]。這條命令讀取暫存器的內(nèi)容。讀取將從第一字節(jié)開(kāi)始,一直進(jìn)行下去,直到第九字節(jié)(CRC)讀完。如果不想讀完所有字節(jié),則控制器可以在任何時(shí)間發(fā)出復(fù)位命令來(lái)中止讀取。
    8. Copy scratchpad[48H]。這條命令把暫存器的內(nèi)容拷貝到DS18B20的E2PROM存儲(chǔ)器里,即把溫度報(bào)警觸發(fā)字節(jié)存入非易失性存儲(chǔ)器里。如果總線(xiàn)控制器在這條命令之后跟著發(fā)出讀時(shí)間隙,而DS18B20又忙于把暫存器拷貝到E2PROM存儲(chǔ)器,則DS18B20就會(huì)輸出一個(gè)0,如果拷貝結(jié)束則DS18B20輸出1。如果使用寄生電源,則總線(xiàn)控制器必須在這條命令發(fā)出后立即啟動(dòng)強(qiáng)上拉,并最少保持10ms。
    9. Convert[44H]。這條命令啟動(dòng)一次溫度轉(zhuǎn)換而無(wú)需其他數(shù)據(jù)。溫度轉(zhuǎn)換命令被執(zhí)行后DS18B20保持等待狀態(tài)。如果總線(xiàn)控制器在這條命令之后跟著發(fā)出讀時(shí)間隙,而DS18B20又忙于做時(shí)間轉(zhuǎn)換,則DS18B20將在總線(xiàn)上輸出0;如果溫度轉(zhuǎn)換完成,則輸出1.如果使用寄生電源,則總線(xiàn)控制器必須在發(fā)出這條命令后立即啟動(dòng)強(qiáng)上拉,并保持500ms以上時(shí)間。
    10. Recall E2[0B80H]。這條命令把報(bào)警觸發(fā)器里的值拷貝回暫存器。這種拷貝操作在DS18B20上電時(shí)自動(dòng)執(zhí)行,這樣器件一上電暫存器里馬上就存在有效的數(shù)據(jù)了。若在這條命令發(fā)出之后讀數(shù)據(jù)隙,器件會(huì)輸出溫度轉(zhuǎn)換忙的標(biāo)識(shí):0表示忙;1表示完成。
    11. Read Power Supply[0B4H]。若把這條命令發(fā)給DS18B20后發(fā)出讀時(shí)間隙,器件會(huì)返回它的電源模式:0表示寄生電源;1表示外部電源。
    七 溫度數(shù)據(jù)的計(jì)算處理方法
     從DS18B20讀出的二進(jìn)制值必須先轉(zhuǎn)換成十進(jìn)制值,才能用于字符的顯示。DS18B20的轉(zhuǎn)換精度為9-12位可選,為了提高精度采用12位。在采用12位轉(zhuǎn)換精度時(shí),溫度寄存器里的值是以0.0625為步進(jìn)的,即溫度值為溫度寄存器里的二進(jìn)制值乘以0.0626,就是實(shí)際的十進(jìn)制溫度值。
     通過(guò)觀察表4-2可以發(fā)現(xiàn),一個(gè)十進(jìn)制值與二進(jìn)制值間有很明顯的關(guān)系,就是把二進(jìn)制的高字節(jié)的低半字節(jié)和低字節(jié)的高半字節(jié)組成一字節(jié),這個(gè)字節(jié)二進(jìn)制值化為十進(jìn)制值后,就是溫度值的百、十、個(gè)位值,而剩下的低字節(jié)的低半字節(jié)化成十進(jìn)制后,就是溫度值的小數(shù)部分。因?yàn)樾?shù)部分是半字節(jié),所以二進(jìn)制值范圍是0-F,轉(zhuǎn)換成十進(jìn)制小數(shù)值就是0,0625的倍數(shù)(0-15倍)。這樣需要4位的數(shù)碼管來(lái)顯示小數(shù)部分。實(shí)際應(yīng)用不必有這么高的精度,采用1位數(shù)碼管來(lái)顯示小數(shù),可以精確到0.1℃.
     表3就是二進(jìn)制與十進(jìn)制的近似對(duì)應(yīng)關(guān)系表。
    小數(shù)部分二進(jìn)制值 0 1 2 3 4 5 6 7 8 9 A B C D E F 
    十進(jìn)制 0 0 1 1 2 3 3 4 5 5 6 6 7 8 8 9 
     表3 小數(shù)部分二進(jìn)制和十進(jìn)制的近似對(duì)應(yīng)關(guān)系表
     
     
     
     
     
     
     
     
     第 四 章 調(diào)試及性能分析
     系統(tǒng)的調(diào)試以程序調(diào)試為主。
    硬件調(diào)試比較簡(jiǎn)單,首先檢查電路的焊接是否正確,然后可用萬(wàn)用表測(cè)試或通電檢測(cè)。
     軟件調(diào)試可以先編寫(xiě)顯示程序并進(jìn)行硬件的正確性檢測(cè),然后分別進(jìn)行主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計(jì)算溫度子程序和顯示數(shù)據(jù)刷新子程序等的編程和調(diào)試。
     由于DS18B20與單片機(jī)采用串行數(shù)據(jù)傳送,因此,對(duì)DS18B20進(jìn)行讀/寫(xiě)編程時(shí)必須嚴(yán)格地保證讀/寫(xiě)時(shí)序;否則將無(wú)法讀取測(cè)量結(jié)果。本程序采用單片機(jī)匯編編寫(xiě),用Waver 3.2編譯器編程調(diào)試。
     軟件調(diào)試到能顯示溫度值,而且在有溫度變化時(shí)(例如用手去接觸)顯示溫度能變化,就基本完成。
     性能測(cè)試可用制作的溫度計(jì)和已有的成品溫度計(jì)同時(shí)進(jìn)行測(cè)量比較。由于DS18B20的精度很高,所以誤差指標(biāo)可以限制在+0.5℃以?xún)?nèi)。
     另外,-55~~+125 ℃的測(cè)溫范圍使得該溫度計(jì)完全適合一般的應(yīng)用場(chǎng)合,其低電壓供電性能可做成用電池供電的手持電子溫度計(jì)。
     DS18B20溫度計(jì)還可以在高低溫報(bào)警、遠(yuǎn)距離多點(diǎn)測(cè)溫控制等方面進(jìn)行應(yīng)用開(kāi)發(fā),但在實(shí)際設(shè)計(jì)中應(yīng)注意以下問(wèn)題:
    DS18B20工作時(shí)電流高達(dá)1.5mA,總線(xiàn)上掛接點(diǎn)數(shù)較多且同時(shí)進(jìn)行轉(zhuǎn)換時(shí)要考慮增加總線(xiàn)驅(qū)動(dòng),可用單片機(jī)端口在溫度轉(zhuǎn)換時(shí)導(dǎo)通一個(gè)MOSFET供電。
    連接DS18B20的總線(xiàn)電纜是有長(zhǎng)度限制的,因此在用DS18B20進(jìn)行長(zhǎng)距離測(cè)溫系統(tǒng)設(shè)計(jì)時(shí)要充分考慮總線(xiàn)分布電容和阻抗匹配等問(wèn)題。
    在DS18B20測(cè)溫程序設(shè)計(jì)中,向DS18B20發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待DS18B20的返回信號(hào)。一旦某個(gè)DS18B20接觸不好或斷線(xiàn),當(dāng)程序讀該DS18B20時(shí),將沒(méi)有返回信號(hào),程序進(jìn)入死循環(huán)。

     


     第 五 章 程序清單
     DS18B20采用4位LED共陽(yáng)顯示器顯示測(cè)溫值,顯示精度為0.1 ℃,測(cè)溫范圍為-55~~+125 ℃,用AT89C2051單片機(jī),12MHz晶振
     
     TIMEL  EQU  0E0H
     TIMEN  EQU  0B1H
     TEMPHEAD  EQU  36H
     BITST  DATA  20H
     TIME1SOK  BIT  BITST.1
     TEMPONEOK  BIT  BITST.2
     TEMPL  DATA  26H
     TEMPH  DATA  27H
     TEMPHC  DATA  28H
     TEMPLC  DATA  29H
     TEMPDIN  DIT  P3.7
     
     ORG  0000H
     LJMP  START
     ORG  00BH
     LJMP  T0IT
     ORG 100H
     START: MOV SP , #60H
    CLSMEM: MOV  R0 , #20H
      MOV  R1 , #60H
    CLSMEM1: MOV  @R0,#00H
      INC  R0
          DJNZ  R1 , CLSMEM1
          MOV  TMOD ,#00100001B
          MOV  TH0, #TIMEL
          MOV  TL0, #TIMEH
          SJMP  INIT
    ERROR:  NOP
          LJMP  START
          NOP
     INIT:        NOP
          SETB  ET0
          SETB  TR0
          SETB  EA
          MOV  PSW, #00H
          CLR  TEMPONEOK
          LJMP  MAIN
    T0IT:        PUSH  PSW
          MOV  PSW,#10H
          MOV  TH0,#TIMEH
          MOV  TL0,#TIMEL
          INC  R7
          CJNZ  R7, #32H,T0IT1
          MOV  R7, #00H
          SETB  TIMEISOK
    T0IT1:        POP  PSW
         RETI
    MAIN:       LCALL DISP1
        JNB  TINE1SOK, MAIN
        CLR  TIME1SOK
        JNB  TEMPONEOK ,MAIN2
        LCALL  READTEMP1
        LCALL  CONVTEMP
        LCALL  DISPBCD
        LCALL  DISP1
    MAIN:      LCALL  READTEMP
           SETB  TEMPONEOK
           LJMP  MAIN
    INITDS1820:    SETB  TEMPDIN
             NOP
             NOP
            CLR  TEMPDIN
            MOV  R6 , #0A0H
            DJNZ  R6 ,$
            MOV  R6 ,#0A0H
     DJNZ  R6 ,$
            SETB  TEMPIND
            MOV  R6 ,#32H
            DJNZ R6 ,$
            MOV R6,#3CH
    LOOP1820:     MOV  C , TEMPDIN
            JC  INITDS1820OUT
            DJNZ  R6, LOOP1820
            MOV  R6 , #064H
             DJNZ  R6 ,$
             SJMP  TNITDS1820
             RET
    INITDS1820OUT: SETB  TEMPDIN
                RET
    READDS1820:   MOV  R7 ,#08H
             SETB  TEMPDIN
             NOP
             NOP
    READDS1820LOOP: CLR  TEMPDIN
                  NOP
                  NOP
                         NOP
                      SETB  TEMPIND
                      MOV  R6 ,#07H
                      DJNZ  R6 ,$
                      MOV  C , TEMPDIN
                      MOV  R6 , #3CH
                      DJNZ R6 , $
     RRC  A
     SETB  TEMPDIN
     DJNZ  R7 ,READDS1820LOOP
     MOV  R6 , #3CH
     DJNZ    R6 , $
     RET
    WRITEDS1820:     MOV  R7 ,#08H
          SETB  TEMPDIN
            NOP
             NOP
    WRITEDS1820LOP:  CLR  TEMPDIN
         MOV  R6 ,#07H
        DJNZ  R6, $
        RRC  A
        MOV  TEMPDIN
              DJNZ  R7 , WRITEDS1820LOP
         RET
    READTEMP:   LCALL  INITDS1820
       MOV  A ,#0CCH
      LCALL WRITEDS1820
        MOV  R6 ,# 34H
                  DJNZ R6 ,$
             MOV  A , #44H
      LCALL WRITEDS1820
       MOV  R6 ,# 34H
       DJNZ  R6 ,$
        RET
    READTEMP1:  LCALL  INITDS1820
      MOV  A , #0CCH
        LCALL  WRITEDS1820
         MOV  R6 , #34H
     DJNZ  R6 , $
       MOV  A , #0BEH
      LCALL  WRITEDS1820
        MOV  R6 , #34H
      DJNZ  R6 , $
      MOV  R5 , #09H
     MOV  B , #00H
      READTEMP2: LCALL  READDS1820
                   MOV  @R0 , A
                   INC  R0
      READTEMP21: LCALL  CRC8CAL
                   DJNZ  R5 , READTEMP2
                  MOV  A , B
                  JNZ  READTEMPOUT
                  MOV  A , TEMPHEAD +0
                  MOV  TEMPL , A
                  MOV  A , TEMPHEAD +1
     READTEMPOUT: RET
    CONVEMP: MOV  A , TEMPH
               ANL  A , #80H
               JZ  TEMPC1
               CLR  C
               MOV  A , TEMPL
               CLP  A
               ADD  A, #01H
               MOV  TEMPL ,  A
               MOV  A , TEMPH
               CLP  A
               ADDC  A , #00H
               MOV  TEMPH , A
               MOV   TEMPHC , #0BH
               SJMP   TEMC11
    TEMPC1:  MOV   TEMPHC , #0AH
    TEMPC11: MOV  A , TEMPHC
              SWAP  A
              MOV   TEMPHC , A
              MOV  A , TEMPL
              ANL  A , #0FH
              MOV  DPTR , #TEMPDOTTAB
              MOVC  A , @A+DPTR
              MOV  TEMPLC , A
              MOV  A , TEMPL
              ANL  A , #0F0H
              SWAP  A
              MOV  TEMPL , A
              MOV  A , TEMPH
              ANL  A , #0FH
              SWAP  A
              ORL  A , TEMPL
              LCALL  HEX2BCD1
              MOV  TEMPL , A
              ANL  A , #0F0H
              SWAP  A
              ORL  A , TEMPHC
             MOV  TEMPHC , A
             MOV  A , TEMPL
             ANL  A , #0FH
             SWAP  A
             ORL  A , TEMPLC
             MOV  TEMPLC , A
             MOV  A , R7
             JZ  TEMPC12
             ANL  A , #0FH
             SWAP  A
             MOV  A , TEMPHC
             ANL  A , #0FH
             ORL  A , R7
    TEMPC12: RET
    TEMPDOTTAB: DB  00H, 01H, 01H, 02H, 03H, 03H, 04H, 04H, 05H, 06H,
     BCD1:MOV  B , #064H
               DIV  AB
               MOV  R7 , A
               MOV  A , #0AH
               XCH  A , B
                DIV  AB
                SWAP  A
               ORL  A , B
               RET
    CRC8CAL:  PUSH  ACC
                MOV  R7 , #08H
    CRC8LOOP1:  XRL  A , B
                RRC  A
               MOV  A , B
               JNC  CRC8LOOP2
               XRL  A , #18H
    CRC8LOOP2:  RRC  A
                MOV  B , A
                POP  ACC
                RR  A
                PUSH  ACC
                DJNZ  R7 , CRC8LOOP1
                POP  ACC
                RET
               END
       

    【DS18B20數(shù)字溫度計(jì)的設(shè)計(jì)(一)】相關(guān)文章:

    談數(shù)字IC設(shè)計(jì)技術(shù)03-07

    淺談數(shù)字IC設(shè)計(jì)技術(shù)03-12

    數(shù)字監(jiān)控系統(tǒng)設(shè)計(jì)方案01-01

    數(shù)字實(shí)驗(yàn)箱的總體設(shè)計(jì)11-22

    基于Atmega8的數(shù)字功放設(shè)計(jì)03-18

    淺析計(jì)算機(jī)數(shù)字藝術(shù)與設(shè)計(jì)03-19

    談?dòng)?jì)算機(jī)數(shù)字藝術(shù)與設(shè)計(jì)03-19

    脈搏測(cè)量數(shù)字顯示(一)03-07

    論數(shù)字技術(shù)引發(fā)的新設(shè)計(jì)藝術(shù)觀03-25

    主站蜘蛛池模板: 国产中文在线亚洲精品官网| 久久久久久国产精品免费免费| 国产精品性爱| 国产在线精品免费aaa片| 日本精品夜色视频一区二区| 欧美一区二区精品系列在线观看| 久久综合精品国产二区无码| 日本一区二区三区精品国产| 国产精品毛片无码| 91po国产在线精品免费观看| 久久久久99精品成人片直播| 亚洲精品无码久久久久AV麻豆| 精品第一国产综合精品蜜芽 | 欧美日韩国产精品自在自线| 国产精品1024在线永久免费| 久久精品国产69国产精品亚洲| 精品久久久久久无码专区| 亚洲精品国产精品乱码不卡| 国产精品夜色视频一级区| 青青青国产精品国产精品久久久久| 国产精品多p对白交换绿帽| 日韩精品少妇无码受不了| 亚洲欧美精品综合中文字幕 | 成人精品一区二区三区中文字幕 | 亚洲国产精品一区二区久久hs| 日本欧美国产精品第一页久久 | 国产成人精品曰本亚洲79ren| 国产福利在线观看精品| 久久99精品久久久久久动态图| 中文字幕无码精品亚洲资源网久久 | 精品久久久久久久无码| 欧美精品v国产精品v日韩精品| 亚洲精品乱码久久久久久| 亚洲欧美精品丝袜一区二区| 在线精品无码字幕无码AV| 麻豆精品| 精品国产一区二区三区久久久狼 | 国产乱人伦精品一区二区在线观看| 国产成人精品一区二三区在线观看 | 久久福利青草精品资源站免费 | 亚洲精品亚洲人成在线观看|