版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 學(xué)號(hào): *********</p><p> 基于AT89C51單片機(jī)的</p><p> 蔬菜大棚多點(diǎn)溫度測(cè)試</p><p> 學(xué)院名稱: 物理與信息工程學(xué)院 </p><p> 專業(yè)名稱: ************ </p><p> 年級(jí)班別: 20
2、11級(jí)1班 </p><p> 姓 名: ****** </p><p> 指導(dǎo)教師: ****** </p><p><b> 2015年04月</b></p><p><b> 摘要</b></p>&l
3、t;p> 通過運(yùn)用DS18B20數(shù)字溫度傳感器的測(cè)溫原理和特性,利用它獨(dú)特的單線總線接口方式,與AT89C51單片機(jī)相結(jié)合實(shí)現(xiàn)多點(diǎn)測(cè)溫。并給出了測(cè)溫系統(tǒng)中對(duì)DS18B20操作的C51編程實(shí)例。實(shí)現(xiàn)了系統(tǒng)接口簡單、精度高、抗干擾能力強(qiáng)、工作穩(wěn)定等特點(diǎn)。</p><p> 本文介紹基于AT89C51單片機(jī)、C語言和DS18B20傳感器的多點(diǎn)溫度測(cè)量系統(tǒng)設(shè)計(jì)及其在Proteus平臺(tái)下的仿真。利用51單片機(jī)的并
4、行口,同步快速讀取8支DS18B20溫度,實(shí)現(xiàn)了在多點(diǎn)溫度測(cè)量系統(tǒng)中對(duì)多個(gè)傳感器的快速精確識(shí)別和處理,并給出了具體的編程實(shí)例和仿真結(jié)果。</p><p> 關(guān)鍵詞 單片機(jī);DS18B2;Proteus仿真;C51編程</p><p><b> Abstract</b></p><p> With using the measuring p
5、rinciple and characteristics of the numerical temperature sensor of DS18B20,making use of special characteristics of single line as the total line, and combine together with AT89C51 to realize several points temperature
6、measuring. Also this paper gives the example of the C51 program which is used to operate to the DS18B20. Make system have characteristics of simple, high accuracy, strong anti- interference ability, stable work etc.</
7、p><p> This design introduced AT89C51 monolithic integrated circuit temperature control system design from the hardware and the software two aspects. A multipoint temperature measurement system based on DS18B2
8、0 and AT89C51 microcontroller is designed and simulated by Proteus in this paper, including software and hardware design of this system. The system has such advantages as novel circuit design, quick measurement speed, hi
9、gh measurement accuracy, and good practicality.</p><p> Key words MCU;DS18B20;Proteus simulation;C51 program</p><p><b> 目錄</b></p><p><b> 摘要II</b></p&
10、gt;<p> AbstractIII</p><p><b> 第一章緒論1</b></p><p> 1.1溫度智能測(cè)控系統(tǒng)的研究背景與現(xiàn)狀分析1</p><p> 1.2溫度智能測(cè)控系統(tǒng)的工作原理2</p><p> 第二章 方案論證3</p><p>&
11、lt;b> 2.1方案設(shè)計(jì)3</b></p><p> 2.1.1方案一3</p><p> 2.1.2方案二3</p><p><b> 2.2方案選擇4</b></p><p> 第三章 AT89C51單片機(jī)簡介5</p><p> 3.1單片機(jī)的發(fā)展
12、5</p><p> 3.2單片機(jī)定義及 AT89C51單片機(jī)5</p><p> 3.3單片機(jī)的基本結(jié)構(gòu)5</p><p> 第四章 DS18B20單線數(shù)字溫度計(jì)的原理8</p><p><b> 4.1 概述8</b></p><p><b> 4.2主要特性8&
13、lt;/b></p><p> 4.3工作原理及應(yīng)用9</p><p> 4.4單片機(jī)對(duì)DS18B20操作流程10</p><p> 4.5 DS18B20與單片機(jī)的接口11</p><p> 4.6 DS18B20芯片ROM指令表11</p><p> 4.7 DS18B20芯片存儲(chǔ)器操作指令
14、表12</p><p> 4.8 DS18B20復(fù)位及應(yīng)答關(guān)系及讀寫13</p><p> 4.9 工作時(shí)序圖13</p><p> 第五章 硬件設(shè)計(jì)17</p><p> 5.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)思路17</p><p> 5.2 系統(tǒng)框圖19</p><p> 5.3
15、系統(tǒng)硬件設(shè)計(jì)19</p><p> 第六章 系統(tǒng)軟件設(shè)計(jì)22</p><p> 6.1系統(tǒng)軟件設(shè)計(jì)思路22</p><p> 第七章 系統(tǒng)運(yùn)行結(jié)果29</p><p><b> 結(jié)束語35</b></p><p><b> 致謝36</b></p&
16、gt;<p><b> 參考文獻(xiàn)37</b></p><p> 附錄 溫度控制程序38</p><p><b> 緒論</b></p><p> 1.1蔬菜大棚溫度溫度測(cè)試的目的</p><p> 本設(shè)計(jì)的內(nèi)容是蔬菜大棚溫度測(cè)試控制系統(tǒng),控制對(duì)象是溫度。植物在生長發(fā)育的過
17、程中,溫度的高低,直接影響到花卉的生理活動(dòng),如酶的活性、光合作用、呼吸作用、蒸騰作用,這是在原產(chǎn)地已形成固有的特殊性能。因溫度周期的變化,可直接影響植物的生長,果實(shí)以及果實(shí)的數(shù)量大小等方面。生物正常的生命活動(dòng)一般是在相對(duì)狹窄的溫度范圍內(nèi)進(jìn)行,大致在零下幾度到50℃左右之間。溫度對(duì)生物的作用可分為最低溫度、最適溫度和最高溫度,即生物的三基點(diǎn)溫度。當(dāng)環(huán)境溫度在最低和最適溫度之間時(shí),生物體內(nèi)的生理生化反應(yīng)會(huì)隨著溫度的升高而加快,代謝活動(dòng)加強(qiáng),
18、從而加快生長發(fā)育速度;當(dāng)溫度高于最適溫度后,參與生理生化反應(yīng)的酶系統(tǒng)受到影響,代謝活動(dòng)受阻,勢(shì)必影響到生物正常的生長發(fā)育。當(dāng)環(huán)境溫度低于最低溫度或高于最高溫度,生物將受到嚴(yán)重危害,甚至死亡。 </p><p> 蔬菜大棚是開發(fā)日光資源、充分利用太陽光能的主要形式之一,能避光、增產(chǎn)、保濕,為蔬菜生長創(chuàng)造一個(gè)良好環(huán)境。蔬菜大棚作為一個(gè)相對(duì)封閉的環(huán)境,其內(nèi)部形成了一個(gè)小氣候環(huán)境,良好的空氣環(huán)境是蔬菜正常生長
19、的重要條件。為了增產(chǎn)、增收,要注意大棚內(nèi)部的氣體、溫度和濕度3個(gè)要因素。氣體主要是指棚內(nèi)的二氧化碳的含量。當(dāng)空氣中的二氧化碳濃度提高到0.1%時(shí),可使蔬菜光合作用速率增加1倍以上,增產(chǎn)20%~80%;若使二氧化碳濃度降至0.005%時(shí),光合作用幾乎停止。蔬菜生長的適宜溫度為20°~30℃。大棚內(nèi)白天增溫快,當(dāng)棚外平均氣溫為15℃時(shí),棚內(nèi)可達(dá)40℃~50℃。因此,要適時(shí)調(diào)節(jié)棚內(nèi)溫度,避免高溫危害。塑料大棚經(jīng)常處于密閉狀態(tài),蒸發(fā)量
20、大大減小,內(nèi)部濕度一般在80%~90%,濕度過大極易導(dǎo)致病蟲害的發(fā)生?,F(xiàn)在對(duì)大棚內(nèi)氣體、溫度和濕度的有效調(diào)節(jié),主要是通過適時(shí)的通風(fēng)來實(shí)現(xiàn)。二氧化碳含量過大和濕度過大都會(huì)導(dǎo)致溫度升高。 </p><p> 而以往溫度控制是由人工完成的而且不夠重視,其實(shí)在很多場所溫度都需要監(jiān)控以防止發(fā)生意外。針對(duì)此問題,本系統(tǒng)設(shè)計(jì)的目的是實(shí)現(xiàn)一種可連續(xù)高精度調(diào)溫的溫度控制系統(tǒng),它應(yīng)用廣泛,功能強(qiáng)大,小巧美觀,便于攜帶,是
21、一款既</p><p> 實(shí)用又廉價(jià)的控制系統(tǒng)。</p><p> 1.2溫度智能測(cè)控系統(tǒng)的工作原理</p><p> 課題采用由Dallas公司生產(chǎn)的智能數(shù)字溫度傳感器DS18B20和Atmel公司推出的單片機(jī)AT89C51以及相關(guān)外圍電路實(shí)現(xiàn)高精度、多點(diǎn)溫度測(cè)量系統(tǒng)。同時(shí)本設(shè)計(jì)在單片機(jī)系統(tǒng)設(shè)計(jì)主流EDA軟件Proteus環(huán)境下完成,能夠及時(shí)觀察效果和修改軟
22、硬件。</p><p> 本系統(tǒng)采用8片DS18B20構(gòu)成小型溫度傳感器網(wǎng)絡(luò),通過并行連接方式連接至單片機(jī)AT89C51的8個(gè)通用I/O端口。單片機(jī)獲得溫度信息后,通過特定的算法,將處理后的溫度信息通過LED顯示出來,同時(shí)通過串行口送上位機(jī)處理。每個(gè)端口只連接一個(gè)溫度傳感器件,也即一條一線制總線上僅有一個(gè)DS18B20。并在Keil環(huán)境下編輯應(yīng)用軟件程序,通過Proteus和Keil的聯(lián)合實(shí)現(xiàn)該多點(diǎn)溫度測(cè)量系統(tǒng)
23、的設(shè)計(jì)、調(diào)試和仿真。</p><p><b> 第二章 方案論證</b></p><p> 溫度測(cè)量的方案有很多種,可以采用傳統(tǒng)的分立式傳感器、模擬集成傳感器以及新興的智能型傳感器。對(duì)于控制系統(tǒng)可以采用計(jì)算機(jī)、單片機(jī)等。</p><p><b> 2.1方案設(shè)計(jì)</b></p><p><
24、;b> 2.1.1方案一</b></p><p> 測(cè)溫電路的設(shè)計(jì),可以使用熱敏電阻之類的器件利用其感溫效應(yīng),被測(cè)溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來,這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,電路設(shè)計(jì)比較麻煩。</p><p><b> 2.1.2方案二</b></p
25、><p> DS18B20一對(duì)一連接方案,就是一個(gè)I/O口連接一個(gè)DS18B20,這種方案雖然占用單片機(jī)的三個(gè)I/O口,但采用這種方案大大的簡化了編程難度,縮短了設(shè)計(jì)周期,同時(shí)也能保證系統(tǒng)的穩(wěn)定,方案二的框圖如圖2.1所示。</p><p><b> 圖2-1系統(tǒng)框圖</b></p><p><b> 2.2方案選擇</b&g
26、t;</p><p> 考慮使用DS18B20,結(jié)合單片機(jī)電路設(shè)計(jì),用八只DS18B20,直接讀取多點(diǎn)被測(cè)溫度值,之后進(jìn)行轉(zhuǎn)換,依次完成設(shè)計(jì)要求。 </p><p> 比較以上兩種方案,很容易看出,采用方案二,電路比較簡單,軟件設(shè)計(jì)容易實(shí)現(xiàn),故實(shí)際設(shè)計(jì)中擬采用方案二。</p><p> 第三章 AT89C51單片機(jī)簡介</p><
27、p><b> 3.1單片機(jī)的發(fā)展</b></p><p> 單片微型計(jì)算機(jī)自20世紀(jì)70年代問世以來,以對(duì)人類社會(huì)產(chǎn)生了巨大的影響。尤其是美國Intel公司生產(chǎn)的MCS-51系列單片機(jī),由于其具有集成度高、處理功能強(qiáng)、可靠性高、系統(tǒng)結(jié)構(gòu)簡單、價(jià)格低廉、易于使用等優(yōu)點(diǎn),在世界范圍內(nèi)已經(jīng)得到廣泛的普及和應(yīng)用。而且隨著以MCS-51單片機(jī)基本內(nèi)核為核心的各種擴(kuò)展型、增強(qiáng)型的新型單片機(jī)不斷
28、推出,MCS-51系列仍是我國單片機(jī)應(yīng)用領(lǐng)域的主流機(jī)型。目前在工業(yè)控制、智能儀器儀表、辦公室自動(dòng)化、家用電器等諸多領(lǐng)域,到處都可看見單片機(jī)的蹤影,單片機(jī)技術(shù)開發(fā)和應(yīng)用高水平已成為一個(gè)國家工業(yè)化水平的標(biāo)志之一。</p><p> 3.2單片機(jī)定義及 AT89C51單片機(jī)</p><p> 單片機(jī)(Microcontrollers)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處
29、理能力的中央處理器CPU、隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、多種I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器等功能(可能還包括顯示驅(qū)動(dòng)電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個(gè)小而完善的微型計(jì)算機(jī)系統(tǒng),在工業(yè)控制領(lǐng)域廣泛應(yīng)用。從上世紀(jì)80年代,由當(dāng)時(shí)的4位、8位單片機(jī),發(fā)展到現(xiàn)在的300M的高速單片機(jī)。</p><p> AT89C51是美國ATMEL公司生產(chǎn)的低電壓,高性能 C
30、MOS 8位單片機(jī),片內(nèi)含4K bytes的可反復(fù)擦寫的只讀程序存儲(chǔ)器(PEROM)和128 bytes 的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和 Flash 存儲(chǔ)單元。功能強(qiáng)大AT89C51單片機(jī)可提供高性價(jià)比的應(yīng)用場合,可靈活運(yùn)用與各種控制領(lǐng)域。</p><p> 3.3單片機(jī)的基本結(jié)構(gòu)</p&g
31、t;<p> 微處理器(CPU)MCS-51單片機(jī)中有1個(gè)8位的CPU,包括運(yùn)算器和控制器兩大部分,不僅可處理字節(jié)數(shù)據(jù),還可以進(jìn)行位變量的處理。例如:位處理、查表、狀態(tài)檢測(cè)、中斷處理等。</p><p> 內(nèi)部數(shù)據(jù)存儲(chǔ)器(RAM)單片機(jī)芯片共有256個(gè)RAM單元,其中后128單元被專用寄存器占用,能作為寄存器供用戶使用的只是前128單元,用于存放可讀寫的數(shù)據(jù)。因此通常所說的內(nèi)部數(shù)據(jù)存儲(chǔ)器就是指前
32、128單元,簡稱內(nèi)部RAM。地址范圍為00H~FFH(256B)。片外最多可外擴(kuò)64KB。RAM是一個(gè)多用多功能數(shù)據(jù)存儲(chǔ)器,有數(shù)據(jù)存儲(chǔ)、通用工作寄存器、堆棧、位地址等空間。</p><p> 內(nèi)部程序存儲(chǔ)器(ROM)</p><p> 單片機(jī)內(nèi)部有4KB的ROM,用于存放程序、原始數(shù)據(jù)或表格。因此稱之為程序存儲(chǔ)器,簡稱內(nèi)部RAM。地址范圍為0000H~FFFFH(64KB)。片外最多可
33、外擴(kuò)64KB。</p><p><b> 定時(shí)器/計(jì)數(shù)器</b></p><p> 單片機(jī)共有2個(gè)16位的定時(shí)器/計(jì)數(shù)器,具有4種工作方式,以實(shí)現(xiàn)定時(shí)或計(jì)數(shù)功能,并以其定時(shí)或計(jì)數(shù)結(jié)果對(duì)計(jì)算機(jī)進(jìn)行控制。定時(shí)時(shí)靠內(nèi)部分頻時(shí)鐘頻率計(jì)數(shù)實(shí)現(xiàn),做計(jì)數(shù)器時(shí),對(duì)P3.4(T0)或P3.5(T1)端口的低電平脈沖計(jì)數(shù)。</p><p><b>
34、 并行I/O口</b></p><p> MCS-51單片機(jī)共有4個(gè)8位的I/O口(P0、P1、P2、P3)以實(shí)現(xiàn)數(shù)據(jù)的輸入輸出。</p><p><b> 串行口</b></p><p> MCS-51單片機(jī)有一個(gè)全雙工的串行口,具有4種工作方式,以實(shí)現(xiàn)單片機(jī)和其它設(shè)備之間的串行數(shù)據(jù)傳送。該串行口功能較強(qiáng),既可作為全雙工
35、異步通信</p><p> 收發(fā)器使用,也可作為移位器使用。RXD( P3.0)腳為接收端口,TXD(P3.1)腳為發(fā)送端口。</p><p><b> 中斷控制系統(tǒng)</b></p><p> MCS-51單片機(jī)的中斷功能較強(qiáng),以滿足不同控制應(yīng)用的需要。共有5個(gè)中斷源,即外中斷2個(gè),定時(shí)中斷2個(gè),串行中斷1個(gè),全部中斷分為高級(jí)和低級(jí)共二個(gè)
36、優(yōu)先級(jí)別。</p><p><b> 時(shí)鐘電路</b></p><p> MCS-51單片機(jī)芯片的內(nèi)部有時(shí)鐘電路,但石英晶體和微調(diào)電容需外接。時(shí)鐘電路為單片機(jī)產(chǎn)生時(shí)鐘脈沖序列。系統(tǒng)允許的晶振頻率為12MHZ等。</p><p> 特殊功能寄存器(SFR)</p><p> 特殊功能寄存器共有21個(gè),用于CPU對(duì)片
37、內(nèi)各功能部件進(jìn)行管理、控制、監(jiān)視。實(shí)際上是片內(nèi)各功能部件的控制寄存器和狀態(tài)寄存器,是一個(gè)具有特殊功能的RAM區(qū)。</p><p> 綜觀單片機(jī)幾十年的發(fā)展歷程,單片機(jī)今后將向多功能、高性能、高速度、低電壓、低功耗、低價(jià)格、外圍電路內(nèi)裝化以及片內(nèi)存儲(chǔ)器容量增加和Flash存儲(chǔ)器化方向發(fā)展??梢灶A(yù)言,今后的單片機(jī)將是功能更強(qiáng)、集成的和可靠性更高而功耗更低,以及使用更方便。此外,專用化也是單片機(jī)的一個(gè)發(fā)展方向,針對(duì)單
38、一用途的專用單片機(jī)將會(huì)越來越多。</p><p> 第四章 DS18B20單線數(shù)字溫度計(jì)的原理</p><p><b> 4.1 概述</b></p><p> 溫度傳感器的種類眾多,在應(yīng)用與高精度、高可靠性的場合時(shí)DALLAS(達(dá)拉斯)公司生產(chǎn)的DS18B20溫度傳感器[2]當(dāng)仁不讓。超小的體積,超低的硬件開消,抗干擾能力強(qiáng),精度高,附
39、加功能強(qiáng),使得DS18B20更受歡迎。對(duì)于我們普通的電子愛好者來說,DS18B20的優(yōu)勢(shì)更是我們學(xué)習(xí)單片機(jī)技術(shù)和開發(fā)溫度相關(guān)的小產(chǎn)品的不二選擇。了解其工作原理和應(yīng)用可以拓寬您對(duì)單片機(jī)開發(fā)的思路。DS18B20器件具體的封裝形式與管腳說明如圖3-1所示</p><p> 圖4-1 DS18B20封裝形式與管腳說明</p><p><b> 4.2主要特性</b>&l
40、t;/p><p> 獨(dú)特的單線接口僅需一個(gè)端口引腳進(jìn)行通訊</p><p><b> 簡單的多點(diǎn)分布應(yīng)用</b></p><p> 64位光刻ROM,內(nèi)置產(chǎn)品序列號(hào),方便多機(jī)掛接</p><p><b> 可通過數(shù)據(jù)線供電</b></p><p><b> 零
41、待機(jī)功耗</b></p><p> 測(cè)溫范圍-55~+125℃,以0.5℃遞增。華氏器件-67~+2570F,以0.90F 遞增</p><p> 溫度以9 位數(shù)字量讀出</p><p> 溫度數(shù)字量轉(zhuǎn)換時(shí)間200ms(典型值)</p><p> 用戶可定義的非易失性溫度報(bào)警設(shè)置</p><p>
42、 內(nèi)置EEPROM,報(bào)警搜索命令識(shí)別并標(biāo)志超過程序限定溫度(溫度報(bào)警條</p><p><b> 件)的器件</b></p><p> 應(yīng)用包括溫度控制、工業(yè)系統(tǒng)、消費(fèi)品、溫度計(jì)或任何熱感測(cè)系統(tǒng)</p><p> 4.3工作原理及應(yīng)用</p><p> DS18B20的溫度檢測(cè)與數(shù)字?jǐn)?shù)據(jù)輸出全集成于一個(gè)芯片之上,
43、從而抗干擾力更強(qiáng)。其一個(gè)工作周期可分為兩個(gè)部分,即溫度檢測(cè)和數(shù)據(jù)處理。在講解其工作流程之前我們有必要了解18B20的內(nèi)部存儲(chǔ)器資源。18B20共有三種形態(tài)的存儲(chǔ)器資源,它們分別是:ROM 只讀存儲(chǔ)器,用于存放DS18B20ID編碼,其前8位是單線系列編碼(DS18B20的編碼是19H),后面48位是芯片唯一的序列號(hào),最后8位是以上56的位的CRC碼(冗余校驗(yàn))。數(shù)據(jù)在出產(chǎn)時(shí)設(shè)置不由用戶更改。DS18B20共64位ROM。RAM 數(shù)據(jù)暫存
44、器,用于內(nèi)部計(jì)算和數(shù)據(jù)存取,數(shù)據(jù)在掉電后丟失,DS18B20共9個(gè)字節(jié)RAM,每個(gè)字節(jié)為8位。第1、2個(gè)字節(jié)是溫度轉(zhuǎn)換后的數(shù)據(jù)值信息,第3、4個(gè)字節(jié)是用戶EEPROM(常用于溫度報(bào)警值儲(chǔ)存)的鏡像。在上電復(fù)位時(shí)其值將被刷新。第5個(gè)字節(jié)則是用戶第3個(gè)EEPROM的鏡像。第6、7、8個(gè)字節(jié)為計(jì)數(shù)寄存器,是為了讓用戶得到更高的溫度分辨率而設(shè)計(jì)的,同樣也是內(nèi)部溫度轉(zhuǎn)換、計(jì)算的暫存單元。第9個(gè)字節(jié)為前8個(gè)字節(jié)的CRC碼。EEPROM 非易失性記憶
45、體,用于存放長期需要保存的數(shù)據(jù),上下限溫度報(bào)警值和校驗(yàn)數(shù)據(jù),</p><p> 我們?cè)诿恳淮巫x溫度之前都必須進(jìn)行復(fù)雜的且精準(zhǔn)時(shí)序的處理,因?yàn)镈S18B20的硬件簡單結(jié)果就會(huì)導(dǎo)致軟件的巨大開消,也是盡力減少有形資產(chǎn)轉(zhuǎn)化為無形資產(chǎn)的投入,是一種較好的節(jié)約之道。</p><p> 4.4單片機(jī)對(duì)DS18B20操作流程</p><p> 復(fù)位:首先我們必須對(duì)DS18B
46、20芯片進(jìn)行復(fù)位,復(fù)位就是由控制器(單片機(jī))給DS18B20單總線至少480uS的低電平信號(hào)。當(dāng)18B20接到此復(fù)位信號(hào)后則會(huì)在15~60uS后回發(fā)一個(gè)芯片的存在脈沖。</p><p> 存在脈沖:在復(fù)位電平結(jié)束之后,控制器應(yīng)該將數(shù)據(jù)單總線拉高,以便于在15~60uS后接收存在脈沖,存在脈沖為一個(gè)60~240uS的低電平信號(hào)。至此,通信雙方已經(jīng)達(dá)成了基本的協(xié)議,接下來將會(huì)是控制器與18B20間的數(shù)據(jù)通信。如果復(fù)
47、位低電平的時(shí)間不足或是單總線的電路斷路都不會(huì)接到存在脈沖,在設(shè)計(jì)時(shí)要注意意外情況的處理。</p><p> 控制器發(fā)送ROM指令:雙方打完了招呼之后最要將進(jìn)行交流了,ROM指令共有條,每一個(gè)工作周期只能發(fā)一條,ROM指令分別是讀ROM數(shù)據(jù)、指定匹配芯片、跳躍ROM、芯片搜索、報(bào)警芯片搜索。ROM指令為8位長度,功能是對(duì)片內(nèi)的64位光刻ROM進(jìn)行操作。其主要目的是為了分辨一條總線上掛接的多個(gè)器件并作處理。誠然,單
48、總線上可以同時(shí)掛接多個(gè)器件,并通過每個(gè)器件上所獨(dú)有的ID號(hào)來區(qū)別,一般只掛接單個(gè)18B20芯片時(shí)可以跳過ROM指令(注意:此處指的跳過ROM指令并非不發(fā)送ROM指令,而是用特有的一條“跳過指令”)。</p><p> 控制器發(fā)送存儲(chǔ)器操作指令:在ROM指令發(fā)送給18B20之后,緊接著(不間斷)就是發(fā)送存儲(chǔ)器操作指令了。操作指令同樣為8位,共6條,存儲(chǔ)器操作指令分別是寫RAM數(shù)據(jù)、讀RAM數(shù)據(jù)、將RAM數(shù)據(jù)復(fù)制到
49、EEPROM、溫度轉(zhuǎn)換、將EEPROM中的報(bào)警值復(fù)制到RAM、工作方式切換。存儲(chǔ)器操作指令的功能是命令18B20作什么樣的工作,是芯片控制的關(guān)鍵。</p><p> 執(zhí)行或數(shù)據(jù)讀寫:一個(gè)存儲(chǔ)器操作指令結(jié)束后則將進(jìn)行指令執(zhí)行或數(shù)據(jù)的讀寫,這個(gè)操作要視存儲(chǔ)器操作指令而定。如執(zhí)行溫度轉(zhuǎn)換指令則控制器(單</p><p> 片機(jī))必須等待18B20執(zhí)行其指令,一般轉(zhuǎn)換時(shí)間為500uS。如執(zhí)行數(shù)
50、據(jù)讀寫指令則需要嚴(yán)格遵循18B20的讀寫時(shí)序來操作。</p><p> 單支DS18B20若要讀出當(dāng)前的溫度數(shù)據(jù)我們需要執(zhí)行兩次工作周期,第一個(gè)周期為:復(fù)位、跳過ROM指令[CCH]、執(zhí)行溫度轉(zhuǎn)換存儲(chǔ)器操作指令[44H]、等待500uS溫度轉(zhuǎn)換時(shí)間。緊接著執(zhí)行第二個(gè)周期為:復(fù)位、跳過ROM指令[CCH]、執(zhí)行讀RAM的存儲(chǔ)器操作指令[BEH]、讀數(shù)據(jù)(最多為9個(gè)字節(jié),中途可停止,只讀簡單溫度值則讀前2個(gè)字節(jié)即可
51、)。</p><p> 4.5 DS18B20與單片機(jī)的接口</p><p> DS18B20只需要接到控制器(單片機(jī))的一個(gè)I/O口上,由于單總線為開漏所以需要外接一個(gè)4.7K的上拉電阻。如要采用寄生工作方式,只要將VDD電源引腳與單總線并聯(lián)即可。但在程序設(shè)計(jì)中,寄生工作方式將會(huì)對(duì)總線的狀態(tài)有一些特殊的要求。</p><p> 4.6 DS18B20芯片RO
52、M指令表</p><p> Read ROM(讀ROM)[33H] (方括號(hào)中的為16進(jìn)制的命令字)</p><p> 這個(gè)命令允許總線控制器讀到DS18B20的64位ROM。只有當(dāng)總線上只存在</p><p> 一個(gè)DS18B20的時(shí)候才可以使用此指令,如果掛接不止一個(gè),當(dāng)通信時(shí)將會(huì)發(fā)生數(shù)據(jù)沖突。</p><p> Match RO
53、M(指定匹配芯片)[55H]</p><p> 這個(gè)指令后面緊跟著由控制器發(fā)出了64位序列號(hào),當(dāng)總線上有多只DS18B20時(shí),只有與控制發(fā)出的序列號(hào)相同的芯片才可以做出反應(yīng),其它芯片將等待下一次復(fù)位。這條指令適應(yīng)單芯片和多芯片掛接。</p><p> Skip ROM(跳躍ROM指令)[CCH]</p><p> 這條指令使芯片不對(duì)ROM編碼做出反應(yīng),在單芯片
54、的情況之下,為了節(jié)省時(shí)間則可以選用此指令。如果在多芯片掛接時(shí)使用此指令將會(huì)出現(xiàn)數(shù)據(jù)沖突,導(dǎo)致錯(cuò)誤出現(xiàn)。</p><p> Search ROM(搜索芯片)[F0H]</p><p> 在芯片初始化后,搜索指令允許總線上掛接多芯片時(shí)用排除法識(shí)別所有器件</p><p><b> 的64位ROM。</b></p><p&g
55、t; Alarm Search(報(bào)警芯片搜索)[ECH]</p><p> 在多芯片掛接的情況下,報(bào)警芯片搜索指令只對(duì)符合溫度高于TH或小于TL報(bào)警條件的芯片做出反應(yīng)。只要芯片不掉電,報(bào)警狀態(tài)將被保持,直到再一次測(cè)得溫度達(dá)不到報(bào)警條件為止。</p><p> 4.7 DS18B20芯片存儲(chǔ)器操作指令表</p><p> Write Scratchpad (向
56、RAM中寫數(shù)據(jù))[4EH]</p><p> 這是向RAM中寫入數(shù)據(jù)的指令,隨后寫入的兩個(gè)字節(jié)的數(shù)據(jù)將會(huì)被存到地址2(報(bào)警RAM之TH)和地址3(報(bào)警RAM之TL)。寫入過程中可以用復(fù)位信號(hào)中止寫入。</p><p> Read Scratchpad (從RAM中讀數(shù)據(jù))[BEH]</p><p> 此指令將從RAM中讀數(shù)據(jù),讀地址從地址0開始,一直可以讀到地
57、址9,完成整個(gè)RAM數(shù)據(jù)的讀出。芯片允許在讀過程中用復(fù)位信號(hào)中止讀取,即可以不讀后面不需要的字節(jié)以減少讀取時(shí)間。</p><p> Copy Scratchpad (將RAM數(shù)據(jù)復(fù)制到EEPROM中)[48H]</p><p> 此指令將RAM中的數(shù)據(jù)存入EEPROM中,以使數(shù)據(jù)掉電不丟失。此后由于芯片忙于EEPROM儲(chǔ)存處理,當(dāng)控制器發(fā)一個(gè)讀時(shí)間隙時(shí),總線上輸出“0”,當(dāng)儲(chǔ)存工作完成
58、時(shí),總線將輸出“1”。在寄生工作方式時(shí)必須在發(fā)出此指令后立刻</p><p> 超用強(qiáng)上拉并至少保持10MS,來維持芯片工作。</p><p> Convert T(溫度轉(zhuǎn)換)[44H]</p><p> 收到此指令后芯片將進(jìn)行一次溫度轉(zhuǎn)換,將轉(zhuǎn)換的溫度值放入RAM的第1、2地址。此后由于芯片忙于溫度轉(zhuǎn)換處理,當(dāng)控制器發(fā)一個(gè)讀時(shí)間隙時(shí),總線上輸出“0”,當(dāng)儲(chǔ)存
59、工作完成時(shí),總線將輸出“1”。在寄生工作方式時(shí)必須在發(fā)出此指令后立刻超用強(qiáng)上拉并至少保持500MS,來維持芯片工作。</p><p> Recall EEPROM(將EEPROM中的報(bào)警值復(fù)制到RAM)[B8H]</p><p> 此指令將EEPROM中的報(bào)警值復(fù)制到RAM中的第3、4個(gè)字節(jié)里。由于芯片忙于復(fù)制處理,當(dāng)控制器發(fā)一個(gè)讀時(shí)間隙時(shí),總線上輸出“0”,當(dāng)儲(chǔ)存工作完成</p
60、><p> 時(shí),總線將輸出“1”。另外,此指令將在芯片上電復(fù)位時(shí)將被自動(dòng)執(zhí)行。這樣RAM中的兩個(gè)報(bào)警字節(jié)位將始終為EEPROM中數(shù)據(jù)的鏡像。</p><p> Read Power Supply(工作方式切換)[B4H]</p><p> 此指令發(fā)出后發(fā)出讀時(shí)間隙,芯片會(huì)返回它的電源狀態(tài)字,“0”為寄生電源狀態(tài),“1”為外部電源狀態(tài)。</p><
61、;p> 4.8 DS18B20復(fù)位及應(yīng)答關(guān)系及讀寫</p><p> 每一次通信之前必須進(jìn)行復(fù)位,復(fù)位的時(shí)間、等待時(shí)間、回應(yīng)時(shí)間應(yīng)嚴(yán)格按時(shí)序編程。</p><p> DS18B20的數(shù)據(jù)讀寫是通過時(shí)間隙處理位和命令字來確認(rèn)信息交換的。</p><p><b> 寫時(shí)間隙:</b></p><p> 寫時(shí)間
62、隙分為寫“0”和寫“1”,時(shí)序如圖7。在寫數(shù)據(jù)時(shí)間隙的前15uS總線需要是被控制器拉置低電平,而后則將是芯片對(duì)總線數(shù)據(jù)的采樣時(shí)間,采樣時(shí)間在15~60uS,采樣時(shí)間內(nèi)如果控制器將總線拉高則表示寫“1”,如果控制器將總線拉低則表示寫“0”。每一位的發(fā)送都應(yīng)該有一個(gè)至少15uS的低電平起始位,隨后的數(shù)據(jù)“0”或“1”應(yīng)該在45uS內(nèi)完成。整個(gè)位的發(fā)送時(shí)間應(yīng)該保持在60~120uS,否則不能保證通信的正常。</p><p&
63、gt;<b> 讀時(shí)間隙:</b></p><p> 讀時(shí)間隙時(shí)控制時(shí)的采樣時(shí)間應(yīng)該更加的精確才行,讀時(shí)間隙時(shí)也是必須先由主機(jī)產(chǎn)生至少1uS的低電平,表示讀時(shí)間的起始。隨后在總線被釋放后的15uS中DS18B20會(huì)發(fā)送內(nèi)部數(shù)據(jù)位,這時(shí)控制如果發(fā)現(xiàn)總線為高電平表示讀出“1”,如果總線為低電平則表示讀出數(shù)據(jù)“0”。每一位的讀取之前都由控制器加一個(gè)</p><p>
64、起始信號(hào)。注意:必須在讀間隙開始的15uS內(nèi)讀取數(shù)據(jù)位才可以保證通信的正確。</p><p> 在通信時(shí)是以8位“0”或“1”為一個(gè)字節(jié),字節(jié)的讀或?qū)懯菑母呶婚_始的,即A7到A0.字節(jié)的讀寫順序也是自上而下的。</p><p><b> 4.9 工作時(shí)序圖</b></p><p> 初始化時(shí)序如圖3-2</p><p&
65、gt; 圖4-2初始化時(shí)序圖</p><p> 先將數(shù)據(jù)線置高電平1。</p><p> 延時(shí)(該時(shí)間要求不是很嚴(yán)格,但是要盡可能短一點(diǎn))。</p><p> 數(shù)據(jù)線拉到低電平0。</p><p> 延時(shí)750us(該時(shí)間范圍可以在480us~960us)。</p><p> 數(shù)據(jù)線拉到高電平1。</
66、p><p> 延時(shí)等待。如果初始化成功則在15~60us內(nèi)產(chǎn)生一個(gè)有DS18B20返回的低電平0,據(jù)該狀態(tài)可以確定它的存在。但是應(yīng)注意,不能無限地等待,不然會(huì)使程序進(jìn)入死循環(huán),所以要進(jìn)行超時(shí)判斷。</p><p> 若CPU讀到數(shù)據(jù)線上的低電平0后,還要進(jìn)行延時(shí),其延時(shí)的時(shí)間從發(fā)出高電平算起(第5)步的時(shí)間算起)最少要480us。</p><p> 將數(shù)據(jù)線再次拉
67、到高電平1后結(jié)束。</p><p> ?、?DS18B20寫數(shù)據(jù)時(shí)序圖如圖4-3</p><p> 圖4-3DS18B20寫數(shù)據(jù)時(shí)序圖</p><p> 延時(shí)確定的時(shí)間為15us。</p><p> 按從低位到高位的順序發(fā)送數(shù)據(jù)(一次只發(fā)送一位)。</p><p> 延時(shí)時(shí)間為45us。</p>
68、<p> 將數(shù)據(jù)線拉高到高電平1。</p><p> 重復(fù)1)~5)步驟,直到發(fā)送完整個(gè)字節(jié)。</p><p> 最后將數(shù)據(jù)線拉高到1。</p><p> ③ DS18B20讀數(shù)據(jù)時(shí)序圖如圖4-4</p><p> 圖4-4DS18B20讀數(shù)據(jù)時(shí)序圖</p><p><b> 將數(shù)據(jù)線拉
69、高到1。</b></p><p><b> 延時(shí)2us。</b></p><p><b> 將數(shù)據(jù)線拉低到0。</b></p><p><b> 延時(shí)6us。</b></p><p><b> 將數(shù)據(jù)線拉高到1。</b></p&g
70、t;<p><b> 延時(shí)4us。</b></p><p> 讀數(shù)據(jù)線的狀態(tài)位,并進(jìn)行數(shù)據(jù)處理。</p><p><b> 延時(shí)30us。</b></p><p> 重復(fù)1)~7)步驟,直到讀取完一個(gè)字節(jié)。</p><p><b> 第五章 硬件設(shè)計(jì)</b&
71、gt;</p><p> 5.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)思路</p><p> 當(dāng)一線制總線上僅有一個(gè)DS18B20器件時(shí),可以用skip ROM操作(即跳過ROM匹配)命令來代替64位序列號(hào)的匹配過程,這點(diǎn)也是使用單個(gè)DS18B20器件的系統(tǒng)常用的方法。所以,要想節(jié)省掉64位序列號(hào)匹配的時(shí)間開銷,就必需設(shè)計(jì)成一個(gè)一線制總線上僅有一個(gè)DS18B20器件的系統(tǒng)。</p><p&
72、gt; DS18B20的一線制總線在時(shí)序上的嚴(yán)格要求,也從另一方面意味著在一定的彈性范圍內(nèi),不同DS18B20器件的時(shí)序細(xì)節(jié)上的一致性應(yīng)該是非常好,所以可以將系統(tǒng)設(shè)計(jì)成利用MCU的并行端口同時(shí)對(duì)多個(gè)DS18B20進(jìn)行統(tǒng)一的操作,不過這時(shí)候并行端口上的每一個(gè)端口連接著一個(gè)DS18B20器件而已。</p><p> 本文所述的解決方案正是以端口的消耗為代價(jià),換取對(duì)多點(diǎn)DS18B20溫度查詢的速度,并在程序結(jié)構(gòu)的設(shè)
73、計(jì)上采用一些巧妙的處理方法,使得系統(tǒng)對(duì)DS18B20的操作上花更少的時(shí)間。此外,采用本設(shè)計(jì)實(shí)現(xiàn)的快速多點(diǎn)溫度查詢系統(tǒng),可以省掉煩瑣的總線上器件序列號(hào)的查詢操作,并可節(jié)省大量的存儲(chǔ)空間(原用于存儲(chǔ)總線上器件的序列號(hào)所用的空間)。</p><p> 從理論上分析,本設(shè)計(jì)方案的采用,查詢多個(gè)DS18B20器件操作所消耗的時(shí)間與查詢一個(gè)DS18B20器件操作所消耗的時(shí)間是等量的。</p><p>
74、; 本系統(tǒng)方案8個(gè)DS18B20器件連接在MCU的一組端口的8個(gè)I/O口上,連線示意圖4-1所示:</p><p> 圖5-1 單片機(jī)與DS18B20連線示意圖</p><p> 當(dāng)然,上圖中的示意圖并沒有考慮諸如端口驅(qū)動(dòng)能力、抗干擾處理等,僅表明一個(gè)邏輯的連接示意,具體在產(chǎn)品級(jí)的設(shè)計(jì)時(shí)會(huì)根據(jù)產(chǎn)品的應(yīng)用做必要的處理,比如增加一些必要的電路等,此處不作為討論的重點(diǎn)。</p>
75、<p> 從上圖可見,每個(gè)端口連接有一個(gè)DS18B20器件,也即一條一線制總線上僅有一個(gè)DS18B20器件,符合了前面所述的解決方法。實(shí)際在對(duì)DS18B20器件進(jìn)行操作時(shí),只需統(tǒng)一地對(duì)這一組并行端口進(jìn)行操作(每個(gè)端口在同一時(shí)間輸出相同的電平狀態(tài))即可。</p><p> 一個(gè)端口對(duì)應(yīng)一個(gè)DS18B20器件,也就表示每組端口的某一個(gè)位的讀回?cái)?shù)據(jù)狀態(tài)也就是該端口所對(duì)應(yīng)的器件的輸出狀態(tài),所以,這樣的系
76、統(tǒng)里面是不需要進(jìn)行每個(gè)器件的序列號(hào)搜索、匹配的操作的。可知,在對(duì)DS18B20器件進(jìn)行操作時(shí),</p><p> 可以使用skip ROM命令來跳過ROM序列號(hào)匹配的操作,也即在所有的DS18B20器件的ROM操作時(shí)可以使用相同的端口輸出時(shí)序。</p><p><b> 5.2 系統(tǒng)框圖</b></p><p><b> 圖5-
77、2</b></p><p><b> 系統(tǒng)框圖簡介:</b></p><p> 系統(tǒng)的核心是AT89C51單片機(jī),系統(tǒng)通過控制選擇某一個(gè)DS18B20,并把</p><p> 其檢測(cè)到的溫度數(shù)據(jù)送到單片機(jī)進(jìn)行處理,在把處理后的溫度送到數(shù)碼管顯示,</p><p> 并顯示是那個(gè)點(diǎn)的溫度,系統(tǒng)也可以多點(diǎn)
78、溫度循環(huán)掃描顯示。</p><p> 5.3 系統(tǒng)硬件設(shè)計(jì)</p><p><b> 模塊介紹</b></p><p> 圖5-3 為單片機(jī)AT89C51仿真模塊圖</p><p><b> 圖5-3仿真模塊圖</b></p><p> 圖5-4 為四位數(shù)碼管的仿真
79、模塊圖</p><p> 圖5-4四位數(shù)碼管的仿真模塊圖</p><p> 圖5-5 為數(shù)字溫度傳感器DS18B20的仿真模塊圖</p><p> 圖5-5數(shù)字溫度傳感器DS18B20的仿真模塊圖</p><p> 在 Keil,Proteus環(huán)境下設(shè)計(jì)多點(diǎn)測(cè)溫系統(tǒng)硬軟件,進(jìn)行驗(yàn)證,硬件電路圖5-6如下</p><
80、p><b> 圖5-6硬件電路圖</b></p><p> 第六章 系統(tǒng)軟件設(shè)計(jì)</p><p> 6.1系統(tǒng)軟件設(shè)計(jì)思路</p><p> 軟件設(shè)計(jì)從最底層的與DS18B20時(shí)序相關(guān)的驅(qū)動(dòng),到與一線制總線器件處理過程控制/協(xié)議的接口函數(shù),再上升到應(yīng)用API接口函數(shù)的關(guān)系如下圖5-1所示:</p><p>
81、 圖6-1API接口函數(shù)</p><p> 在對(duì)連在一組8位端口上的8個(gè)DS18B20操作時(shí),是同時(shí)對(duì)該組端口進(jìn)行操作,也即同時(shí)對(duì)8個(gè)DS18B20器件進(jìn)行同步的操作。</p><p> 下面詳細(xì)介紹一下以MCS51系列單片機(jī)的應(yīng)用為例的范例程序,其中約定與8個(gè)DS18B20器件進(jìn)行連接的是P1端口。</p><p> 底層時(shí)序驅(qū)動(dòng)[8]程序與DS18B20
82、的一線制總線的協(xié)議保持一致,根據(jù)一線制</p><p> 總線時(shí)序的特點(diǎn),設(shè)計(jì)了四個(gè)基本的函數(shù):</p><p> 總線寫1時(shí)序控制函數(shù):</p><p> void DS18B20_Write_1(void) </p><p><b> {</b></p><p> P1 = 0x00
83、; //8個(gè)DQ 線全部設(shè)置為低電平 </p><p> Delay_1us(10); //延時(shí)10us左右 </p><p> P1 = 0xff; //8個(gè)DQ線全部輸出高電平 </
84、p><p> Delay_1us(30); //延時(shí)30us左右 </p><p><b> } </b></p><p> 總線寫0時(shí)序控制函數(shù): </p><p> void DS18B20_Write_0(void)</p><p&
85、gt;<b> { </b></p><p> P1 = 0x00; //8個(gè)DQ 線全部設(shè)置為低電平 </p><p> Delay_1us(40); //延時(shí) </p><p> P1 =
86、 0xff; //端口恢復(fù)高電平</p><p> Delay_1us(1); } </p><p> 總線讀取一個(gè)數(shù)據(jù)位時(shí)序控制函數(shù): </p><p> unsigned char DS18B20_ReadDQ(void)</p><p><
87、b> { </b></p><p> unsigned char DQ_S=0;</p><p> P1 = 0x00; //8個(gè)DQ 線全部設(shè)置為低電平 </p><p> Delay_1us(10); </p><p> P1 = 0xf
88、f; //端口置1,準(zhǔn)備讀取 </p><p> Delay_1us(1); //延時(shí)待總線準(zhǔn)備好數(shù)據(jù) </p><p> DQ_S = P1; //
89、一次性讀取8條DQ線的數(shù)據(jù)狀態(tài) </p><p> P1 = 0xff; //恢復(fù)端口電平 </p><p> Delay_1us(30); //延時(shí) </p><p> retu
90、rn DQ_S; //返回讀取的值 </p><p><b> } </b></p><p> 在讀取一個(gè)總線狀態(tài)數(shù)據(jù)位的函數(shù)中,將會(huì)返回一個(gè)byte的數(shù)據(jù),該數(shù)據(jù)的8個(gè)位正好與連接在P2端口上的8個(gè)I/O口對(duì)應(yīng),如下圖5-2所示:</p><p><b>
91、 圖6-2</b></p><p> 總線復(fù)位時(shí)序控制函數(shù): </p><p> void DS18B20_Reset(void) </p><p><b> { </b></p><p> unsigned char Error_Counter=0; </p><p>
92、 P1 = 0x00; //8個(gè)DQ 線全部設(shè)置為低電平 </p><p> Delay_1us(500); //保持總線低電平500us </p><p> P1 = 0xff; </p><p> Delay_
93、1us(100); </p><p> if(P1!=0x00) B20_Error = P1;//如檢測(cè)到DS18B20總線響應(yīng)了回復(fù)信號(hào),則讀取當(dāng)前8條 //總線的狀態(tài) </p><p> Delay_1us(50); </p><p> P1=0xff; </p><p> for(
94、Error_Counter=0;Error_Counter<200;Error_Counter++) </p><p><b> { </b></p><p> if((P1&(~B20_Error))==(~B20_Error)) break; </p><p> Delay_1us(1); &
95、lt;/p><p><b> } </b></p><p> P1 = 0xff; //恢復(fù)端口電平 </p><p> Delay_1us(200); //延時(shí) 200us </p><p
96、><b> }</b></p><p> 在復(fù)位時(shí)序控制的函數(shù)中,使用了B20_Error全局變量,它將會(huì)傳遞給上一層的數(shù)據(jù)處理函數(shù)作為判斷當(dāng)前8個(gè)I/O口所接的DS18B20是否正常工作,或者是否在各自的總線上。</p><p> 分析DS18B20的一線制總線控制命令,可以提煉出兩個(gè)最基本的操作函數(shù),一個(gè)是寫一個(gè)byte數(shù)據(jù)至DS18B20器件,另一為
97、讀取DS18B20器件的數(shù)據(jù)。而在本文的范例程序當(dāng)中,僅僅為了提取DS18B20器件的轉(zhuǎn)換完后的溫度值,所以在讀取DS18B20的數(shù)據(jù)時(shí),僅讀取存放在數(shù)據(jù)地址前兩個(gè)字節(jié)的溫度數(shù)據(jù),而不讀取其它字節(jié)的數(shù)據(jù),包括CRC校驗(yàn)值也沒有進(jìn)行讀取。</p><p><b> 寫字節(jié)操作函數(shù):</b></p><p> void DS18B20_WriteByte(unsign
98、ed char Com)</p><p> { </p><p> unsigned char I;</p><p> for(i=0;i<8;i++) </p><p><b> { </b&g
99、t;</p><p> if(Com&0x01) </p><p> DS18B20_Write_1(); </p><p><b> else </b></p><p> DS18B20_Write_0(); &
100、lt;/p><p> Com = Com>>1; </p><p><b> } </b></p><p><b> }</b></p><p> 調(diào)用DS18B20_WriteByte函數(shù),連在8個(gè)I/O口上的一線制總線上的8個(gè)DS18B20器件,將都會(huì)
101、接收到同樣的一個(gè)字節(jié)的數(shù)據(jù):</p><p><b> 讀數(shù)據(jù)操作函數(shù):</b></p><p> unsigned char Read_buf_8ch[16]; //buffer of Read DS18B20 </p><p> void DS18B20_Read2Byte(void) </p
102、><p><b> { </b></p><p> unsigned int i; </p><p> for(i=0;i<16;i++) </p><p><b> { </b></p><p> Read_buf_8
103、ch[i] = DS18B20_ReadDQ();</p><p><b> }</b></p><p><b> }</b></p><p> 在本范例中,只讀取位到DS18B20內(nèi)部數(shù)據(jù)區(qū)域的前兩節(jié)字的溫度值數(shù)據(jù),所以數(shù)據(jù)讀取函數(shù)設(shè)計(jì)成讀取兩個(gè)字節(jié)的函數(shù),即需要連續(xù)讀取16個(gè)位(對(duì)應(yīng)于每一個(gè)DS18B20器件來說
104、是連續(xù)的16個(gè)位)。而將讀回的數(shù)據(jù)保存于一個(gè)Read_buf_8ch(簡寫:Rb)的數(shù)組中,可以根據(jù)系統(tǒng)的接線圖對(duì)讀回的16個(gè)字節(jié)的數(shù)據(jù)進(jìn)行分析。</p><p> 讀取DS18B20的數(shù)據(jù)時(shí),先讀高位再讀低位;所以可以從上圖看到,以TM2的DS18B20的數(shù)據(jù)為例,TM2的兩個(gè)字節(jié)的數(shù)據(jù)由Read_buf_8ch數(shù)組的16個(gè)字節(jié)數(shù)據(jù)中的每個(gè)字節(jié)的bit2位組成。可知,完成一次數(shù)據(jù)讀取的操作后,可以同時(shí)讀回8個(gè)
105、DS18B20器件的數(shù)據(jù),在數(shù)據(jù)處理時(shí),只需針對(duì)上圖的數(shù)據(jù)結(jié)構(gòu)對(duì)Read_buf_8ch數(shù)組的數(shù)據(jù)進(jìn)行處理即可得到每個(gè)DS18B20器件的測(cè)溫值。</p><p> 啟動(dòng)溫度轉(zhuǎn)換控制函數(shù): </p><p> void DS18B20_Conver(void) </p><p><b> { </b></p>
106、<p> DS18B20_Reset(); </p><p> DS18B20_WriteByte(0xcc); //Skip ROM </p><p> DS18B20_WriteByte(0x44); //啟動(dòng)測(cè)溫 } </p><p> 讀取溫度值函數(shù): </p><
107、p> void DS18B20_ReadTemp(void) </p><p><b> { </b></p><p> DS18B20_Reset(); </p><p> DS18B20_WriteByte(0xcc); //Skip ROM </p>
108、;<p> DS18B20_WriteByte(0xbe); //送入讀取數(shù)據(jù)命令 </p><p> DS18B20_Read2Byte(); </p><p><b> } </b></p><p> 調(diào)用讀取溫度值函數(shù)后,8個(gè)DS18B20器件的測(cè)溫?cái)?shù)據(jù)將保存在數(shù)R
109、ead_buf_8ch的16個(gè)字節(jié)單元當(dāng)中,還有待進(jìn)行下一步的處理,方可得到對(duì)應(yīng)每個(gè)DS18B20器件的測(cè)溫值。</p><p> 下面介紹簡單的處理代碼片斷: </p><p> char i,j; </p><p> unsigned int uiData[8]; </p><p> unsigned char Mask;
110、 //OS the resoult of Temperature </p><p> for(i=15;i>=0;i--) </p><p><b> { </b></p><p> Mask = 0x01; </p><p> for(j=0;j<8;j++) </p&g
111、t;<p><b> { </b></p><p> uiData[j] = uiData[j]<<1; </p><p> if(Read_buf_8ch[i]&Mask) uiData[j]++; </p><p> Mask = Mask<<1
112、; </p><p><b> } </b></p><p><b> } </b></p><p> 經(jīng)過上述簡單的處理,8個(gè)DS18B20器件的測(cè)溫?cái)?shù)據(jù)將保存在數(shù)組uiData當(dāng)中的8個(gè)單元里,就可以根據(jù)自身程序設(shè)計(jì)的需求來對(duì)這些數(shù)據(jù)進(jìn)行具體的處理了。</p>&l
113、t;p><b> 注:系統(tǒng)軟件見附錄</b></p><p> 第七章 系統(tǒng)運(yùn)行結(jié)果</p><p><b> 仿真效果圖</b></p><p> 編號(hào)為0~7的數(shù)字溫度傳感器DS18B20所采集的溫度將輪流顯示在四位數(shù)碼管上</p><p> 編號(hào)為0的數(shù)字溫度傳感器所測(cè)溫度如下
114、圖</p><p> 圖7-1編號(hào)為0的數(shù)字溫度傳感器所測(cè)溫度</p><p> 編號(hào)為1的數(shù)字溫度傳感器所測(cè)溫度如下圖</p><p> 圖7-2編號(hào)為1的數(shù)字溫度傳感器所測(cè)溫度</p><p> 編號(hào)為2的數(shù)字溫度傳感器所測(cè)溫度如下圖</p><p> 圖7-3編號(hào)為2的數(shù)字溫度傳感器所測(cè)溫度</p
115、><p> 編號(hào)為3的數(shù)字溫度傳感器所測(cè)溫度如下圖</p><p> 圖7-4編號(hào)為3的數(shù)字溫度傳感器所測(cè)溫度</p><p> 編號(hào)為4的數(shù)字溫度傳感器所測(cè)溫度如下圖</p><p> 圖7-5編號(hào)為4的數(shù)字溫度傳感器所測(cè)溫度</p><p> 編號(hào)為5的數(shù)字溫度傳感器所測(cè)溫度如下圖</p>&l
116、t;p> 圖7-6編號(hào)為5的數(shù)字溫度傳感器所測(cè)溫度</p><p> 編號(hào)為6的數(shù)字溫度傳感器所測(cè)溫度如下圖</p><p> 圖7-7編號(hào)為6的數(shù)字溫度傳感器所測(cè)溫度</p><p> 編號(hào)為7的數(shù)字溫度傳感器所測(cè)溫度如下圖</p><p> 圖7-8編號(hào)為7的數(shù)字溫度傳感器所測(cè)溫度</p><p>
117、<b> 結(jié)束語</b></p><p> 本次設(shè)計(jì)的基于單片機(jī)的蔬菜大棚的多點(diǎn)溫度測(cè)量系統(tǒng)是一種分布式的溫度測(cè)量系統(tǒng),它可以遠(yuǎn)程對(duì)溫度實(shí)現(xiàn)測(cè)量和監(jiān)控。系統(tǒng)采用單總線技術(shù),按照DS18B20的通信協(xié)議,由主機(jī)向DS18B20發(fā)送命令,讀取DS18B20轉(zhuǎn)換的溫度,從而實(shí)現(xiàn)對(duì)多個(gè)環(huán)境的溫度的測(cè)量。</p><p> 本文介紹了用單片機(jī)AT89C51控制DS18B2
118、0,著重分析各單元電路的設(shè)計(jì),以及各電路與單片機(jī)的接口技術(shù)。最后還給出系統(tǒng)的軟件的設(shè)計(jì)過程,使用了C語言進(jìn)行程序設(shè)計(jì)。本文是采用模塊化的方式進(jìn)行敘述,對(duì)各模塊的設(shè)計(jì)進(jìn)行了比較詳細(xì)地闡述。</p><p> 經(jīng)過這一次畢業(yè)設(shè)計(jì),我學(xué)了不少的知識(shí),學(xué)會(huì)了怎樣查閱資料和利用工具書,以及熟練地使用PROTEUS仿真軟件和KEIL開發(fā)工具。通過這次畢業(yè)設(shè)計(jì),我更加深刻地認(rèn)識(shí)到只有將書本與具體的實(shí)踐相結(jié)合,才會(huì)有真正的收獲
119、,才能鞏固自已的所學(xué),認(rèn)識(shí)到自己的不足。</p><p><b> 致謝</b></p><p> 通過這一階段的努力,我的畢業(yè)論文終于完成了,這意味著大學(xué)生活即將結(jié)束。回首既往,自己一生最寶貴的時(shí)光能于這樣的校園之中,能在眾多學(xué)富五車、才華橫溢的老師們的熏陶下度過,實(shí)是榮幸之極。在這四年的時(shí)間里,我在學(xué)習(xí)上和思想上都受益非淺。這除了自身努力外,與各位老師、同學(xué)和
120、朋友的關(guān)心、支持和鼓勵(lì)是分不開的</p><p> 在本論文的寫作過程中,從最初的選題,到資料收集,到寫作、修改,到論文定稿,指導(dǎo)老師李明老師給予我極大的幫助,在此我表示衷心感謝。同時(shí)我還要感謝在我學(xué)習(xí)期間給我極大關(guān)心和支持的各位老師以及關(guān)心我的同學(xué)和朋友。正是由于他們,我才能在各方面取得顯著的進(jìn)步,在此向他們表示我由衷的謝意,并祝所有的老師培養(yǎng)出越來越多的優(yōu)秀人才,桃李滿天下!也祝愿我的同學(xué)的在以后的道路上越
121、走越寬,前程似錦!</p><p> 時(shí)間的倉促及自身專業(yè)水平的不足,整篇論文肯定存在尚未發(fā)現(xiàn)的缺點(diǎn)和錯(cuò)誤。懇請(qǐng)閱讀此篇論文的老師、同學(xué),多予指正,不勝感激!</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 閻石.數(shù)字電子技術(shù)基礎(chǔ).北京:清華大學(xué)出版社,2005.</p><p> [2]
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89c51單片機(jī)的蔬菜大棚溫度控制系統(tǒng)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于at89c51單片機(jī)的大棚環(huán)境測(cè)控系統(tǒng)
- 畢業(yè)設(shè)計(jì)(論文)基于at89c51單片機(jī)數(shù)控電源
- at89c51單片機(jī)控制溫度
- at89c51單片機(jī)控制溫度
- 畢業(yè)設(shè)計(jì)(論文)基于單片機(jī)at89c51電子血壓計(jì)的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于at89c51單片機(jī)溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)畢業(yè)設(shè)計(jì)外文翻譯單片機(jī)at89c51
- 單片機(jī)at89c51
- 2017畢業(yè)論文-基于at89c51單片機(jī)的蔬菜大棚溫室溫度自動(dòng)控制系統(tǒng)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)-基于at89c51單片機(jī)電子時(shí)鐘的設(shè)計(jì)
- at89c51基于單片機(jī)溫度控制系統(tǒng)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于at89c51單片機(jī)的新型多功能電子鬧鐘
- 基于at89c51單片機(jī)的電子時(shí)鐘設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)-基于at89c51單片機(jī)的數(shù)字時(shí)鐘設(shè)計(jì)
- 基于at89c51單片機(jī)紅外遙控系統(tǒng)畢業(yè)設(shè)計(jì)
- 基于at89c51單片機(jī)的電子表設(shè)計(jì)
- 基于單片機(jī)at89c51數(shù)字溫度計(jì)的設(shè)計(jì)
- 基于單片機(jī)的畢業(yè)設(shè)計(jì)--基于at89c51單片機(jī)倒車防撞系統(tǒng)的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于at89c51單片機(jī)紅外遙控系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論