倉庫溫濕度檢測系統(tǒng)設(shè)計課程_第1頁
倉庫溫濕度檢測系統(tǒng)設(shè)計課程_第2頁
倉庫溫濕度檢測系統(tǒng)設(shè)計課程_第3頁
倉庫溫濕度檢測系統(tǒng)設(shè)計課程_第4頁
倉庫溫濕度檢測系統(tǒng)設(shè)計課程_第5頁
已閱讀5頁,還剩127頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

121/132倉庫溫濕度檢測系統(tǒng)設(shè)計院系自動化學(xué)院專業(yè)自動化班級學(xué)號姓名指導(dǎo)教師負(fù)責(zé)教師2009年月摘要本設(shè)計使用STC89C52單片機(jī)作為主控制模塊,利用簡單的外圍電路來驅(qū)動1-Wire總線,利用1-Wire總線協(xié)議,實(shí)現(xiàn)了多點(diǎn)溫度和濕度的精確測量。利用STC89C52單片機(jī)本身強(qiáng)大的功能和內(nèi)部RAM資源,可以很方便的實(shí)現(xiàn)單片機(jī)與PC機(jī)間的數(shù)據(jù)傳輸,并能利用軟件方便的邏輯判斷實(shí)現(xiàn)了1-Wire總線的ROM搜索,實(shí)現(xiàn)了測溫器件18B20的枚舉,實(shí)現(xiàn)了無人干預(yù)的測溫點(diǎn)的動態(tài)裁剪,所以本設(shè)計具有很強(qiáng)的現(xiàn)實(shí)應(yīng)用性。另外,本系統(tǒng)的濕度檢測沒有完成。本文從1-Wire總線的原理入手,詳細(xì)闡述了1-Wire總線的ROM搜索過程,以及硬件電路的設(shè)計、計算和軟件的算法。關(guān)鍵詞:DS18B20 ;單片機(jī) MCU;串行傳輸 SerialDataTransfer;單總線 1-wireinterface AbstractThisdesignasthemainSTC8952ofsingle-chipcontrolmodule,usingasimpleexternalcircuittodrivethe1-Wirebus,theuseof1-Wirebusprotocol,toachieveamoreaccuratemeasurementoftemperature.TheuseofMCSSTC89C52powerfulfeaturesanditsowninternalRAMresources,itiseasytoachievesingle-chipandPCdatatransferbetweenaircraftandtheuseofsoftwaretofacilitatetherealizationofthelogictodeterminethe1-WirebusROMsearch,therealizationofthetemperaturemeasurementdeviceenumeration18B20,nointerventiontoachieveadynamictemperaturemeasurementpointcut,sothedesignofpracticalapplication.Inaddition,thesystemdidnotcompletehumiditytesting.Thisarticlefromthe1-Wirebusstartingwiththeprinciple,describedindetail1-WirebusROMsearchprocess,aswellasthedesignofhardwarecircuits,computingandsoftwarealgorithms.Keywords:DS18B20;Single-chipMCU;SerialtransmissionSerialDataTransfer;monobus1-wireinterface目錄TOC\t"標(biāo)題_謝辭及參考文獻(xiàn),1,標(biāo)題_附錄,1,第2級標(biāo)題,2,第3級標(biāo)題,3,第1級標(biāo)題,1"摘要 IAbstract II目錄 III第1章緒論 11.1選題背景 11.2設(shè)計過程及工藝要求 21.2.1基本功能 21.2.2主要技術(shù)參數(shù) 2第2章系統(tǒng)總體設(shè)計 32.1溫度傳感器的選擇 32.2信號采集 42.2.1DS18B20基本知識 42.2.2DS18B20產(chǎn)品的特點(diǎn) 42.2.3DS18B20的引腳介紹 42.3信號分析與處理 52.3.1單總線的實(shí)現(xiàn) 52.3.2DS18B20的使用 72.3.3DS18B20的應(yīng)用電路 112.3.4單片機(jī)89C52 142.3.5MAX232電平轉(zhuǎn)換芯片特點(diǎn) 182.3.6單片機(jī)與PC間通信接口電路設(shè)計 202.3.7過限指示 20第3章軟件設(shè)計 223.11-Wire總線協(xié)議處理 223.21-WireCRC校驗(yàn)處理 283.31-Wire器件的ROM搜索 293.4‘FIRST’操作 383.5‘NEXT’操作 383.6數(shù)據(jù)傳輸 39第4章總結(jié) 41社會經(jīng)濟(jì)效益分析 42參考文獻(xiàn) 43致謝 45附錄A程序清單 46附錄BPCB板圖 65第1章緒論1.1選題背景防潮、防霉、防腐、防爆是糧庫日常工作的重要內(nèi)容,是衡量糧庫管理質(zhì)量的重要指標(biāo)。它直接影響到儲備物資的壽命和工作可靠性。為保證日常工作的順利進(jìn)行,首要問題是加強(qiáng)倉庫內(nèi)溫度的監(jiān)測工作,因?yàn)闇囟鹊纳?,就意味著糧庫內(nèi)的有氧呼吸的加強(qiáng),就意味著馬上就要發(fā)生腐爛霉變。因此我們需要一種造價低廉、使用方便且測量準(zhǔn)確的溫度測量儀。在我們的印象中,溫度的測量不外乎由傳感器、放大器、數(shù)碼顯示、報警器等單元組成。但是通過實(shí)際的考察,現(xiàn)實(shí)的系統(tǒng)根本不是這個樣子:由于糧食要定期的通過熏蒸來除蟲、防鼠,熏蒸藥劑具有高毒性,高腐蝕性,人員根本不能隨意接觸到倉內(nèi)設(shè)備,更不要說通過數(shù)碼管的顯示和報警器來及時發(fā)現(xiàn)溫度的異常變化,同時出于防爆的要求,在倉庫內(nèi)部的系統(tǒng),是完全密封的,并被充入低氧高氮的氣體,平時人員根本不能及時進(jìn)入。因此現(xiàn)在的監(jiān)控系統(tǒng)都是由計算機(jī)監(jiān)控,采用專用組態(tài)軟件、單片機(jī)及數(shù)字傳感器組成的,具有500-1000個測溫點(diǎn)的,網(wǎng)絡(luò)化的數(shù)字式溫度檢測的系統(tǒng)。下圖展示了一種可能的結(jié)構(gòu)圖1.1現(xiàn)場采集站通過一線牽采集模塊,對糧倉的溫度進(jìn)行測量采集,每個糧倉約有200點(diǎn)模擬量輸入(溫度)并根據(jù)糧食的情況對現(xiàn)場進(jìn)行濕度檢測。現(xiàn)場控制站現(xiàn)場控制站可用西門子PLC控制現(xiàn)場輸送機(jī)、提升機(jī)、電動閘門、通風(fēng)機(jī)的啟動運(yùn)行,以及報警等功能的反饋信號,實(shí)現(xiàn)自動化控制。上位機(jī)上位機(jī)運(yùn)行組態(tài)通用工業(yè)過程監(jiān)控軟件,對現(xiàn)場的設(shè)備進(jìn)行監(jiān)控、并對倉庫溫濕度進(jìn)行巡回檢測。并生成動態(tài)畫面、報表、報警、曲線等數(shù)據(jù)管理功能。這就要求我們必須設(shè)計一種高可靠,高一致性,基本免維護(hù),可自由增減測溫點(diǎn),并具有和計算機(jī)聯(lián)網(wǎng)交換數(shù)據(jù)的能力的測溫組件。1.2設(shè)計過程及工藝要求根據(jù)實(shí)際的需求,我們提出了測溫組件的基本功能,需要說明的是,在這里你看不到傳統(tǒng)的溫度顯示功能,因?yàn)閷?shí)際上工作人員根本不可能到現(xiàn)場去記錄溫度的顯示。同時增加了組件的測溫點(diǎn)免維護(hù)自由增減功能,以適應(yīng)系統(tǒng)的規(guī)模的自由裁剪。1.2.1基本功能檢測溫度測溫點(diǎn)免維護(hù)自由增減過限指示與計算機(jī)通訊1.2.2主要技術(shù)參數(shù)溫度檢測范圍:-40℃-+60℃測量精度:0.5℃報警方式:閃動的LED指示燈通訊方式:RS2329600,N,8,1第2章系統(tǒng)總體設(shè)計本設(shè)計是以STC89C52為基本系統(tǒng)核心的一套檢測系統(tǒng),其中包括、單片機(jī)、復(fù)位電路、溫度檢測、過限指示、通訊接口、系統(tǒng)軟件等部分的設(shè)計。圖2.1系統(tǒng)總體框圖2.1溫度傳感器的選擇方案一:采用熱電阻溫度傳感器。熱電阻是利用導(dǎo)體的電阻隨溫度變化的特性制成的測溫元件?,F(xiàn)應(yīng)用較多的有鉑、銅、鎳等熱電阻。其主要的特點(diǎn)為精度高、測量范圍大、便于遠(yuǎn)距離測量。鉑的物理、化學(xué)性能極穩(wěn)定,耐氧化能力強(qiáng),易提純,復(fù)制性好,工業(yè)性好,電阻率較高,因此,鉑電阻用于工業(yè)檢測中高精密測溫和溫度標(biāo)準(zhǔn)。缺點(diǎn)是價格貴,溫度系數(shù)小,受到磁場影響大,在還原介質(zhì)中易被玷污變脆。按IEC標(biāo)準(zhǔn)測溫范圍-200~650℃,百度電阻比W(100)=1.3850時,R0為100Ω和10Ω,其允許的測量誤差A(yù)級為±(0.15℃+0.002|t|),B級為±(0.3℃+0.005|t|)。銅電阻的溫度系數(shù)比鉑電阻大,價格低,也易于提純和加工;但其電阻率小,在腐蝕性介質(zhì)中使用穩(wěn)定性差。在工業(yè)中用于-50~180℃測溫。方案二:采用AD590。采用AD590,它的測溫范圍在-55℃~+150℃之間,而且精度高。M檔在測溫范圍內(nèi)非線形誤差為±0.3℃。AD590可以承受44V正向電壓和20V反向電壓,因而器件反接也不會損壞。使用可靠。它只需直流電源就能工作,而且,無需進(jìn)行線性校正,所以使用也非常方便,接口也很簡單。作為電流輸出型傳感器的一個特點(diǎn)是,和電壓輸出型相比,它有很強(qiáng)的抗外界干擾能力。AD590的測量信號可遠(yuǎn)傳百余米。綜合比較方案一與方案二,方案二更為適合于本設(shè)計系統(tǒng)對于溫度傳感器的選擇。方案三:采用DS18B20。DS18B20數(shù)字溫度傳感器,測溫范圍-55℃~+125℃,固有測溫分辨率0.5℃。具有獨(dú)特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。支持多點(diǎn)組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)多點(diǎn)測溫。工作電源:3~5V/DC。在使用中不需要任何外圍元件;測量結(jié)果以9~12位數(shù)字量方式串行傳送。綜合比較方案二與方案三,方案三更為適合于本設(shè)計系統(tǒng)對于溫度傳感器的選擇。2.2信號采集2.2.1DS18B20基本知識DS18B20數(shù)字溫度計是DALLAS公司生產(chǎn)的1-Wire,即單總線器件,具有線路簡單,體積小的特點(diǎn)。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線上可以掛很多這樣的數(shù)字溫度計,十分方便。2.2.2DS18B20產(chǎn)品的特點(diǎn)(1)、只要求一個端口即可實(shí)現(xiàn)通信。(2)、在DS18B20中的每個器件上都有獨(dú)一無二的序列號。(3)、實(shí)際應(yīng)用中不需要外部任何元器件即可實(shí)現(xiàn)測溫。(4)、測量溫度范圍在-55C到+125C之間。(5)、數(shù)字溫度計的分辨率用戶可以從9位到12位選擇。(6)、內(nèi)部有溫度上、下限告警設(shè)置。2.2.3DS18B20的引腳介紹TO-92封裝的DS18B20引腳排列見圖2.2,其引腳功能描述見表2.1。圖2.2DS18B20引腳(底視圖)表2.1DS18B20詳細(xì)引腳功能描述序號名稱引腳功能描述1GND地信號2DQ數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。既可以用在寄生電源下,也可以向器件提供電源。3VDD可選擇的VDD引腳。當(dāng)工作于寄生電源時,此引腳必須接地。2.3信號分析與處理由于DS18B20采用的是1-Wire總線協(xié)議方式,即在一根數(shù)據(jù)線實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,而對STC89C52單片機(jī)來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的方法來模擬單總線的協(xié)議時序來完成對DS18B20芯片的訪問。由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴(yán)格的時序要求。DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命令后,主機(jī)需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。2.3.1單總線的實(shí)現(xiàn)(1)DS18B20的復(fù)位時序圖2.3DS18B20的復(fù)位時序DS18B20的讀時序?qū)τ贒S18B20的讀時序分為讀0時序和讀1時序兩個過程。DS18B20的讀時序是從主機(jī)把單總線拉低之后,在15秒之內(nèi)就得釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。圖2.4DS18B20的讀時序(2)DS18B20的寫時序?qū)τ贒S18B20的寫時序仍然分為寫0時序和寫1時序兩個過程。對于DS18B20寫0時序和寫1時序的要求不同,當(dāng)要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確采樣IO總線上的“0”電平,當(dāng)要寫1時序時,單總線被拉低之后,在15us之內(nèi)就得釋放單總線。圖2.5DS18B20的寫時序2.3.2DS18B20的使用

DS18B20內(nèi)部結(jié)構(gòu)圖2.6DS18B20內(nèi)部結(jié)構(gòu)DS18B20測溫原理如圖2.7所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號作為計數(shù)器2的脈沖輸入。計數(shù)器1和溫度寄存器被預(yù)置在-55℃所對應(yīng)的一個基數(shù)值。計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計數(shù),當(dāng)計數(shù)器1的預(yù)置值減到0時,溫度寄存器的值將加1,計數(shù)器1的預(yù)置將重新被裝入,計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直到計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。圖2.7中的斜率累加器用于補(bǔ)償和修正測溫過程中的非線性,其輸出用于修正計數(shù)器1的預(yù)置值。圖2.7DS18B20的測溫原理DS18B20有4個主要的數(shù)據(jù)部件:

(1)光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個DS18B20的目的。(2)DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號位。圖2.8DS18B20溫度值格式這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進(jìn)制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。(3)DS18B20溫度傳感器的存儲器DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。(4)配置寄存器該字節(jié)各位的意義如下:圖2.9配置寄存器低五位一直都是"1",TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動。R1和R0用來設(shè)置分辨率,如下表所示:(DS18B20出廠時被設(shè)置為12位)圖2.10溫度分辨率設(shè)置表(5)高速暫存存儲器高速暫存存儲器由9個字節(jié)組成,其分配如表5所示。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在高速暫存存儲器的第0和第1個字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后,數(shù)據(jù)格式如圖2.9所示。對應(yīng)的溫度計算:當(dāng)符號位S=0時,直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)S=1時,先將補(bǔ)碼變?yōu)樵a,再計算十進(jìn)制值。圖2.10是對應(yīng)的一部分溫度值。圖2.11DS18B20暫存存儲器分布根據(jù)DS18B20的通訊協(xié)議,主機(jī)(單片機(jī))控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進(jìn)行復(fù)位操作,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,當(dāng)DS18B20收到信號后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號表示復(fù)位成功。ROM、RAM指令如下圖所示:圖2.12ROM、RAM指令表2.3.3DS18B20的應(yīng)用電路

DS18B20測溫系統(tǒng)具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點(diǎn)。下面就是DS18B20幾個不同應(yīng)用方式下的測溫電路圖:(1)DS18B20寄生電源供電方式電路圖如下面圖9所示,在寄生電源供電方式下,DS18B20從單線信號線上汲取能量:在信號線DQ處于高電平期間把能量儲存在內(nèi)部電容里,在信號線處于低電平期間消耗電容上的電能工作,直到高電平到來再給寄生電源(電容)充電。獨(dú)特的寄生電源方式有三個好處:1)進(jìn)行遠(yuǎn)距離測溫時,無需本地電源。2)可以在沒有常規(guī)電源的條件下讀取ROM。3)電路更加簡潔,僅用一根I/O口實(shí)現(xiàn)測溫。

要想使DS18B20進(jìn)行精確的溫度轉(zhuǎn)換,I/O線必須保證在溫度轉(zhuǎn)換期間提供足夠的能量,由于每個DS18B20在溫度轉(zhuǎn)換期間工作電流達(dá)到1mA,當(dāng)幾個溫度傳感器掛在同一根I/O線上進(jìn)行多點(diǎn)測溫時,只靠4.7K上拉電阻就無法提供足夠的能量,會造成無法轉(zhuǎn)換溫度或溫度誤差極大。

因此,圖9電路只適應(yīng)于單一溫度傳感器測溫情況下使用,不適宜采用電池供電系統(tǒng)中。并且工作電源VCC必須保證在5V,當(dāng)電源電壓下降時,寄生電源能夠汲取的能量也降低,會使溫度誤差變大。在制作中曾經(jīng)就此電路做過實(shí)驗(yàn),在實(shí)驗(yàn)中,降低電源電壓VCC,當(dāng)?shù)陀?.5V時,測出的溫度值比實(shí)際的溫度高,誤差較大。當(dāng)電源電壓降為4V時,溫度誤差有3℃之多,這就應(yīng)該是因?yàn)榧纳娫醇橙∧芰坎粔蛟斐傻陌?,因此,在開發(fā)實(shí)際測溫系統(tǒng)時不使用此電路。圖2.13DS18B20寄生電源供電方式電路圖(2)DS18B20寄生電源強(qiáng)上拉供電方式電路圖改進(jìn)的寄生電源供電方式如下面圖10所示,為了使DS18B20在動態(tài)轉(zhuǎn)換周期中獲得足夠的電流供應(yīng),當(dāng)進(jìn)行溫度轉(zhuǎn)換或拷貝到E2存儲器操作時,用MOSFET把I/O線直接拉到VCC就可提供足夠的電流,在發(fā)出任何涉及到拷貝到E2存儲器或啟動溫度轉(zhuǎn)換的指令后,必須在最多10μS內(nèi)把I/O線轉(zhuǎn)換到強(qiáng)上拉狀態(tài)。在強(qiáng)上拉方式下可以解決電流供應(yīng)不走的問題,因此也適合于多點(diǎn)測溫應(yīng)用,缺點(diǎn)就是要多占用一根I/O口線進(jìn)行強(qiáng)上拉切換。圖2.14DS18B20寄生電源強(qiáng)上拉供電方式電路圖注意:在圖2.13和圖2.14寄生電源供電方式中,DS18B20的VDD引腳必須接地

(3)DS18B20的外部電源供電方式在外部電源供電方式下,DS18B20工作電源由VDD引腳接入,此時I/O線不需要強(qiáng)上拉,不存在電源電流不足的問題,可以保證轉(zhuǎn)換精度,同時在總線上理論可以掛接任意多個DS18B20傳感器,組成多點(diǎn)測溫系統(tǒng)。注意:在外部供電的方式下,DS18B20的GND引腳不能懸空,否則不能轉(zhuǎn)換溫度,讀取的溫度總是85℃。圖2.15外部電源供電方式圖2.16外部供電方式的多點(diǎn)測溫電路圖外部電源供電方式是DS18B20最佳的工作方式,工作穩(wěn)定可靠,抗干擾能力強(qiáng),而且電路也比較簡單,可以開發(fā)出穩(wěn)定可靠的多點(diǎn)溫度監(jiān)控系統(tǒng)。因此,在實(shí)際的設(shè)計開發(fā)中,我們使用外部電源供電方式。在外接電源方式下,可以充分發(fā)揮DS18B20寬電源電壓范圍的優(yōu)點(diǎn),即使電源電壓VCC降到3V時,依然能夠保證溫度量精度。2.3.4單片機(jī)89C52單片機(jī)的結(jié)構(gòu)有兩種類型,一種是程序存儲器和數(shù)據(jù)存儲器分開的形式,即哈佛(Harvard)結(jié)構(gòu),另一種是采用通用計算機(jī)廣泛使用的程序存儲器與數(shù)據(jù)存儲器合二為一的結(jié)構(gòu),即普林斯頓(Princeton)結(jié)構(gòu)。INTEL的MCS-51系列單片機(jī)采用的是哈佛結(jié)構(gòu)的形式,而后續(xù)產(chǎn)品16位的MCS-96系列單片機(jī)則采用普林斯頓結(jié)構(gòu)。為了設(shè)計此系統(tǒng),采用了MCS-51兼容單片機(jī)STC89C52單片機(jī)作為控制芯片STC89C52的片內(nèi)結(jié)構(gòu)下圖是STC89C52的內(nèi)部結(jié)構(gòu)示意圖。圖2.16STC89C52的內(nèi)部結(jié)構(gòu)示意圖STC89C52單片機(jī)包含中央處理器、程序存儲器(ROM)、數(shù)據(jù)存儲器(RAM)、定時/計數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線,現(xiàn)在我們分別加以說明:(1)中央處理器:中央處理器(CPU)是整個單片機(jī)的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進(jìn)制數(shù)據(jù)或代碼,CPU負(fù)責(zé)控制、指揮和調(diào)度整個單元系統(tǒng)協(xié)調(diào)的工作,完成運(yùn)算和控制輸入輸出功能等操作。(2)數(shù)據(jù)存儲器(RAM)STC89C52內(nèi)部有256個8位用戶數(shù)據(jù)存儲單元和128個專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問,而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的RAM只有256個,可存放讀寫的數(shù)據(jù),運(yùn)算的中間結(jié)果或用戶定義的字型表。 (3)程序存儲器(ROM):STC89C52共有8192個8位FlashROM,用于存放用戶程序,原始數(shù)據(jù)或表格。(4)定時/計數(shù)器:STC89C52有兩個16位的可編程定時/計數(shù)器,以實(shí)現(xiàn)定時或計數(shù),其中中斷用于控制程序轉(zhuǎn)向。(5)并行輸入輸出(I/O)口:STC89C52共有4組8位I/O口(P0、P1、P2或P3),用于對外部數(shù)據(jù)的傳輸。(6)全雙工串行口:STC89C52內(nèi)置一個全雙工串行通信口,用于與其它設(shè)備間的串行數(shù)據(jù)傳送,該串行口既可以用作異步通信收發(fā)器,也可以當(dāng)同步移位器使用。(7)中斷系統(tǒng):STC89C52具備較完善的中斷功能,有兩個外中斷、兩個定時/計數(shù)器中斷和一個串行中斷,可滿足不同的控制要求,并具有2級的優(yōu)先級別選擇。(8)時鐘電路:STC89C52內(nèi)置最高頻率達(dá)90MHz的時鐘電路,用于產(chǎn)生整個單片機(jī)運(yùn)行的脈沖時序,但STC89C52單片機(jī)需外置振蕩電容。圖2.17STC89C52的時鐘電路STC89C52的引腳STC89C52采用40Pin封裝的雙列直接DIP結(jié)構(gòu),右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復(fù)用。現(xiàn)在我們對這些引腳的功能加以說明:如圖2.18圖2.18STC89C52的引腳Pin9:RESET/Vpd復(fù)位信號復(fù)用腳,當(dāng)STC89C52通電,時鐘電路開始工作,在RESET引腳上出現(xiàn)24個時鐘周期以上的高電平,系統(tǒng)即初始復(fù)位。初始化后,程序計數(shù)器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指針寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開始執(zhí)行程序。然而,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài)。STC89C52的復(fù)位方式可以是自動復(fù)位,也可以是手動復(fù)位,見下圖2.19。此外,RESET/Vpd還是一復(fù)用腳,Vcc掉電其間,此腳可接上備用電源,以保證單片機(jī)內(nèi)部RAM的數(shù)據(jù)不丟失。圖2.19復(fù)位Pin30:ALE/當(dāng)訪問外部程序器時,ALE(地址鎖存)的輸出用于鎖存地址的低位字節(jié)。而訪問內(nèi)部程序存儲器時,ALE端將有一個1/6時鐘頻率的正脈沖信號,這個信號可以用于識別單片機(jī)是否工作,也可以當(dāng)作一個時鐘向外輸出。更有一個特點(diǎn),當(dāng)訪問外部程序存儲器,ALE會跳過一個脈沖。如果單片機(jī)是EPROM,在編程其間,將用于輸入編程脈沖。Pin29:當(dāng)訪問外部程序存儲器時,此腳輸出負(fù)脈沖選通信號,PC的16位地址數(shù)據(jù)將出現(xiàn)在P0和P2口上,外部程序存儲器則把指令數(shù)據(jù)放到P0口上,由CPU讀入并執(zhí)行。Pin31:EA/Vpp程序存儲器的內(nèi)外部選通線,STC89C52單片機(jī),內(nèi)置有8kB的程序存儲器,當(dāng)EA為高電平并且程序地址小于8kB時,讀取內(nèi)部程序存儲器指令數(shù)據(jù),而超過8kB地址則讀取外部指令數(shù)據(jù)。如EA為低電平,則不管地址大小,一律讀取外部程序存儲器指令。通訊接口本設(shè)計采用RS-232C串行通信方式。RS-232C是由美國電子工業(yè)協(xié)會(EIA)正式公布的,在異步串行通信中應(yīng)用最廣泛的標(biāo)準(zhǔn)總線?,F(xiàn)在,計算機(jī)上的串行通信端口(RS-232C)是標(biāo)準(zhǔn)配置端口,已經(jīng)得到廣泛應(yīng)用,計算機(jī)上一般都有1~2個標(biāo)準(zhǔn)RS-232C串口,即通道COM1和COM2。RS-232C規(guī)定最大的負(fù)載電容為2500pF,這個電容限制了傳輸距離和傳輸速率,由于RS-232C的發(fā)送器和接收器之間具有公共信號地(GND),屬于非平衡電壓型傳輸電路,不使用差分信號傳輸,因此不具備抗共模干擾的能力,共模噪聲會耦合到信號中。在不使用調(diào)制解調(diào)器(MODEM)時,RS-232C能夠可靠進(jìn)行數(shù)據(jù)傳輸?shù)淖畲笸ㄐ啪嚯x為15米。因此不適合做遠(yuǎn)距離通信,但是對于條屏,通信15米的通信距離已經(jīng)足夠。RS-232C規(guī)定的邏輯電平與一般微處理器、單片機(jī)的邏輯電平是不同的,邏輯1(MARK)=-3V~-15V,邏輯0(SPACE)=+3~+15V。因此,單片機(jī)系統(tǒng)要和電腦的RS-232C接口進(jìn)行通信,就必須把單片機(jī)的信號電平(TTL電平)轉(zhuǎn)換成計算機(jī)的RS-232C電平,或者把計算機(jī)的RS-232C電平轉(zhuǎn)換成單片機(jī)的TTL電平,通信時候必須對兩種電平進(jìn)行轉(zhuǎn)換。實(shí)現(xiàn)這種轉(zhuǎn)換的方法可以使用分立元件,也可以使用專用RS-232C電平轉(zhuǎn)換芯片。目前較為廣泛地使用專用電平轉(zhuǎn)換芯片,如MAX232、MC1488、MC1489等。2.3.5MAX232電平轉(zhuǎn)換芯片特點(diǎn)本設(shè)計就是利用MAXIM公司的單電源芯片MAX232來完成單片機(jī)TTL到RS-232C電平的轉(zhuǎn)換。MAX232是單電源雙RS-232C發(fā)送/接收芯片。它符合所有的RS-232C技術(shù)規(guī)范,只要單一+5V電源供電;片載電荷泵,具有升壓、電壓極性反轉(zhuǎn)能力,能夠產(chǎn)生+10V和-10V電壓V+、V-;低功耗,典型供電電流5mA;內(nèi)部集成2個RS-232C驅(qū)動器,內(nèi)部集成2個RS-232C接收器。采用單一+5V電源供電,外接只需4個電容,便可以構(gòu)成標(biāo)準(zhǔn)的RS-232C通信接口,硬件接口簡單,所以被廣泛運(yùn)用。MAX232的引腳排列及功能描述見表2.2(摘錄自MAX232官方數(shù)據(jù)手冊)表2.2MAX232的引腳功能腳號引腳名稱引腳功能描述腳號引腳名稱引腳功能描述1C1+泵電容1正極9R2OUT第二組TTL/CMOS電平輸出2V+正電源濾波10T2IN第二組TTL/CMOS電平輸入3C1-泵電容1負(fù)極11T1IN第一組TTL/CMOS電平輸入4C2+泵電容2正極12R1OUT第一組TTL/CMOS電平輸出5C2-泵電容2負(fù)極13R1IN第一組RS-232電平輸入6V-負(fù)電源濾波14T1OUT第一組RS-232電平輸出7T2OUT第二組RS-232電平輸出15GND地8R2IN第二組RS-232電平輸入16VCC電源+5V圖2.20MAX232引腳排列2.3.6單片機(jī)與PC間通信接口電路設(shè)計根據(jù)設(shè)計的需要,設(shè)計單片機(jī)與PC間通信接口電路如圖17示。圖2.21MAX232通信接口電路2.3.7過限指示由于在本設(shè)計中,過限指示不是關(guān)鍵設(shè)計,故采用LED加限流電阻的方式簡單實(shí)現(xiàn)。LED指示燈如下圖所示。圖2.22LED指示燈第3章軟件設(shè)計整個軟件包括溫度采集和數(shù)據(jù)傳輸兩個主要部分組成。其中溫度采集又是由單總線協(xié)議和注冊碼組成的,因此,軟件設(shè)計主要任務(wù)是實(shí)現(xiàn)1-Wire總線協(xié)議。3.11-Wire總線協(xié)議處理經(jīng)過單線接口訪問DS1820的協(xié)議protocol如下初始化->ROM操作命令->存貯器操作命令->處理數(shù)據(jù)初始化單線總線上的所有處理均從初始化序列開始初始化序列包括總線主機(jī)發(fā)出一復(fù)位脈沖接著由從屬器件送出存在脈沖。完成這個功能的代碼如下:/*************************************************************Function:18B20初始化*parameter:*Return:*Modify:*************************************************************/voidInit18b20(void){dq=1;_nop_();dq=0;TempDelay(86);//delay530uS主機(jī)發(fā)出復(fù)位脈沖_nop_();dq=1;TempDelay(14);//delay100uS_nop_();_nop_();_nop_();if(dq==0)//檢測從屬器件送出存在脈沖flag=1;//detect1820success!elseflag=0;//detect1820fail!TempDelay(20);//20_nop_();_nop_();dq=1;}ROM操作命令一旦總線主機(jī)檢測到從屬器件的存在它便可以發(fā)出器件ROM操作命令之一所有ROM操作命令均為8位長,ROM操作命令由1-Wire的單字節(jié)讀寫命令完成。/*************************************************************Function:向18B20寫入一個字節(jié)*parameter:*Return:*Modify:*************************************************************/voidWriteByte(ucharwr)/*單字節(jié)寫入*/{uchari;for(i=0;i<8;i++){dq=0;_nop_();dq=wr&0x01;TempDelay(5);//delay45uS//5_nop_();_nop_();dq=1;wr>>=1;}}/*************************************************************Function:讀18B20的一個字節(jié)*parameter:*Return:*Modify:*************************************************************/ucharReadByte(void)/*讀取單字節(jié)*/{uchari,u=0;for(i=0;i<8;i++){dq=0;u>>=1;dq=1;if(dq==1)u|=0x80;TempDelay(4);_nop_();}return(u);}有了上面的基本函數(shù),我們可以完成具體的ROM操作了舉例總線主機(jī)產(chǎn)生溫度變換命令然后讀出溫度,如下表所示:表3.1讀溫度主機(jī)方式數(shù)據(jù)LSB在先注釋TXReset(復(fù)位)復(fù)位脈沖480_960usRXPresence(存在)存在脈沖TX55h符合ROM命令TX64位ROM代碼發(fā)出DS1820地址TX44h溫度變換命令TXI/O線高電平總線主機(jī)使I/O線至少保持2秒鐘的高電平以便完成變換TXReset復(fù)位復(fù)位脈沖RXPresence存在存在脈沖TX55h符合ROM命令TX64位ROM代碼發(fā)出DS1820地址TXBeh讀暫存存貯器命令RX9個數(shù)據(jù)字節(jié)讀整個暫存存儲器以及CRC主機(jī)現(xiàn)在重新計算機(jī)從暫存存儲器接收來的8位數(shù)據(jù)字節(jié)的CRC并把計算得到的CRC與讀出的CRC比較如果二者相符主機(jī)繼續(xù)操作如果不符重復(fù)此讀操作TXReset復(fù)位復(fù)位脈沖RXPresence存在存在脈沖操作完成完成這部分功能的代碼如下/*************************************************************Function:CRC校驗(yàn)*parameter:*Return:*Modify:*************************************************************/ucharCRC(ucharj){uchari,crc_data=0;for(i=0;i<j;i++)crc_data=CrcTable[crc_data^temp_buff[i]];return(crc_data);}/*************************************************************Function:讀取溫度*parameter:*Return:*Modify:*************************************************************/voidGemTemp(void){read_bytes(9);if(CRC(9)==0)/*校驗(yàn)正確*/{Temperature=temp_buff[1]*0x100+temp_buff[0];//Temperature*=0.0625;Temperature*=10;Temperature/=16;TempDelay(1);}}/*************************************************************Function:讀18B20ID*parameter:*Return:*Modify:*************************************************************/voidReadID(void)/*讀取器件id*/{Init18b20();WriteByte(0x33);//readromread_bytes(8);}/*************************************************************Function:18B20ID全處理*parameter:*Return:*Modify:*************************************************************/voidTemperatuerResult(void){p=id_buff;ReadID();Init18b20();WriteByte(0xcc);//skipromWriteByte(0x44);//TemperatureconvertInit18b20();WriteByte(0xcc);//skipromWriteByte(0xbe);//readTemperaturep=temp_buff;GemTemp();}這里要說明的是:1-Wire協(xié)議提供了一種檢測數(shù)據(jù)是否存在著傳輸錯誤的手段,就是CRC校驗(yàn)。3.21-WireCRC校驗(yàn)處理DS1820有一包括64位ROM的最高有效字節(jié)內(nèi)的8位CRC,總線上的主機(jī)可以根據(jù)64位ROM的前56位計算CRC的值并把它與存貯在DS1820內(nèi)的值進(jìn)行比較以決定ROM的數(shù)據(jù)是否已被主機(jī)正確地接收,CRC的等效多項(xiàng)式函數(shù)為CRC=X8+X5+X4+1。DS1820在傳遞數(shù)據(jù)時也利用與上述相同的多項(xiàng)式函數(shù)產(chǎn)生一個8位CRC值,并把此值提供給主機(jī)以確認(rèn)數(shù)據(jù)字節(jié)的傳送,在使用CRC來確認(rèn)數(shù)據(jù)傳送的每一種情況中,總線主機(jī)必須使用上面給出的多項(xiàng)式函數(shù)計算CRC的值,并把計算所得的值或者與存貯在DS1820的64位ROM部分中的8位CRC值,或者與DS1820中計算得到的8位CRC值(在讀暫存存貯器中時它作為第九個字節(jié)被讀出)進(jìn)行比較??偩€CRC可以使用如圖3.1所示由一個移位寄存器和異或XOR門組成的多項(xiàng)式產(chǎn)生器來產(chǎn)生。圖3.1移位寄存器和異或XOR門移位寄存器的所有位被初始化為零然,后從產(chǎn)品系列編碼的最低有效位開始,每次移入一位。當(dāng)產(chǎn)品系列編碼的8位移入以后,接著移入序列號,在序列號的第48位進(jìn)入之后,移位寄存器便包含了CRC值,移入CRC的8位應(yīng)該使移位寄存器返回至全零。完成CRC校驗(yàn)的代碼如下:ucharcrc_data;ucharcodeCrcTable[256]={0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53};ucharCRC(ucharj){uchari,crc_data=0;for(i=0;i<j;i++)crc_data=CrcTable[crc_data^temp_buff[i]];return(crc_data);}3.31-Wire器件的ROM搜索從上面的讀出溫度的過程我們看到,DS18B20是依靠64位注冊碼來作為地址,來區(qū)分每個器件的,我們要完成在一條1-Wire總線上的多點(diǎn)測量必須知道每一個器件的注冊碼,當(dāng)線路上只有一個器件的時候,這個問題處理起來很簡單,只要發(fā)出0X33命令就行,但是實(shí)際上我們看到,現(xiàn)場使用的測溫電纜已經(jīng)把多個18B20密封在一條電纜中了,我們不可能單獨(dú)來測量每一個18B20的注冊碼了,這樣問題就復(fù)雜了,各種參考文獻(xiàn)和網(wǎng)絡(luò)上的例程都沒有對這種情況的介紹,不解決這個問題,溫度檢測系統(tǒng)就沒有使用價值!通過對參考文獻(xiàn)DS1820ProgrammableResolution1-Wire?DigitalThermometer的仔細(xì)研究,發(fā)現(xiàn)1-Wire器件支持一種叫ROM搜索的操作,通過ROM搜索可以枚舉1-Wire總線上的所有器件,通過ROM搜索完美的實(shí)現(xiàn)了測溫點(diǎn)的自由增減。ROM搜索是針對對器件的64位注冊碼進(jìn)行的,每個1-Wire器件的注冊碼都是唯一的。圖3.264位ROM注冊碼搜索算法搜索算法采用的是二叉樹型結(jié)構(gòu),搜索過程沿各分節(jié)點(diǎn)進(jìn)行,直到找到器件的ROM碼即葉子為止;后續(xù)的搜索操作沿著節(jié)點(diǎn)上的其它路徑進(jìn)行,按照同樣的方式直到找到總線上的所有器件代碼。搜索算法首先通過復(fù)位(Reset)和在線應(yīng)答脈沖(PresencePulse)時隙將1-Wire總線上的所有器件復(fù)位;成功地執(zhí)行該操作后發(fā)送1個字節(jié)的搜索命令,搜索命令使1-Wire器件準(zhǔn)備就緒、開始進(jìn)行搜索操作。搜索命令分為兩類:標(biāo)準(zhǔn)搜索命令(0FH)用來搜索連接到網(wǎng)絡(luò)中所有器件;報警或有條件搜索命令(ECH)只用來搜索那些處于報警狀態(tài)下的器件,這種方式縮小了搜索范圍可以快速查找到所需要注意的器件。搜索命令發(fā)出之后,開始實(shí)際的搜索過程。首先總線上的所有從機(jī)器件同時發(fā)送ROM碼(也叫注冊碼)中的第一位最低有效位。與所有的1-Wire通信一樣,無論是讀取數(shù)據(jù)還是向從機(jī)器件寫數(shù)據(jù),都由1-Wire主機(jī)啟動每一位操作。按照1-Wire的特性,當(dāng)所有從機(jī)器件同時應(yīng)答主機(jī)時,結(jié)果相當(dāng)于全部發(fā)送數(shù)據(jù)位的邏輯AND;從機(jī)發(fā)送其ROM碼的第一位后,主機(jī)啟動下一位操作,接著從機(jī)發(fā)送第一位數(shù)據(jù)的補(bǔ)碼;從兩次讀到的數(shù)據(jù)位可以對ROM碼的第一位做出幾種判斷:圖3.3第一位的情況判斷按照搜索算法的要求,1-Wire主機(jī)必須向總線上的從機(jī)發(fā)回一個指定位;如果從機(jī)器件中ROM碼的當(dāng)前位的值與該數(shù)據(jù)位匹配,則繼續(xù)參與搜索過程;若從機(jī)器件的當(dāng)前位與之不匹配,則該器件轉(zhuǎn)換到等待狀態(tài),并保持等待狀態(tài)直到下一個1-Wire復(fù)位信號到來。其余63位ROM碼的搜索依然按照這種“讀兩位”、“寫一位”的模式進(jìn)行重復(fù)操作。按照這種搜索算法進(jìn)行下去,最終除了一個從機(jī)器件外所有從機(jī)將進(jìn)入等待狀態(tài),經(jīng)過最后一輪檢測就可得到最后保留(未進(jìn)入等待狀態(tài))器件的ROM碼。在后續(xù)搜索過程中,選用不同的路徑(或分支)來查找其它器件的ROM碼。需要注意的是本文ROM碼的數(shù)據(jù)位用第1位(最低有效位)到第64位(最高有效位)表示而不是我們常用的那種第0位到第63位的模式;這樣設(shè)置允許將差異位置記數(shù)器初始值置為0,為以后的比較提供了方便。圖3.4判斷過程從圖3.4可以看出:如果所有總線上的器件在當(dāng)前位具有相同值,那么只有一條分支路徑可選;總線上沒有器件響應(yīng)的情況是一種異常狀態(tài),可能是要查找的器件在搜尋過程中與1-Wire總線脫。離如果當(dāng)前位既有0也有1,這種情況稱為位值差異,它對在后續(xù)搜索過程中查找器件起關(guān)鍵作用。搜索算法指定在第一輪查詢中若出現(xiàn)差異(數(shù)據(jù)位/補(bǔ)碼=0/0),則選用‘0’路徑。注意:這一點(diǎn)是由本文檔中介紹的特定算法決定的,其它算法中或許首先選用‘1’路徑。記錄最后一次值差異的位置以供下一次搜索使用,圖3.5列出了出現(xiàn)值差異時路徑的選取情況。圖3.5分支選取圖3.6列出了對一個從器件進(jìn)行搜索的流程圖;右側(cè)注釋欄對在流程圖中出現(xiàn)的符號進(jìn)行了說明;在本文檔的源代碼附錄中也將用到這些專用符號。圖3.6搜索流程圖圖3.7搜索流程圖圖3.8搜索流程圖對應(yīng)以上流程圖的代碼如下bitOWSearch(void){idataunsignedcharid_bit_number;idataunsignedcharlast_zero,rom_byte_number;bitsearch_result;bitid_bit,cmp_id_bit;idataunsignedcharrom_byte_mask;bitsearch_direction;id_bit_number=1;last_zero=0;rom_byte_number=0;rom_byte_mask=1;search_result=0;crc8=0;if(!LastDeviceFlag){OWInit();if(!flag){LastDiscrepancy=0;LastDeviceFlag=FALSE;returnFALSE;}OWWriteByte(0xF0);do{id_bit=OWReadBit();//0cmp_id_bit=OWReadBit();//0if((id_bit==1)&&(cmp_id_bit==1))//11{_nop_();break;}else{if(id_bit!=cmp_id_bit)//1001search_direction=id_bit;//bitwritevalueforsearchelse{//00if(id_bit_number<LastDiscrepancy)search_direction=((temp_buff[rom_byte_number]&rom_byte_mask)>0);elsesearch_direction=(id_bit_number==LastDiscrepancy);if(search_direction==0){last_zero=id_bit_number;}}if(search_direction==1)temp_buff[rom_byte_number]|=rom_byte_mask;elsetemp_buff[rom_byte_number]&=~rom_byte_mask;OWWriteBit(search_direction);id_bit_number++;rom_byte_mask<<=1;if(rom_byte_mask==0){docrc8(temp_buff[rom_byte_number]);//accumulatetheOWCRCrom_byte_number++;rom_byte_mask=1;}}}while(rom_byte_number<8);//loopuntilthroughallROMbytes0-7if(!((id_bit_number<65)||(crc8!=0))){LastDiscrepancy=last_zero;if(LastDiscrepancy==0)LastDeviceFlag=TRUE;search_result=TRUE;}}if(!search_result||!temp_buff[0]){LastDiscrepancy=0;LastDeviceFlag=FALSE;search_result=FALSE;}returnsearch_result;}搜索算法通過對LastDiscrepancy、LastFamilyDiscrepancy、LastDeviceFlag和ROM_NO值的處理,利用上述流程實(shí)現(xiàn)了兩個不同類型的搜索操作。這兩個操作是搜索1-Wire器件ROM碼的基礎(chǔ)。3.4‘FIRST’操作‘FIRST’操作是搜索1-Wire總線上的第一個從機(jī)器件。該操作是通過將LastDiscrepancy、LastFamilyDiscrepancy和LastDeviceFlag置零,然后進(jìn)行搜索完成的。最后ROM碼從ROM_NO寄存器中讀出。若1-Wire總線上沒有器件,復(fù)位序列就檢測不到應(yīng)答脈沖,搜索過程中止。LastDiscrepancy=0;LastDeviceFlag=FALSE;rslt=OWSearch();通過以上代碼,完成‘FIRST’操作。3.5‘NEXT’操作‘NEXT’操作是搜索1-Wire總線上的下一個從機(jī)器件;一般情況下,此搜索操作是在‘FIRST’操作之后或上一次‘NEXT’操作之后進(jìn)行;保持上次搜索后這些值的狀態(tài)不變、執(zhí)行又一次搜索即可實(shí)現(xiàn)‘NEXT’操作;之后從ROM_NO寄存器中來讀出新一個ROM碼,若前一次搜索到的是1-Wire上的最后一個器件,則返回一個無效標(biāo)記FALSE,并且把狀態(tài)設(shè)置成下一次調(diào)用搜索算法時將是‘FIRST’操作的狀態(tài)。rslt=OWSearch();通過以上代碼,完成‘NEXT’操作。3.6數(shù)據(jù)傳輸數(shù)據(jù)傳輸有RS232串口完成,因?yàn)闆]有做上位機(jī)軟件,借用Windows操作系統(tǒng)自帶的超級終端程序完成數(shù)據(jù)的顯示功能,代碼如下:/*VT100終端的光標(biāo)定位*/voidgotoxy(ucharx,y){putbyte(0x1b);putbyte('[');putbyte((y%100)/10+0x30);putbyte((y%10)+0x30);putbyte(';');putbyte((x%100)/10+0x30);putbyte((x%10)+0x30);putbyte('H');}/*VT100終端的清屏*/voidclrscr(void){gotoxy(0,0);putbyte(0x1b);putstring("[J");}/*VT100終端的數(shù)據(jù)顯示*/putint(cnt);putbyte(':');puthex(temp_buff[0]);putbyte(',');puthex(temp_buff[1]);putbyte(',');puthex(temp_buff[2]);putbyte(',');puthex(temp_buff[3]);putbyte(',');puthex(temp_buff[4]);putbyte(',');puthex(temp_buff[5]);putbyte(',');puthex(temp_buff[6]);putbyte(',');puthex(temp_buff[7]);putbyte('');putbyte('=');putbyte('');OWInit();OWWriteByte(0xcc);//skipromOWWriteByte(0x44);//Temperatureconvertls=gettemp();ls*=10;lsi=ls;if(lsi>310)LED=0;putbyte(lsi/100+'0');putbyte(lsi%100/10+'0');putbyte('.');putbyte(lsi%10+'0');putbyte(0x0d);putbyte(0x0a);第4章總結(jié)經(jīng)過近兩個月的努力,終于順利完成了畢業(yè)設(shè)計。在此系統(tǒng)中,由于我采用了接口簡單的1-Wire使本設(shè)計的硬件成本電路復(fù)雜程度大幅下降,利用1-Wire總線協(xié)議提供的搜索機(jī)制,解決了器件的增減問題,提高了系統(tǒng)的可擴(kuò)展性。同時也體會到,簡潔的硬件電路,是要以復(fù)雜的軟件設(shè)計為代價的。畢業(yè)設(shè)計是每個大學(xué)生必須面臨的一項(xiàng)綜合素質(zhì)的考驗(yàn),如果說在過去四年里,我們的學(xué)習(xí)是一個知識的積累過程,那么現(xiàn)在的畢業(yè)設(shè)計就是對過去所學(xué)知識的綜合運(yùn)用,是對理論進(jìn)行深化和重新認(rèn)識的時間活動。在這近兩個月的畢業(yè)設(shè)計中,我們有艱辛的付出,當(dāng)然更多的是豐收的喜悅。知識固然得到了鞏固和提高,但我相信在實(shí)踐中的切身體會將會使我在以后的工作和學(xué)習(xí)中終身受用。首先,學(xué)習(xí)能力得到了提高。在畢業(yè)設(shè)計中,完成硬件電路的設(shè)計、單片機(jī)軟件編寫、PCB設(shè)計等。在這些過程中,遇到許多困難,但通過書籍或網(wǎng)絡(luò)查閱了很多相關(guān)文章和向?qū)熣埥毯蠼K于解決了。比如糧庫的實(shí)際工作環(huán)境和要求,是課堂上接觸不到的,但通過和廠家技術(shù)員的溝通,初步掌握了這些知識,并有幸得到了一條實(shí)際使用的測溫電纜。通過這次畢業(yè)設(shè)計,我不僅對理論有了更深一步的認(rèn)識,增強(qiáng)了和外界技術(shù)的溝通,還培養(yǎng)了自學(xué)能力和分析解決問題的能力,更重要的是,培養(yǎng)了克服困難的勇氣和信心。其次,培養(yǎng)了自己的市場觀念。一個商品是否能夠搶占市場,除了必須的功能和質(zhì)量要求外,其價格是最大的競爭優(yōu)勢。如何在保證質(zhì)量和完成同等功能的情況下,把產(chǎn)品的成本降到最低并符合用戶的實(shí)際使用習(xí)慣。是每個設(shè)計人員在作出方案時首要考慮的因素。設(shè)計產(chǎn)品時要聯(lián)系實(shí)際,不能閉門造車,實(shí)際情況有時候和我們的理解差距很大!再次,則是人際交流能力得到鍛煉。人非生而知之者!人的學(xué)識總是不能面面俱到的,這就要求我們必須善于借鑒別人的成功經(jīng)驗(yàn)或失敗教訓(xùn),使自己少走彎路。我在1-Wire總線的驅(qū)動電路設(shè)計上,就借助了實(shí)際產(chǎn)品的設(shè)計方案,收效甚佳??傊厴I(yè)設(shè)計完成了,但又面臨著工作。我相信我會把自己的熱情和所學(xué)奉獻(xiàn)到自己的工作中,不斷努力,不斷進(jìn)?。∩鐣?jīng)濟(jì)效益分析本文設(shè)計和構(gòu)建了糧食倉庫溫度濕度檢測系統(tǒng),主要用于實(shí)時在線巡回監(jiān)測糧食倉庫中各個糧倉的溫度和濕度,并能有效地對糧倉的溫度和濕度進(jìn)行自動控制。本系統(tǒng)的試制成功,克服了以前糧庫靠管理人員手工檢查、測量和手工計算糧倉的溫度值和濕度值,并用人工方法進(jìn)行糧倉溫度和濕度控制的缺點(diǎn),提高了糧倉溫度和濕度的檢測速度和檢測精度,同時也提高了糧倉溫度和濕度的控制速度和控制精度?;鞠麥缌思Z食霉變事故,同時也節(jié)省了大量人力和物力,減輕了糧倉管理的工作強(qiáng)度,提高了糧庫管理效率,使糧食管理得到了安全可靠的保障。參考文獻(xiàn)沈德金,陳粵初.MCS-51系列單片機(jī)接口電路與應(yīng)用程序?qū)嵗本┖娇蘸教齑髮W(xué)出版社,1990胡漢才.單片機(jī)原理及接口技術(shù).清華大學(xué)出版社,1996李志全等.智能儀表設(shè)計原理及應(yīng)用.國防工業(yè)出版社,1998.6何立民.MCS-51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計.北京航空航天大學(xué)出版社,1990李建民.單片機(jī)在溫度控制系統(tǒng)中的應(yīng)用.江漢大學(xué)學(xué)報,1996張毅剛,彭喜元,姜守達(dá),喬立巖.新編MCS-51系列單片機(jī)應(yīng)用設(shè)計.哈爾濱工業(yè)大學(xué)出版社,2003潘其光.常用測溫儀表技術(shù)問答.國防工業(yè)出版社,1989潘立民,王燕芳.微型計算機(jī)控制技術(shù).人民郵電出版社,1990邵敏權(quán),劉剛.單片機(jī)原理實(shí)驗(yàn)及應(yīng)用.吉林科學(xué)技術(shù)出版社,1995陳汝全.實(shí)用微機(jī)與單片機(jī)控制技術(shù).電子科技大學(xué)出版社,1995李華.MCS-51系列單片機(jī)應(yīng)用接口技術(shù).北京航空航天大學(xué)出版,1993楊振江等.智能儀器與數(shù)據(jù)采集系統(tǒng)中的新器件及應(yīng)用.西安電子科技大學(xué)出版社,2001周航慈.單片機(jī)應(yīng)用程序設(shè)計.北京航空航天大學(xué)出版社,1991王毅.單片機(jī)器件應(yīng)用手冊.人民郵電出版社,1994DS18B20ProgrammableResolution1-Wire?DigitalThermometerDS1820ProgrammableResolution1-Wire?DigitalThermometer吳秀清,周菏琴.微型計算機(jī)原理與接口技術(shù).北京:中國科學(xué)技術(shù)大學(xué)出版社.2003:244-423張毅剛,劉杰.單片機(jī)原理及應(yīng)用.哈爾濱:哈爾濱工業(yè)大學(xué)出版社.2004童詩白,華成英.模擬電子技術(shù)基礎(chǔ).北京:高等教育出版社.2000.3:71-554Lowpowerprogrammabletemperaturecontrollertmp01[z]AnalogDevices,Inc.2002胡傳平.消防機(jī)器人——消防員的好幫手.上海:消防技術(shù)與產(chǎn)品信息,2001王全福,劉進(jìn)長.機(jī)器人的昨天、今天和明天.北京:中國機(jī)械工程第11卷,2000孫涵芳,徐愛卿.MCS系列單片機(jī)的原理與應(yīng)用.北京:北京航空航天大學(xué)出版社,1990付家才.單片機(jī)控制工程實(shí)踐技術(shù).北京:化學(xué)工業(yè)出版社,2004于海生等.微型計算機(jī)控制技術(shù).北京:清華大學(xué)出版社,2005汪仁培.實(shí)用傳感器應(yīng)用手冊.上海:上海使用電子研究所,2000致謝在本次畢業(yè)設(shè)計的過程中,我在眾位老師、同學(xué)的支持和幫助下,完成了我的畢業(yè)設(shè)計和論文。首先向我的導(dǎo)師喬志華老師表示最真誠的謝意!在這幾個月的時間里,喬老師給了我無私的關(guān)懷和幫助,幫助我順利地完成硬件的設(shè)計和論文的定稿,并替我解決難題,給了我莫大的幫助與鼓勵,他以其淵博的學(xué)識、嚴(yán)謹(jǐn)?shù)膽B(tài)度和高尚的師德向我們展示了為人師表的風(fēng)范。老師的鼓勵和幫助以及同學(xué)的協(xié)助都是我永遠(yuǎn)銘記在心的,我將會繼續(xù)努力學(xué)習(xí)。附錄A程序清單#pragmaCODE,SMALL,db,ot(2)#include<absacc.h>#include<reg52.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<intrins.h>#include<math.h>#include<bin.h>#defineys48071#defineys7010#defineys41061#defineysw10us_nop_();_nop_();_nop_();_nop_();_nop_();#defineysr5us1_nop_();_nop_();_nop_();_nop_();#defineysr5us2_nop_();_nop_();_nop_();_nop_();#defineW0#defineR1/*unionic{unsignedinti;unsignedchara[2];};*/#defineucharunsignedchar#defineuintunsignedintsbitLED=P1^7;voidOWInit(void);voidOWWriteByte(ucharwr);/*************************************************************18B20驅(qū)動程序,DQ為數(shù)據(jù)口,接于P1.0*11.0592M晶振,上拉4.7k電阻*Author:fyb*2005-3-2511:23,OK!*************************************************************/sbitdr=P1^2;sbitwb1=P1^0;sbitrb1=P1^1;bitflag;datauchartemp_buff[9];/*存儲讀取的字節(jié),readscratchpad為9字節(jié),readromID為8字節(jié)*/ucharcodeCrcTable[256]={0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,202,148,118,40,171,245,

溫馨提示

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

評論

0/150

提交評論