溫度控制課程設(shè)計(jì)--數(shù)字溫度測(cè)量系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  綜合課程設(shè)計(jì)論文</b></p><p>  實(shí)訓(xùn)課題: 數(shù)字溫度測(cè)量系統(tǒng) 專業(yè)班級(jí): 應(yīng)用電子技術(shù)(1)班</p><p><b>  摘要</b></p><p>  隨著社會(huì)的進(jìn)步和工業(yè)技術(shù)的發(fā)展,人們?cè)絹?lái)越重視溫度因素,許多產(chǎn)品對(duì)溫度范圍要求嚴(yán)格,而目前市場(chǎng)上普遍存在

2、的溫度檢測(cè)儀器大都是單點(diǎn)測(cè)量,同時(shí)有溫度信息傳遞不及時(shí)、精度不夠的缺點(diǎn),不利于工業(yè)控制者根據(jù)溫度變化及時(shí)做出決定。在這樣的形式下,開(kāi)發(fā)一種能夠同時(shí)測(cè)量多點(diǎn),并且實(shí)時(shí)性高、精度高,能夠綜合處理多點(diǎn)溫度信息的測(cè)量系統(tǒng)就很有必要。</p><p>  本課題以AT89C51單片機(jī)系統(tǒng)為核心,能對(duì)多點(diǎn)的溫度進(jìn)行實(shí)時(shí)巡檢。DS18B20是一種可組網(wǎng)的高精度數(shù)字式溫度傳感器,由于其具有單總線的獨(dú)特優(yōu)點(diǎn),可以使用戶輕松地組建起

3、傳感器網(wǎng)絡(luò),并可使多點(diǎn)溫度測(cè)量電路變得簡(jiǎn)單、可靠。本文結(jié)合實(shí)際使用經(jīng)驗(yàn),介紹了DS18B20數(shù)字溫度傳感器在單片機(jī)下的硬件連接及軟件編程,并給出了軟件流程圖。</p><p>  關(guān)鍵詞:溫度測(cè)量;單總線;數(shù)字溫度傳感器;單片機(jī)</p><p><b>  目錄</b></p><p><b>  引言</b></p

4、><p>  數(shù)字溫度計(jì)的結(jié)構(gòu)及功能介紹</p><p>  單片機(jī) STC80C52RC</p><p>  DS18B20數(shù)字溫度傳感器</p><p><b>  顯示器的選擇</b></p><p><b>  設(shè)計(jì)原理及原理圖</b></p><p&

5、gt;<b>  設(shè)計(jì)程序流程圖</b></p><p><b>  總結(jié)</b></p><p><b>  附錄</b></p><p><b>  程序代碼</b></p><p><b>  仿真</b></p>

6、<p><b>  一、引言</b></p><p>  本系統(tǒng)利用DS18B20進(jìn)行測(cè)溫,基于單片機(jī)AT89S52進(jìn)行溫度控制,具有硬件電路簡(jiǎn)單,控溫精度高、功能強(qiáng),體積小,簡(jiǎn)單靈活等優(yōu)點(diǎn),可以應(yīng)用于控制溫度在-55℃到+125℃之間的各種場(chǎng)合,可以實(shí)現(xiàn)溫度的實(shí)時(shí)采集、顯示功能 。</p><p>  溫度是一種最基本的環(huán)境參數(shù)之一,日常生活和工農(nóng)業(yè)生產(chǎn)

7、中經(jīng)常要檢測(cè)溫度。傳統(tǒng)的方式是采用熱電偶或熱電阻,但是由于模擬溫度傳感器輸出為模擬信號(hào),必須經(jīng)過(guò)A/D轉(zhuǎn)換環(huán)節(jié)獲得數(shù)字信號(hào)后才能與單片機(jī)等微處理器接口,使得硬件電路結(jié)果復(fù)雜,制作成本較高。美國(guó)DALLAS公司生產(chǎn)的DS18B20為代表的新型單總線數(shù)字式溫度傳感器以其突出優(yōu)點(diǎn)廣泛使用于倉(cāng)庫(kù)管理、工農(nóng)業(yè)生產(chǎn)制造、氣象觀測(cè)、科學(xué)研究以及日常生活中。</p><p>  本文提出用DALLAS公司生產(chǎn)的DS18B20數(shù)字

8、溫度傳感器和89S52單片機(jī)構(gòu)成的多路測(cè)溫系統(tǒng),采用單總線的方式(一根數(shù)據(jù)線,在一個(gè)I/O口上),可以在單總線上掛接多個(gè)18B20,在單片機(jī)控制下巡回檢測(cè)多點(diǎn)溫度,并可以設(shè)置高、低溫度超限報(bào)警等功能。</p><p><b>  二、結(jié)構(gòu)及功能介紹</b></p><p>  1、單片機(jī) STC80C52RC</p><p>  a、該系統(tǒng)采用

9、MCS-51系列單片機(jī)AT89C51作為控制核心,該系統(tǒng)可以完成運(yùn)算控制、信號(hào)識(shí)別以及顯示功能的實(shí)現(xiàn)。由于用了單片機(jī),使其技術(shù)比較成熟,應(yīng)用起來(lái)方便、簡(jiǎn)單并且單片機(jī)周圍的輔助電路也比較少,便于控制和實(shí)現(xiàn)。整個(gè)系統(tǒng)具有極其靈活的可編程性,能方便地對(duì)系統(tǒng)進(jìn)行功能的擴(kuò)張和更改。MCS-51單片機(jī)特點(diǎn)如下:</p><p>  b、單片機(jī)主機(jī)系統(tǒng)電路</p><p>  AT89C51單片機(jī)是屬于

10、51系列單片機(jī)里的。它的內(nèi)部自帶2K字節(jié)可編程FLASH存儲(chǔ)器的低電壓、高性能COMS 8位微處理器。AT89C51單片機(jī)還與Intel MCS-51系列單片機(jī)的輸出管腳和指令相互兼容。由于AT89C51將多功能8位CPU和閃速存儲(chǔ)器結(jié)合在單個(gè)的芯片里,所以,AT89C51構(gòu)成的單片機(jī)系統(tǒng)是所有系統(tǒng)里結(jié)構(gòu)最簡(jiǎn)便,價(jià)格最便宜,使用效率最高的控制系統(tǒng),它還節(jié)省了外部的RAM與ROM和接口器件,削減了硬件方便的開(kāi)銷。節(jié)省了制造成本,提高了系統(tǒng)

11、的性價(jià)比。</p><p><b>  c.主要芯片的介紹</b></p><p>  本課題采用單片機(jī)AT89C51控制的數(shù)字溫度測(cè)量與顯示系統(tǒng),其功能的實(shí)現(xiàn)主要通過(guò)軟件編程來(lái)完成,采用單片機(jī)AT89C51,它是低功耗、高性能的CMOS型8位單片機(jī)。片內(nèi)帶有4KB的Flash存儲(chǔ)器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。且AT89C51的使用壽命很長(zhǎng),數(shù)據(jù)保留時(shí)間也較長(zhǎng)

12、,可以達(dá)到十年的時(shí)間。就是因?yàn)檫@一些類的特性,與優(yōu)點(diǎn)。所以本次設(shè)計(jì)我才會(huì)選擇使用這一類的單片機(jī)來(lái)作為我實(shí)現(xiàn)此系統(tǒng)的工具。</p><p><b>  單片機(jī)主機(jī)系統(tǒng)圖</b></p><p>  根據(jù)設(shè)計(jì)的要求,要利用溫度傳感器實(shí)時(shí)溫度。當(dāng)溫度高于設(shè)定的溫度時(shí)(60℃),當(dāng)溫度高于設(shè)置報(bào)警的上限值時(shí)風(fēng)扇轉(zhuǎn)同時(shí)紅色led亮,當(dāng)?shù)陀跁r(shí)繼電器以留出接口。同時(shí)要求能設(shè)定溫度。

13、畢業(yè)設(shè)計(jì)的主要任務(wù)是能對(duì)溫度進(jìn)行自動(dòng)的檢測(cè)和控制。設(shè)計(jì)中采用單片機(jī)來(lái)控制溫度,因此要有溫度的顯示電路,溫控電路,報(bào)警電路等幾個(gè)部分。</p><p>  要實(shí)現(xiàn)系統(tǒng)的設(shè)計(jì)要用到的知識(shí)點(diǎn)有單片機(jī)的原理及其應(yīng)用,溫度傳感器的原理和應(yīng)用,及顯示電路的設(shè)計(jì)等。</p><p>  2、 DS18B20數(shù)字溫度傳感器</p><p>  2.1 DS18B20 簡(jiǎn)介</

14、p><p>  新的“一線器件”DS18B20體積更小,適用電壓更寬、更經(jīng)濟(jì),做為一線總線數(shù)字化溫度床感器,支持“一線總線”接口,測(cè)量溫度范圍為-55℃~+125℃,在-10℃~+85℃范圍內(nèi),精度為±0.5℃。獨(dú)特的電源和信號(hào)復(fù)合在一起,僅適用一條口線,每個(gè)芯片唯一編碼,支持聯(lián)網(wǎng)尋址,簡(jiǎn)單的網(wǎng)絡(luò)化的溫度感知,零功能等待。</p><p>  2.2 DS18B20特性</p

15、><p>  DS18B20可以由程序設(shè)定9~12位的分辨率,精度為±0.5℃。</p><p>  ①獨(dú)特的單線接口僅需一個(gè)端口引腳進(jìn)行通訊</p><p> ?、诤?jiǎn)單的多點(diǎn)分布應(yīng)用</p><p><b> ?、蹮o(wú)需外部器件</b></p><p><b> ?、芸赏ㄟ^(guò)數(shù)據(jù)線供

16、電</b></p><p><b> ?、萘愦龣C(jī)功耗</b></p><p> ?、逌y(cè)溫范圍-55~+125℃,以0.5℃遞增華氏器件-67~+257℉,以0.9℉遞增</p><p>  ⑦溫度以9位數(shù)字量讀出</p><p> ?、鄿囟葦?shù)字量轉(zhuǎn)換時(shí)間200ms(典型值)</p><p&

17、gt; ?、嵊脩艨啥x的非易失性溫度報(bào)警設(shè)置</p><p>  ⑩報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件</p><p>  應(yīng)用包括溫度控制、工業(yè)系統(tǒng)、消費(fèi)品、溫度計(jì)或任何感測(cè)系統(tǒng)。</p><p><b>  2.3 說(shuō)明:</b></p><p>  DS18B20有三個(gè)主要數(shù)字部件:&

18、lt;/p><p>  1)64位激光ROM</p><p><b>  2)溫度傳感器</b></p><p>  3)非易失性溫度報(bào)警觸發(fā)器TH和TL</p><p>  4)器件用如下方式從單線通訊線上汲取能量,在信號(hào)線處于高電平期間把能量存儲(chǔ)在內(nèi)部電容里,在信號(hào)線處于低電平期間消耗電容上的電能工作,知道高電平到來(lái)再給

19、寄生電源(電容)充電。DS18B20也可用外部5V電源供電。</p><p>  DS18B20依靠一個(gè)單線端口通訊。在單線端口條件下,必須先建立ROM操作協(xié)議,才能進(jìn)行存儲(chǔ)器和控制操作。因此,控制器必須首先提供下面5個(gè)ROM操作命令之一:1)讀ROM,2)匹配ROM,3)搜索ROM,4)跳過(guò)ROM,5)報(bào)警搜索。這些命令對(duì)每個(gè)器件的激光ROM部分進(jìn)行操作,在單總線上掛有多個(gè)器件時(shí),可以區(qū)分出單個(gè)器件,同時(shí)可以向

20、總線控制器指明有多少器件或是什么型號(hào)的器件。成功執(zhí)行完一條ROM操作序列后,即可進(jìn)行存儲(chǔ)器可控制操作,控制器可以提供6條存儲(chǔ)器和控制操作指令中的任一條。一條控制操作命令指示DS18B20完成一次溫度測(cè)量,測(cè)量結(jié)果放在內(nèi)部暫存器中暫存,用一條讀暫存器內(nèi)容的存儲(chǔ)器操作命令可以把暫存器中數(shù)據(jù)讀出。</p><p>  2.4 DS18B20測(cè)溫原理:</p><p>  用一個(gè)高溫度系數(shù)的振蕩

21、器確定一個(gè)門周期,內(nèi)部計(jì)數(shù)器在這個(gè)門周期內(nèi)對(duì)一個(gè)低溫度系數(shù)的振蕩器的脈沖進(jìn)行計(jì)數(shù)來(lái)的到溫度值。計(jì)數(shù)器被預(yù)置到對(duì)應(yīng)于-55的一個(gè)值。如果計(jì)數(shù)器在門周期結(jié)束前到達(dá)0,則溫度寄存器(同樣被預(yù)置到-55℃)的值增加,表明所測(cè)溫度大于-55℃。同時(shí),計(jì)數(shù)器被復(fù)位到一個(gè)值,這個(gè)值由斜坡式累加器電路確定,斜坡式累加器電路用來(lái)補(bǔ)償感溫振蕩器的拋物線特性。然后計(jì)數(shù)器又開(kāi)始計(jì)數(shù)知道0,如果門周期仍未結(jié)束,將重復(fù)這一過(guò)程。斜坡式累加器用來(lái)補(bǔ)償感溫振蕩器的非線

22、性,以期測(cè)溫時(shí)獲得比較高的分辨力,這是通過(guò)改變計(jì)數(shù)器對(duì)溫度每增加一度所需計(jì)數(shù)的值來(lái)實(shí)現(xiàn)的。因此,要想獲得所需的分辨力,必須同時(shí)知道在給定溫度下計(jì)數(shù)器的值和每一度的計(jì)數(shù)值。DS18B20內(nèi)部對(duì)此計(jì)算的結(jié)果可提供0.5℃的分辨力。溫度以16bit帶符號(hào)位擴(kuò)展的二進(jìn)制補(bǔ)碼形式讀出,表一給出了溫度值和輸出數(shù)據(jù)的關(guān)系。數(shù)據(jù)通過(guò)單線接口以串行方式傳輸。DS18B20測(cè)溫范圍-55℃~+125℃,以0.5℃遞增。如用于華氏溫度,必須要用一個(gè)轉(zhuǎn)換因子查

23、找表。</p><p><b>  表一</b></p><p>  注意DS18B20內(nèi)溫度表示值為1/2℃LSB,如下所示9bit格式:</p><p><b>  表二</b></p><p>  最高有效(符號(hào))位被復(fù)制充滿存儲(chǔ)器中兩字節(jié)溫度存儲(chǔ)器的高M(jìn)SB位,由這種“符號(hào)位擴(kuò)展”產(chǎn)生出了表

24、一的16bit溫度讀數(shù)。</p><p>  2.5 DS18B20測(cè)溫原理圖:</p><p>  圖二 DS18B20 測(cè)溫原理框圖</p><p>  可用下述方法獲得更高的分辨力。首先,讀取溫度值,將0.5℃位(LSB)從讀取的值中截去,這個(gè)值叫做TEMP_READ。然后讀取計(jì)數(shù)器中剩余的值,這個(gè)值是門周期結(jié)束后保留下來(lái)的值(COUNT_REMAIN)。最

25、后,我們用到在這個(gè)溫度下每度的計(jì)數(shù)值(COUNT_PER_C)。用戶可以用下面的公式計(jì)算實(shí)際溫度值:</p><p>  2.6 64位激光刻ROM</p><p>  每只18B20都有一個(gè)唯一的長(zhǎng)達(dá)64位的編碼。最前面8位是單線系列編碼。后面48為是一個(gè)唯一的序列號(hào)。最后8為是以上56位的CRC碼。</p><p><b>  表三</b>

26、;</p><p>  2.7 CRC發(fā)生器</p><p>  DS18B20中有8位CRC存儲(chǔ)在64位ROM的最高有效字節(jié)中??偩€控制器可以用64位ROM中的前56位計(jì)算出一個(gè)CRC值,再用這個(gè)和存儲(chǔ)在DS18B20中的值進(jìn)行比較,以確定ROM數(shù)據(jù)是否被總線控制器接受無(wú)誤。CRC計(jì)算等式如下:8+5+4+。單總線CRC可以有一個(gè)由移位寄存器和XOR門構(gòu)成的多項(xiàng)式發(fā)生器來(lái)產(chǎn)生,如下圖

27、所示:</p><p>  圖三 單總線CRC的結(jié)構(gòu)原理圖</p><p>  2.8 單總線系統(tǒng)</p><p>  單總線系統(tǒng)包括一個(gè)總線控制器和一個(gè)或多個(gè)從機(jī)。DS18B20充當(dāng)從機(jī),當(dāng)只有一只從機(jī)掛接在總線上時(shí),系統(tǒng)被稱為“單點(diǎn)”系統(tǒng);如果由多只從機(jī)掛接在總線上,系統(tǒng)被稱為“多點(diǎn)”。所有的數(shù)據(jù)和指令的傳遞都是從最低有效位開(kāi)始通過(guò)單總線進(jìn)行傳送的。</

28、p><p>  2.9 DS18B20指令控制</p><p>  執(zhí)行序列通過(guò)單線總線端口訪問(wèn)DS18B20的協(xié)議如下:</p><p><b>  步驟一:初始化;</b></p><p>  步驟二:ROM操作指令;</p><p>  步驟三:DS18B20功能指令。</p>&

29、lt;p>  每一次DS18B20的操作都必須滿足以上步驟,若是缺少步驟或是順序混亂,器件將不會(huì)返回值。例如這樣的順序:發(fā)起ROM搜索指令[F0H]和報(bào)警搜索指令[ECH]之后,總線控制器必須返回步驟一。</p><p>  2.10 ROM時(shí)序指令控制</p><p>  通過(guò)單總線的所有執(zhí)行操作處理都從一個(gè)初始化序列開(kāi)始。初始化序列包括一個(gè)由總線控制器發(fā)出的復(fù)位脈沖和其后由從機(jī)

30、發(fā)出的存在脈沖。存在脈沖讓總線控制器知道DS18B20在總線上且已準(zhǔn)備好操作。</p><p>  一旦總線控制器探測(cè)到一個(gè)存在脈沖,它就發(fā)出一條ROM指令。如果總線上掛有多只DS18B20,這些指令將基于器件獨(dú)有的64位ROM片序列碼使得總線控制器選出特定要進(jìn)行操作的器件。這些指令同樣也可以使總線控制器識(shí)別有多少只,什么型號(hào)的器件掛在總線上,同樣,它們也可以識(shí)別哪些器件已經(jīng)符合報(bào)警條件。</p>

31、<p> ?、臩earch ROM[F0H](搜索ROM指令)</p><p>  當(dāng)系統(tǒng)上電初始化的時(shí)候,總線控制器必須通過(guò)識(shí)別總線上所有ROM片序列碼去得到從機(jī)的數(shù)目和型號(hào)??偩€控制器通過(guò)搜索ROM指令多次循環(huán)搜索ROM編碼,以確認(rèn)所有從機(jī)器件。如果總線上只有一只從機(jī),那么可以用較為簡(jiǎn)單的讀取ROM 代替搜索ROM指令。在每次搜索ROM指令之后,總線控制器必須返回步驟一。</p>&

32、lt;p> ?、芌EAD ROM[33H](讀取ROM指令)</p><p>  只有在總線上存在單只DS18B20的時(shí)候才能使用這條命令。該命令允許總線控制器在不使用搜索ROM的情況下讀取從機(jī)的64位片序列碼。如果總線上有不止一只從機(jī),當(dāng)所有從機(jī)試圖同時(shí)傳送信號(hào)時(shí)就會(huì)發(fā)生數(shù)據(jù)沖突。</p><p> ?、荕ATHCH ROM[55H](匹配ROM指令)</p><

33、;p>  匹配ROM指令,后跟64位ROM編碼序列,讓總線控制器在多點(diǎn)總線上定位一只特定的DS18B20。只有和64為ROM片序列碼完全匹配的DS18B20才能響應(yīng)隨后的存儲(chǔ)操作指令;所有和64位ROM片序列碼不匹配的從機(jī)都將等待復(fù)位脈沖。</p><p>  ⑷SKIP ROM[CCH](跳過(guò)ROM指令)</p><p>  這條指令允許總線控制器不用提供64位ROM編碼就使用功能

34、指令。例如,總線控制器可以先發(fā)出一條跳過(guò)ROM指令,然后發(fā)出溫度轉(zhuǎn)換指令[44H],從而完成溫度轉(zhuǎn)換操作。注意,當(dāng)只有一只從機(jī)在總線上時(shí),無(wú)論如何,跳過(guò)ROM指令之后只能跟著發(fā)出一條讀取暫存器指令[BEH]。在單點(diǎn)總線情況下使用該命令,器件無(wú)需發(fā)回64位ROM編碼,從而節(jié)省了時(shí)間。如果總線上有不止一只從機(jī),若發(fā)出跳過(guò)ROM指令,由于多只從機(jī)同時(shí)傳送信號(hào),總線上就會(huì)發(fā)生數(shù)據(jù)沖突。</p><p>  2.11DS

35、18B20功能指令控制</p><p>  在總線空盒子錢發(fā)給欲連接的DS18B20一條ROM命令后,跟著可以發(fā)送一條DS18B20功能指令。這些命令允許總線控制器讀寫DS18B20的暫存器,發(fā)起溫度轉(zhuǎn)換和識(shí)別電源模式。DS18B20的功能指令如下所示:</p><p> ?、臗ONVERT T [44H](溫度轉(zhuǎn)換指令)</p><p>  這條命令用以啟動(dòng)一次溫

36、度轉(zhuǎn)換。溫度轉(zhuǎn)換指令被執(zhí)行,產(chǎn)生的溫度轉(zhuǎn)換結(jié)果數(shù)據(jù)以2個(gè)字節(jié)的形式被存儲(chǔ)在高速暫存器中,而后DS18B20保持等待狀態(tài)。如果寄生電源模式下發(fā)出該命令后,在溫度轉(zhuǎn)換期間,必須在10US(最多)內(nèi)給單總線上一個(gè)強(qiáng)上拉。如果DS18B20以外部電源供電,總線控制器在發(fā)出該命令后跟著發(fā)出讀時(shí)序,DS18B20如處于轉(zhuǎn)換中,將在總線上返回0,若溫度轉(zhuǎn)換完成,則返回1。寄生電源模式下,總線被強(qiáng)上拉拉高前這樣的通訊技術(shù)不會(huì)被使用。</p>

37、<p> ?、芖RITE SCRATCHPAD [4EH](寫暫存器指令)</p><p>  這條命令向DS18B20的暫存器寫入數(shù)據(jù),開(kāi)始位置在TH寄存器(暫存器的第二個(gè)字節(jié)),接下來(lái)寫入TL寄存器(暫存器的第三個(gè)字節(jié)),最后寫入配置寄存器(暫存器的第四個(gè)字節(jié))。數(shù)據(jù)以最低有效位開(kāi)始傳送。上述三個(gè)字節(jié)的寫入必須發(fā)生在總線控制器發(fā)出復(fù)位命令前,否則會(huì)終止寫入。</p><p&g

38、t; ?、荝EAD SCRATCHPAD [BEH] (讀暫存器指令)</p><p>  這條命令讀取暫存器的內(nèi)容。讀取將從字節(jié)0開(kāi)始,一直進(jìn)行下去,直到第九個(gè)字節(jié)(字節(jié)8,CRC)讀完,如果不想讀完所有字節(jié),控制器可以在任何時(shí)間發(fā)出復(fù)位命令來(lái)中止讀取。</p><p><b>  備注:</b></p><p> ?、賹?duì)于寄生電源模式下的D

39、S18B20,在溫度轉(zhuǎn)換和拷貝數(shù)據(jù)到EEPROM其間,必須給但總線一個(gè)強(qiáng)上拉,總線上載這段時(shí)間內(nèi)不能有其他活動(dòng)。</p><p>  ②總線控制器在任何時(shí)刻都可以通過(guò)發(fā)出復(fù)位信號(hào)中止數(shù)據(jù)傳輸。</p><p> ?、跿H、TL和配置寄存器這三個(gè)字節(jié)的寫入必須在復(fù)位信號(hào)發(fā)起之前。</p><p>  2.12 18B20時(shí)序詳解</p><p>

40、;<b>  初始化時(shí)序</b></p><p>  圖四 初始化時(shí)序示意圖</p><p><b>  讀/寫時(shí)序</b></p><p>  DS18B20的數(shù)據(jù)讀寫是通過(guò)時(shí)序處理來(lái)確認(rèn)信息交換的。</p><p>  ⑴寫時(shí)序:有兩種寫時(shí)序:寫1時(shí)序和寫0時(shí)序。總線控制器通過(guò)寫1時(shí)序?qū)戇壿?到

41、DS18B20,寫0時(shí)序?qū)戇壿?到DS18B20。所有寫時(shí)序必須最少持續(xù)60us,包括兩個(gè)寫中期之間至少1us的回復(fù)時(shí)間。當(dāng)總線控制器把數(shù)據(jù)線從邏輯高電平拉到低電平的時(shí)候,寫時(shí)序開(kāi)始。(見(jiàn)圖五)</p><p><b>  圖五 讀/寫時(shí)序圖</b></p><p>  總線控制器要產(chǎn)生一個(gè)寫時(shí)序,必須把數(shù)據(jù)線拉到低電平后釋放,在寫時(shí)序開(kāi)始后的15us釋放中線。當(dāng)總線

42、被釋放的時(shí)候,5K的上拉電阻將拉高總線。總控制器要生成一個(gè)寫0時(shí)序,必須把數(shù)據(jù)線拉到低電平并持續(xù)保持(至少60us)。</p><p>  總線控制器初始化寫時(shí)序后,DS18B20在一個(gè)15us到60us的窗口內(nèi)對(duì)I/O線采樣。如果線上是高電平,就是寫1。如果線上是低電平,就是寫0。</p><p><b> ?、谱x時(shí)序</b></p><p>

43、;  總線控制器發(fā)起讀時(shí)序時(shí),DS18B20僅被用來(lái)傳輸數(shù)據(jù)給控制器。因此,總線控制器在發(fā)出讀暫存器指令[BEH]后必須立刻開(kāi)始讀時(shí)序,DS18B20可以提供請(qǐng)求信息。除此之外,總線控制器在發(fā)出發(fā)送溫度轉(zhuǎn)換指令[44H]或召回EEPROM指令[B8H]之后讀時(shí)序。</p><p>  所有讀時(shí)序必須最少60us,包括兩個(gè)度周期間至少1us的恢復(fù)時(shí)間。當(dāng)總線控制器把數(shù)據(jù)線從高電平拉到低電平時(shí),讀時(shí)序開(kāi)始,數(shù)據(jù)線必須

44、至少保持1us,然后總線被釋放。在總線控制器發(fā)出讀時(shí)序后,DS18B20通過(guò)拉高或拉低總線來(lái)傳輸1或0。當(dāng)傳輸邏輯0結(jié)束后,總線將被釋放,通過(guò)上拉電阻回到上升沿狀態(tài)。從DS18B20輸出的數(shù)據(jù)在讀時(shí)序的下降沿出現(xiàn)后15us內(nèi)有效。因此,總線控制器在讀時(shí)序開(kāi)始后必須停止把I/O腳驅(qū)動(dòng)為低電平15us,以讀取I/O腳狀態(tài)。</p><p><b>  ⑶極限使用條件</b></p>

45、<p>  各引腳對(duì)地電壓:-0.5V到+0.6V</p><p>  工作溫度: -55℃到+125℃</p><p>  存儲(chǔ)溫度: -55℃到+125℃</p><p>  焊接溫度: 260℃ 10 秒</p><p><b> ?、戎绷麟娞匦?lt;/b></p>

46、;<p><b>  表四</b></p><p><b>  備注:</b></p><p> ?、偎械碾妷簠⒖键c(diǎn)都是接地點(diǎn)。</p><p> ?、谏侠妷海杭僭O(shè)上拉器件是理想的,因此上拉的高電平應(yīng)該與VPU相等。為了達(dá)到DS18B20的VIH規(guī)格,實(shí)際晶體管上拉供電必須包括電壓跌落極限;因此,VPU_

47、ACTUAL=VPU_IDEAL+VTRANSISTOR.</p><p> ?、圻壿?電壓在吸收電流為1mA時(shí)得到。</p><p> ?、茉诩纳娫茨J降蛪籂顟B(tài)選,為保證出線一個(gè)脈沖,VLMAX在VCC低至0.5V時(shí)得到。</p><p> ?、葸壿?電壓在源電流為1mA時(shí)得到</p><p> ?、薮龣C(jī)電流最大定義為到70℃,125℃時(shí)

48、典型待機(jī)電流為3uA。</p><p> ?、邽榱藢DDS減到最少,DQ的范圍如下:GND≤DQ≤GND+0.3V or VDD-0.3V≤DQ≤VDD.</p><p> ?、鄤?dòng)態(tài)電流涉及溫度轉(zhuǎn)換和寫EEPROM存儲(chǔ)器。</p><p> ?、酓Q數(shù)據(jù)線為高狀態(tài)。</p><p>  誤差數(shù)據(jù)在125℃,VDD=5.5V條件下測(cè)試1000

49、小時(shí)得到。</p><p><b>  3、顯示器的選擇</b></p><p> ?。ㄒ唬?LCD1602顯示器</p><p>  工業(yè)字符型液晶,能夠同時(shí)顯示16x02即32個(gè)字符。雖然LCD顯示器的價(jià)格比數(shù)碼管要貴。但是它有一個(gè)非常本質(zhì)的優(yōu)點(diǎn)就是它的顯示效果好,所以采用LCD 作為顯示器。</p><p><

50、;b> ?。ǘ㎜CD引腳圖</b></p><p>  1602有16個(gè)引腳:</p><p>  1602顯示質(zhì)量高,功耗小。</p><p>  三、 設(shè)計(jì)硬件原理及原理圖</p><p>  圖十 設(shè)計(jì)硬件原理圖</p><p>  本系統(tǒng)中通過(guò)溫度傳感器DS18B20的數(shù)據(jù)線DQ與主控芯片5

51、1單片機(jī)的P3.3相連接,DS18B20將采集到的數(shù)據(jù)送給單片機(jī),經(jīng)過(guò)單片機(jī)出來(lái)后,顯示在8位數(shù)據(jù)線與單片機(jī)P0口的液晶LCD上。蜂鳴器經(jīng)過(guò)三極管的驅(qū)動(dòng)后接到單片機(jī)的P3.7,來(lái)實(shí)現(xiàn)當(dāng)實(shí)時(shí)溫度大于下限或高于上限的報(bào)警。4個(gè)按鍵K1~K4接到單片機(jī)的P1.0~P1.3,來(lái)實(shí)現(xiàn)對(duì)上限值和下限值的查看與設(shè)定。液晶LCD的RS、RW、E分別接到單片機(jī)的P2.0~P2.2來(lái)實(shí)現(xiàn)單片機(jī)控制液晶的讀寫命令和數(shù)據(jù)的控制。</p><

52、p><b>  四、設(shè)計(jì)程序流程圖</b></p><p>  LCD顯示子程序開(kāi)始先讓LCD初始化,接著光標(biāo)定位,顯示字符,最后放回。</p><p><b>  LCD流程圖</b></p><p>  主程序首先設(shè)置堆棧為5FH,設(shè)置定時(shí)器工作方式T1為方式2。接著開(kāi)始啟動(dòng)定時(shí)器,調(diào)用LCD初始化子程序,調(diào)用D

53、S18B20復(fù)位子程序。接著調(diào)用上下限寫入暫存器子程序,把溫度報(bào)警值拷貝回暫存器,調(diào)用讀取溫度子程序,調(diào)用處理顯示子程序,調(diào)用實(shí)際溫度值與上下限溫度值比較子程序,調(diào)用按鍵掃描子程序后返回到調(diào)用讀取溫度子程序。</p><p><b>  主程序框圖</b></p><p>  按鍵掃描子程序首先判斷按鍵K1是否按下,如果按下就調(diào)用蜂鳴子程序,接著判斷K1是否放開(kāi),直到

54、K1放開(kāi),調(diào)用顯示數(shù)據(jù)子程序,然后去判斷K3是否按下,直到K3按下,調(diào)用蜂鳴子程序,最后放回;如果K1沒(méi)有按下去判斷K2是否按下,如果沒(méi)按下就跳到返回,如果有按下就調(diào)用鳴響子程序,然后去判斷K3是否放開(kāi),若放開(kāi)接著調(diào)用顯示字符子程序,調(diào)用設(shè)定報(bào)警TH、TL子程序,調(diào)用報(bào)警上下限寫入暫存器子程序,調(diào)用報(bào)警值拷貝EEROM子程序。</p><p><b>  按鍵掃描子程序框圖</b></

55、p><p><b>  五、總結(jié)</b></p><p>  該系統(tǒng)利用DS18B20進(jìn)行測(cè)溫,基于單片機(jī)AT89S52進(jìn)行溫度控制,具有硬件電路簡(jiǎn)單,控溫精度高、功能強(qiáng)、體積小,簡(jiǎn)單靈活等優(yōu)點(diǎn),可以應(yīng)用于控制溫度在-55℃到+125℃之間的各種場(chǎng)合,可以實(shí)現(xiàn)溫度的實(shí)時(shí)采集、顯示功能與控制功能,是一種比較理想的只能化控制系統(tǒng)。由此構(gòu)成的單片機(jī)控制的但總線溫度多路采集系統(tǒng)比

56、傳統(tǒng)的測(cè)溫系統(tǒng)可靠性高,易于構(gòu)成網(wǎng)絡(luò)控制,使用與各種溫度檢測(cè)與控制系統(tǒng)。該單總線技術(shù)可以為其他過(guò)程參數(shù)測(cè)控系統(tǒng)提供技術(shù)支持,具有實(shí)用價(jià)值。</p><p>  AT89C51的時(shí)鐘為12M,I/O口可達(dá)32個(gè),較高的時(shí)鐘頻率和豐富的I/O,都為實(shí)現(xiàn)電路功能提供了非常有利的條件。同時(shí)也AT89S51內(nèi)含4KB FLASH ROM,開(kāi)發(fā)環(huán)境友好,易用,方便,加上Proteus仿真大大加快本系統(tǒng)設(shè)計(jì)開(kāi)發(fā)。在此次設(shè)計(jì)中學(xué)

57、會(huì)了對(duì)Proteus的基本使用,對(duì)里面一些基本元件的英文,如電阻RES、電容CAP、晶振CRYSTAL等,學(xué)會(huì)了連線和運(yùn)行。</p><p>  在設(shè)計(jì)過(guò)程中也遇到一些問(wèn)題,由于LCD是現(xiàn)實(shí)的字符型數(shù)據(jù),數(shù)字不能直接送去顯示,所有對(duì)于數(shù)字的顯示首先要轉(zhuǎn)換為字符格式,方法為:數(shù)字+‘0’;對(duì)于溫度傳感器的小數(shù)處理也遇到一些問(wèn)題,兩個(gè)選的是12位,精度為0.0625,DS18B20的溫度寄存器里低八位的低四位為小數(shù)部

58、分,小數(shù)的值為0.0625*低八位的低四位,但是由于單片機(jī)的數(shù)據(jù)處理能力較差,不能處理小數(shù)的乘法運(yùn)算,用上方法就顯示錯(cuò)誤,后來(lái)想到可以把小數(shù)先變成整數(shù)處理,令低八位的低四位為t,小數(shù)后的第一位=625*t/1000,然后將這個(gè)數(shù)字在小數(shù)點(diǎn)后顯示即可。</p><p>  其實(shí)該本設(shè)計(jì)還有很多的不足,本實(shí)驗(yàn)是用單片機(jī)的多個(gè)I/O口來(lái)驅(qū)動(dòng)多路,DS18B20是一總線結(jié)構(gòu),每一個(gè)DS18B20 在其ROM 中都存有一個(gè)

59、其唯一的48位序列號(hào),在出廠前已寫入片內(nèi)RMO中,主機(jī)在進(jìn)行操作程序前必須逐一接入18B20 用讀ROM(33H)命令將該18B20 的序列號(hào)讀出并登錄.當(dāng)主機(jī)需要對(duì)眾多在線的DS18B20 的某一個(gè)進(jìn)行操作,首先要發(fā)出匹配ROM 命令(55H),緊接著主機(jī)提供64位序列(包括該DS8B20的48位序列號(hào)),之后操作就是針對(duì)該DS18B20的.而所謂跳過(guò)ROM 命令.即為:之后的操作是對(duì)所有DS18B20 的,所以可以在一根總線上掛多個(gè)

60、DS18B20。</p><p><b>  六、 附錄</b></p><p><b>  1、程序代碼</b></p><p>  #include<reg52.h></p><p>  #include<intrins.h></p><p> 

61、 #define KEY P1</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit lcden=P2^2;//1602使能</p><p>  sbit lcdrd=P2^0;//數(shù)據(jù)、命令選擇端</p&

62、gt;<p>  sbit lcdrw=P2^1;//讀,寫選擇端</p><p>  sbit dq=P3^3;//18B20數(shù)據(jù)線</p><p>  sbit key1 = P1^0;</p><p>  sbit key2 = P1^1;</p><p>  sbit key3 = P1^2;</p>

63、<p>  sbit key4 = P1^3;</p><p>  sbit beeee = P3^7;</p><p>  uint set_t = 23;</p><p>  uchar code str1[]="temperature:";</p><p>  uchar code str2[]=&qu

64、ot; ";</p><p>  uchar data disdata[5];</p><p>  uint tvalue;</p><p>  uchar tflag;</p><p>  void delayms(uint ms)//延時(shí)毫秒</p><p>  { uint

65、 i,j;</p><p>  for(i=ms;i>0;i--)</p><p>  for(j=100;j>0;j--);</p><p><b>  }</b></p><p>  void key_cut(void)</p><p><b>  {</b>

66、</p><p>  unsigned int ii;</p><p>  if (KEY != 0xff)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key1 == 0)</p><p><b&g

67、t;  {</b></p><p><b>  set_t ++;</b></p><p><b>  }</b></p><p>  else if(key2 == 0)</p><p><b>  {</b></p><p><b&

68、gt;  set_t --;</b></p><p><b>  }</b></p><p>  else if(key3 == 0)</p><p><b>  {</b></p><p><b>  }</b></p><p>  els

69、e if(key4 == 0)</p><p><b>  {</b></p><p><b>  }</b></p><p>  while(KEY != 0xff);</p><p><b>  }</b></p><p><b>  }&

70、lt;/b></p><p>  void write_com(uchar com)//向1602中寫入命令碼</p><p>  { lcden=0;</p><p><b>  lcdrd=0;</b></p><p><b>  lcdrw=0;</b></p><p

71、><b>  P0=com;</b></p><p>  delayms(1);</p><p><b>  lcden=1;</b></p><p>  delayms(1);</p><p><b>  lcden=0;</b></p><p>

72、;<b>  }</b></p><p>  void write_date(uchar date)//向1602中寫入數(shù)據(jù)</p><p>  { lcden=0;</p><p><b>  lcdrd=1;</b></p><p><b>  lcdrw=0;</b>&l

73、t;/p><p><b>  P0=date;</b></p><p>  delayms(1);</p><p><b>  lcden=1;</b></p><p>  delayms(1);</p><p><b>  lcden=0;</b><

74、/p><p><b>  }</b></p><p>  void display(uchar *p)//1602顯示</p><p>  { while(*p!='\0')</p><p>  { write_date(*p);</p><p><b>  p++;<

75、/b></p><p>  delayms(1);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void lcd_init()//1602初始化</p><p>  { write_com(0x38);</p

76、><p>  delayms(5);</p><p>  write_com(0x01);</p><p>  delayms(5);</p><p>  write_com(0x0c);</p><p>  delayms(5);</p><p>  write_com(0x06);</p&

77、gt;<p>  delayms(5);</p><p><b>  }</b></p><p>  void lcd_display()//1602顯示初始化</p><p>  {lcd_init();</p><p>  write_com(0x80);</p><p>  d

78、isplay(str1);</p><p>  write_com(0xc0);</p><p>  display(str2);</p><p><b>  }</b></p><p>  void delayus(uint i)//延時(shí)微妙</p><p>  {while(i--);<

79、/p><p><b>  }</b></p><p>  void ds_init()//18B20初始化</p><p><b>  {dq=1;</b></p><p>  delayus(4);</p><p><b>  dq=0;</b></

80、p><p>  delayus(480);</p><p><b>  dq=1;</b></p><p>  delayus(60);</p><p><b>  if(dq==0)</b></p><p>  delayus(240);</p><p>

81、;<b>  }</b></p><p>  void ds_write(uchar date1)//向18B20中寫入數(shù)據(jù)</p><p>  { uchar i;</p><p>  for(i=0;i<8;i++)</p><p><b>  { dq=0;</b></p>

82、<p>  if((date1&0x01)==1)</p><p><b>  dq=1;</b></p><p><b>  else</b></p><p><b>  dq=0;</b></p><p>  delayus(21);</p>

83、<p><b>  dq=1;</b></p><p>  date1>>=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  uchar ds_read()//由18B20讀取數(shù)據(jù)</p&g

84、t;<p>  { uchar i,temp;</p><p>  for(i=0;i<8;i++)</p><p><b>  { dq=0;</b></p><p><b>  dq=1;</b></p><p><b>  temp>>=1;</

85、b></p><p><b>  if(dq==1)</b></p><p>  temp|=0x80;</p><p>  delayus(30);</p><p><b>  }</b></p><p>  return(temp);</p><

86、p><b>  dq=1;</b></p><p><b>  }</b></p><p>  uint ds_temp()//從18B20中讀取溫度值</p><p>  { uchar a,b;</p><p>  ds_init();</p><p>  ds_w

87、rite(0xcc);</p><p>  ds_write(0x44);</p><p>  ds_init();</p><p>  ds_write(0xcc);</p><p>  ds_write(0xbe);</p><p>  a=ds_read();</p><p>  b=ds

88、_read();</p><p><b>  tvalue=b;</b></p><p>  tvalue<<=8;</p><p>  tvalue=tvalue|a;</p><p>  if(tvalue<0x0fff)</p><p><b>  tflag=0

89、;</b></p><p><b>  else</b></p><p>  {tvalue=~tvalue+1;</p><p><b>  tflag=1;</b></p><p><b>  }</b></p><p>  tvalue

90、=tvalue*(0.625);</p><p>  return(tvalue);</p><p><b>  }</b></p><p>  void ds_dis()//把溫度值送入1602中顯示</p><p><b>  {</b></p><p>  uchar

91、flagdat;</p><p>  disdata[0]=tvalue/1000+0x30;</p><p>  disdata[1]=tvalue%1000/100+0x30;</p><p>  disdata[2]=tvalue%100/10+0x30;</p><p>  disdata[3]=tvalue%10+0x30;<

92、/p><p>  if(tflag==0)</p><p>  flagdat=0x20;</p><p>  if(tflag==1)</p><p>  flagdat=0x2d;</p><p>  if(disdata[0]==0x30)</p><p>  {disdata[0]=0x20

93、;</p><p>  if(disdata[1]==0x30)</p><p>  {disdata[1]=0x20;</p><p><b>  }</b></p><p><b>  }</b></p><p>  write_com(0xc0);</p>

94、<p>  write_date(flagdat);</p><p>  write_com(0xc1);</p><p>  write_date(disdata[0]);</p><p>  write_com(0xc2);</p><p>  write_date(disdata[1]);</p><p&

95、gt;  write_com(0xc3);</p><p>  write_date(disdata[2]);</p><p>  write_com(0xc4);</p><p>  write_date(0x2e);</p><p>  write_com(0xc5);</p><p>  write_date(d

96、isdata[3]);</p><p><b>  }</b></p><p>  void T_baojing(void)</p><p><b>  {</b></p><p>  unsigned char ii = 0xc8;</p><p>  write_com(

97、ii);</p><p>  write_date((set_t/100)+0x30);</p><p>  write_com(ii+1);</p><p>  write_date((set_t%100/10)+0x30);</p><p>  write_com(ii+2);</p><p>  write_da

98、te((set_t%100%10)+0x30);</p><p>  if((tvalue/10) >= set_t)</p><p><b>  {</b></p><p>  beeee = 0;</p><p><b>  }</b></p><p><b&

99、gt;  else</b></p><p><b>  {</b></p><p>  beeee = 1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()//主程序

100、</p><p><b>  {</b></p><p>  beeee = 1;</p><p>  lcd_display();//1602顯示初始化</p><p><b>  while(1)</b></p><p><b>  {</b><

101、;/p><p>  ds_temp();//從18B20中讀取溫度</p><p>  ds_dis();//1602顯示溫度</p><p>  T_baojing();</p><p>  key_cut();</p><p><b>  }</b></p><p><

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論