![畢業(yè)論文-基于單片機的二氧化碳濃度器設(shè)計說明_第1頁](http://file4.renrendoc.com/view/6d1374ce91c6fa9a2e6ffe99298860da/6d1374ce91c6fa9a2e6ffe99298860da1.gif)
![畢業(yè)論文-基于單片機的二氧化碳濃度器設(shè)計說明_第2頁](http://file4.renrendoc.com/view/6d1374ce91c6fa9a2e6ffe99298860da/6d1374ce91c6fa9a2e6ffe99298860da2.gif)
![畢業(yè)論文-基于單片機的二氧化碳濃度器設(shè)計說明_第3頁](http://file4.renrendoc.com/view/6d1374ce91c6fa9a2e6ffe99298860da/6d1374ce91c6fa9a2e6ffe99298860da3.gif)
![畢業(yè)論文-基于單片機的二氧化碳濃度器設(shè)計說明_第4頁](http://file4.renrendoc.com/view/6d1374ce91c6fa9a2e6ffe99298860da/6d1374ce91c6fa9a2e6ffe99298860da4.gif)
![畢業(yè)論文-基于單片機的二氧化碳濃度器設(shè)計說明_第5頁](http://file4.renrendoc.com/view/6d1374ce91c6fa9a2e6ffe99298860da/6d1374ce91c6fa9a2e6ffe99298860da5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于單片機的二氧化碳濃度器設(shè)計本設(shè)計采用STC89C52單片機作為主控模塊,利用簡單的外圍電路驅(qū)動1-Wire總線,利用1-Wire總線協(xié)議實現(xiàn)多點溫濕度的精確測量。利用STC89C52單片機強大的功能和RAM資源,可以方便地實現(xiàn)單片機與PC機之間的數(shù)據(jù)傳輸,利用軟件方便的邏輯判斷實現(xiàn)1線總線的ROM搜索,實現(xiàn)測溫器件18B20的枚舉,實現(xiàn)無干預(yù)的測溫點動態(tài)切割。因此,本設(shè)計具有很強的實際應(yīng)用性。此外,該系統(tǒng)的濕度檢測尚未完成。從1-Wire總線的原理入手,詳細闡述了1-Wire總線的ROM搜索過程,涉及到硬件電路的設(shè)計計算和軟件的算法。關(guān)鍵詞:DS18B20MCU;串行數(shù)據(jù)傳輸;;單總線 單線接口第一章緒論1.1選題背景防潮、防霉、防腐、防爆是糧庫日常工作的重要內(nèi)容,是衡量糧庫管理質(zhì)量的重要指標。它直接影響儲備物資的使用壽命和工作可靠性。為了保證日常工作的順利進行,第一個問題就是要加強對倉庫溫度的監(jiān)控,因為溫度的升高意味著糧庫有氧呼吸的加強,意味著很快就會發(fā)生腐爛和霉變。因此,我們需要一種成本低、使用方便、測量準確的溫度測量儀。在我們的印象中,溫度測量由傳感器、放大器、數(shù)字顯示器、報警器等單元組成。但通過實際調(diào)查,實際系統(tǒng)根本不是這樣:由于糧食需要定期熏蒸殺蟲滅鼠,熏蒸劑毒性大,腐蝕性強,所以人們不能隨意觸摸倉庫設(shè)備,更不能通過數(shù)碼管和報警器的顯示發(fā)現(xiàn)溫度隨時間的異常變化。同時,由于防爆要求,倉庫部的系統(tǒng)是完全密封的,充的是低氧高氮氣體,平時人是進不去的。因此,目前的監(jiān)測系統(tǒng)是由專用組態(tài)軟件、單片機和數(shù)字傳感器組成的,由計算機監(jiān)測的,具有500-1000個測溫點的網(wǎng)絡(luò)化數(shù)字溫度檢測系統(tǒng)。下圖顯示了一種可能的結(jié)構(gòu)。圖1.1現(xiàn)場采集站糧倉的溫度由一線采集模塊進行測量和采集。每個糧倉大約有200個模擬輸入(溫度),根據(jù)糧情現(xiàn)場檢測濕度?,F(xiàn)場控制站現(xiàn)場控制站可采用西門子PLC控制現(xiàn)場輸送機、提升機、電動門、通風機的啟動和運行,并通過報警等功能的反饋信號實現(xiàn)自動控制。上位機上位機運行組態(tài)通用工業(yè)過程監(jiān)控軟件,監(jiān)控現(xiàn)場設(shè)備,巡檢倉庫溫濕度。并生成動態(tài)圖片、報表、報警、曲線等數(shù)據(jù)管理功能。這就要求我們設(shè)計一種高可靠性、高一致性、基本免維護、自由增減測溫點、能與計算機網(wǎng)絡(luò)交換數(shù)據(jù)的測溫元件。1.2設(shè)計過程和過程要求根據(jù)實際需求,提出了測溫組件的基本功能。需要注意的是,這里看不到傳統(tǒng)的溫度顯示功能,因為實際上工作人員是不可能去現(xiàn)場記錄溫度顯示的。同時增加了自由增減元器件測溫點的功能,以適應(yīng)系統(tǒng)規(guī)模的自由裁剪?;竟δ軝z測溫度測溫點免維護,自由增減。超限指示與計算機通信1.2.2主要技術(shù)參數(shù)溫度范圍:-40℃-+60℃測量精度:±0.5℃報警模式:閃爍的LED指示燈通信模式:RS2329600,N,8,1第二章系統(tǒng)總體設(shè)計本設(shè)計是一套基于STC89C52的檢測系統(tǒng),包括單片機、復位電路、溫度檢測、超限指示、通信接口和系統(tǒng)軟件的設(shè)計。圖2.1系統(tǒng)總體框圖2.1溫度傳感器的選擇方案一:采用熱電阻溫度傳感器。熱電阻是利用導體的電阻隨溫度變化的特性制成的溫度測量元件。目前廣泛使用的熱電阻有鉑、銅、鎳等。其主要特點是精度高,測量周長大,便于遠距離測量。鉑的物理化學性質(zhì)非常穩(wěn)定,抗氧化性強,易提純,重現(xiàn)性好,工業(yè)化性好,電阻率高。因此,鉑電阻用于工業(yè)檢測中的高精度溫度測量和溫度標準。缺點是價格高,溫度系數(shù)低,受磁場影響大,在還原介質(zhì)中容易污染和變脆。根據(jù)IEC標準,當溫度范圍為-200~650℃,百度電阻比W(100)=1.3850時,R0為100ω和10ω,允許測量誤差為A類(0.15℃+0.002|t|)和B類(0.3℃+0.005|t|)與鉑電阻相比,銅電阻的溫度系數(shù)更大,價格更低,易于提純加工。但是,它的電阻率小,在腐蝕性介質(zhì)中的穩(wěn)定性差。工業(yè)上用于-50℃到180℃的溫度測量。方案二:采用AD590。使用AD590,其測溫范圍在-55℃至+150℃之間,精度較高。測溫圈內(nèi)M齒輪的非線性誤差為±0.3℃。AD590可以承受44V直流電壓和20V反向電壓,因此器件的反向連接不會受損。使用可靠。它只需要DC電源就可以工作,不需要線性校正,所以使用起來非常方便,界面也非常簡單。作為電流輸出傳感器的一個特點,與電壓輸出傳感器相比,它具有很強的抗干擾能力。AD590的測量信號可以傳輸超過100米。比較方案1和方案2,方案2更適合本設(shè)計系統(tǒng)中溫度傳感器的選擇。方案三:采用DS18B20。DS18B20數(shù)字溫度傳感器,測溫范圍為-55℃~+125℃,固有測溫分辨率為0.5℃。DS18B20具有獨特的單線接口,只需要一根端口線就可以實現(xiàn)微處理器與DS18B20之間的雙向通信。支持多點組網(wǎng)功能,在僅有的三條線路上可以并聯(lián)多個DS18B20,實現(xiàn)多點測溫。電源:3~5V/DC。使用時不需要外圍部件;測量結(jié)果以9-12位的形式串行傳輸。比較方案2和方案3,方案3適用于本設(shè)計系統(tǒng)中溫度傳感器的選擇。2.2信號采集2.2.1ds18b20基礎(chǔ)知識DS18B20數(shù)字溫度計是DALLAS公司生產(chǎn)的單總線器件。它具有電路簡單、體積小的特點。所以用它來組成測溫系統(tǒng)是非常方便的,因為電路簡單,一根通訊線上可以掛很多這樣的數(shù)字體溫計。DS18B20產(chǎn)品的特點(1)只需要一個端口就可以實現(xiàn)通信。(DS18B20中的每個設(shè)備都有一個唯一的序列號。(3)在實際應(yīng)用中,無需任何外部元件即可實現(xiàn)溫度測量。(4)測量-55左右的溫度。c至+125。c之間。(5)用戶可以選擇9位到12位數(shù)字溫度計的分辨率。(6)、本部有上下限溫度報警設(shè)置。2.2.3ds18b20引腳介紹TO-92封裝中DS18B20的引腳排列如圖2.2所示,引腳功能如表2.1所示。圖2.2DS18B20引腳(仰視圖)表2.1ds18b20引腳功能詳細描述序列號名字引腳功能描述一個地線矮型信號2冰雪皇后(DairyQueen)I/O引腳。開漏單總線接口引腳。它可以用于寄生電源或為設(shè)備供電。三電源電壓可選VDD引腳。在寄生電源下工作時,此引腳必須接地。2.3信號分析和處理由于DS18B20采用1-wire總線協(xié)議,即通過一條數(shù)據(jù)線實現(xiàn)數(shù)據(jù)的雙向傳輸,但STC89C52單片機的硬件不支持單總線協(xié)議,所以必須用軟件模擬單總線的協(xié)議序列來完成對DS18B20芯片的訪問。由于DS18B20在I/O線路上讀寫數(shù)據(jù),因此對數(shù)據(jù)位的讀寫有嚴格的時序要求。DS18B20有嚴格的通信協(xié)議,保證數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾個信號的時序:初始化時序、讀取時序和寫入時序。所有時序都使用主機作為主設(shè)備,使用單總線設(shè)備作為從設(shè)備。每個命令和數(shù)據(jù)傳輸都從主機主動啟動寫序列開始。如果要求單總線器件發(fā)送回數(shù)據(jù),在寫命令之后,主機需要啟動讀序列來完成數(shù)據(jù)接收。并且數(shù)據(jù)命令的傳輸是低位優(yōu)先。2.3.1單總線實施(1)1)ds18b20的復位時序圖2.3ds18b20的復位時序DS18B20的讀時序分為兩個過程:讀0時序和讀1時序。DS18B20的讀取時序是主機拉低單總線后,必須在15秒內(nèi)釋放單總線,DS18B20才能向單總線傳輸數(shù)據(jù)。DS18B20完成一個讀序列過程至少需要60us。圖2.4ds18b20的讀取時序(2)DS18B20的寫時序DS18B20的寫時序仍然分為寫0時序和寫1時序兩個過程。DS18B20的寫0時序和寫1時序要求不同。寫入0時序時,單總線應(yīng)至少下拉60us,以確保DS18B20能夠在15us至45us之間正確采樣IO總線上的“0”電平。寫入1時序時,單總線應(yīng)被拉低,然后在15us后釋放。圖2.5ds18b20的寫時序DS18B20的使用ds18b20-零件結(jié)構(gòu)圖2.6ds18b20-零件結(jié)構(gòu)DS18B20溫度測量的原理如圖2.7所示。圖中溫度系數(shù)低的晶體振蕩器的振蕩頻率受溫度影響很小,所以用來產(chǎn)生一個固定頻率的脈沖信號,送到計數(shù)器1。高溫度系數(shù)晶體振蕩器的振蕩速率隨溫度變化明顯,產(chǎn)生的信號作為計數(shù)器2的脈沖輸入。1和溫度寄存器預(yù)設(shè)為對應(yīng)于-55℃的基值。計數(shù)器1減去低溫度系數(shù)晶體振蕩器產(chǎn)生的脈沖信號。當計數(shù)器1的預(yù)設(shè)值減少到0時,溫度寄存器的值將增加1,計數(shù)器1的預(yù)設(shè)值將被重新載入。計數(shù)器1將再次開始計數(shù)低溫度系數(shù)晶體振蕩器產(chǎn)生的脈沖信號,以此類推,直到計數(shù)器2計數(shù)到0,溫度寄存器的值的累加將停止。此時,溫度寄存器中的值就是測量的溫度。圖2.7中的斜率累加器用于補償和校正溫度測量過程中的非線性,其輸出用于校正計數(shù)器1的預(yù)設(shè)值。圖2.7ds18b20的溫度測量原理DS18B20有四個主要數(shù)據(jù)組件:(1)光刻ROM中的64位序列號是出廠前光刻的,可以視為DS18B20的地址序列號。64位光刻ROM的排列是,前8位(28H)是產(chǎn)品類型號,后48位是DS18B20本身的序列號,后8位是前56位的循環(huán)冗余校驗碼(CRC=X8+X5+X4+1)。ROM的作用就是讓每個DS18B20都不一樣,這樣就可以實現(xiàn)在一條總線上掛接多個DS18B20的目的。(2)DS18B20中的溫度傳感器可以測量溫度。以12位轉(zhuǎn)換為例:以16位符號擴展二進制補碼讀數(shù)的形式提供,以0.0625℃/LSB的形式表示,其中S為符號位。圖2.8DS18B20溫度值格式這是經(jīng)過12位轉(zhuǎn)換后得到的12位數(shù)據(jù),存儲在18B20的兩個8位RAM中。二進制中的前五位是符號位。如果測得的溫度大于0,則這五位為0。只需將測量值乘以0.0625,即可得到實際溫度。如果溫度小于0,這五位就是1,測量值需要反過來加1,再乘以0.0625,才能得到實際溫度。比如+125℃的數(shù)字輸出是07D0H,+25.0625℃的數(shù)字輸出是0191H,-25.0625℃的數(shù)字輸出是FF6FH,-55℃的數(shù)字輸出是FC90H。(3)DS18B20溫度傳感器的存儲器DS18B20溫度傳感器的部分存儲器包括一個暫存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所示。發(fā)出溫度轉(zhuǎn)換命令時,轉(zhuǎn)換后的溫度值以雙字節(jié)補碼的形式存儲在暫存存儲器的第0和第1個字節(jié)中。單片機可以通過單線接口讀取數(shù)據(jù),低位在前,高位在后。數(shù)據(jù)格式如圖2.9所示。對應(yīng)溫度計算:當符號位S=0時,二進制位直接轉(zhuǎn)換為十進制;當S=1時,先把補碼換成原碼,再計算十進制值。圖2.10顯示了相應(yīng)的局部溫度值。圖2.11DS18B20臨時內(nèi)存分配根據(jù)DS18B20的通信協(xié)議,主機(單片機)控制DS18B20完成溫度轉(zhuǎn)換,必須經(jīng)過三個步驟:每次讀寫前,必須將DS18B20復位;復位成功后,發(fā)送ROM指令,最后發(fā)送RAM指令,這樣DS18B20就可以按照預(yù)定的方式運行了。為了復位,主CPU需要下拉數(shù)據(jù)線500微秒,然后釋放它。DS18B20接收信號時,等待約16~60微秒,然后發(fā)出一個已有的60~240微秒的低脈沖。當主CPU接收到該信號時,表示復位成功。ROM和RAM指令如下圖所示:圖2.12ROM和RAM指令列表2.3.3ds18b20的應(yīng)用電路DS18B20測溫系統(tǒng)具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用端口線路少等優(yōu)點。以下是DS18B20在幾種不同應(yīng)用模式下的測溫電路圖:(1)1)ds18b20寄生電源供電模式的電路圖如下圖9所示,在寄生電源供電模式下,DS18B20從單線信號線吸取能量:當信號線DQ處于高電平時,將能量存儲在部分電容中;信號線在低電平時,消耗電容上的電能工作,然后給寄生電源(電容)充電,直到高電平到來。這種獨特的寄生發(fā)電方式有三個好處:1)進行遠距離測溫時,不需要本地供電。2)無需常規(guī)電源即可讀取ROM。3)電路更簡潔,僅用一個I/O口測量溫度。為了使DS18B20進行準確的溫度轉(zhuǎn)換,I/O線必須在溫度轉(zhuǎn)換期間提供足夠的能量。由于每個DS18B20在溫度轉(zhuǎn)換期間的工作電流達到1mA,當幾個溫度傳感器掛在同一個I/O線上進行多點測溫時,僅通過上拉4.7K的電阻無法提供足夠的能量,會導致無法轉(zhuǎn)換溫度或者溫度誤差很大。因此,圖9的電路僅適用于單個溫度傳感器的溫度測量,而不適用于電池供電的系統(tǒng)。工作電源VCC必須保持在5V。當電源電壓下降時,寄生功率所能吸收的能量也會減少,從而使溫度誤差變大。在制造過程中對該電路進行了實驗。在實驗中,當電源電壓VCC降低時,測得的溫度值高于實際溫度,誤差較大。當電源電壓下降到4V時,溫度誤差多達3℃,應(yīng)該是寄生電源吸收的能量不足造成的。因此,在開發(fā)實際溫度測量系統(tǒng)時,不使用該電路。圖2.13ds18b20寄生電源供電模式電路圖(2)DS18B20寄生電源強上拉供電模式電路圖改進后的寄生電源供電模式如下圖10所示。為了使DS18B20在動態(tài)轉(zhuǎn)換周期中獲得足夠的電流供應(yīng),在進行溫度轉(zhuǎn)換或復制到E2存儲器時,MOSFET可以直接將I/O線拉到VCC提供足夠的電流。發(fā)出任何與復制到E2存儲器或開始溫度轉(zhuǎn)換相關(guān)的指令后,I/O線必須在最多10μS內(nèi)轉(zhuǎn)換到強上拉狀態(tài)。在強上拉模式下,可以解決電流源不走的問題,因此也適合多點測溫應(yīng)用。缺點是強上拉切換需要多占用一條I/O口線。圖2.14ds18b20寄生電源強上拉電源模式電路圖注意:在圖2.13和圖2.14所示的寄生電源供電模式下,DS18B20的VDD引腳必須接地。(3)DS18B20的外部供電模式在外部供電模式下,DS18B20的工作電源通過VDD引腳連接。此時I/O線不需要強拉,不存在電源電流不足的問題,可以保證轉(zhuǎn)換精度。同時,理論上可以在總線上連接任意數(shù)量的DS18B20傳感器,組成多點測溫系統(tǒng)。注意:外接電源模式下,DS18B20的GND引腳不能懸空,否則無法轉(zhuǎn)換溫度,讀取的溫度始終為85℃。圖2.15外部電源模式圖2.16外部供電模式下多點溫度測量電路圖外接電源是DS18B20的最佳工作模式,穩(wěn)定可靠,抗干擾能力強,電路簡單,因此可以開發(fā)出穩(wěn)定可靠的多點溫度監(jiān)測系統(tǒng)。因此,在實際的設(shè)計和開發(fā)中,我們使用外部電源。在外接電源的模式下,可以充分發(fā)揮DS18B20電源電壓范圍寬的優(yōu)勢,即使電源電壓VCC降至3V,仍能保證測溫精度。2.3.4單片機89C52SCM結(jié)構(gòu)有兩種,一種是程序存儲器和數(shù)據(jù)存儲器分開的哈佛結(jié)構(gòu),另一種是在通用計算機中廣泛使用的程序存儲器和數(shù)據(jù)存儲器合二為一的普林斯頓結(jié)構(gòu)。英特爾的MCS-51系列MCU采用哈佛結(jié)構(gòu),后續(xù)產(chǎn)品MCS-96系列MCU采用普林斯頓結(jié)構(gòu)。為了設(shè)計該系統(tǒng),采用了與MCS-51兼容的單片機STC89C52作為控制芯片。STC89C52芯片結(jié)構(gòu)下圖是STC89C52的結(jié)構(gòu)示意圖。圖2.16STC89c52的結(jié)構(gòu)示意圖STC89C52單片機包括CPU、程序存儲器(ROM)、數(shù)據(jù)存儲器(ram)、定時器/計數(shù)器、并行接口、串行接口和中斷系統(tǒng),以及數(shù)據(jù)總線、地址總線和控制總線三大總線?,F(xiàn)在我們將分別解釋它們:(1)中央處理器:中央處理器(CPU)是整個單片機的核心部件,是一個8位數(shù)據(jù)寬度的處理器,可以處理8位二進制數(shù)據(jù)或代碼。CPU負責控制、指揮和調(diào)度整個單元系統(tǒng)的協(xié)調(diào),完成計算和控制輸入輸出功能等操作。(2)數(shù)據(jù)存儲器(RAM)STC89C52有256個8位用戶數(shù)據(jù)存儲單元和128個專用寄存器單元,統(tǒng)一尋址。專用寄存器只能用來存儲控制指令數(shù)據(jù),用戶只能訪問,不能存儲用戶數(shù)據(jù)。所以用戶可以使用的RAM只有256個,可以存儲讀寫數(shù)據(jù),運算的中間結(jié)果或者用戶自定義的字體表。 (3)程序存儲器(ROM):STC89C52內(nèi)置8192個8位FlashROM,用于存儲用戶程序、原始數(shù)據(jù)或表格。(4)計時/計數(shù)器:STC89C52有兩個16位可編程定時器/計數(shù)器來實現(xiàn)定時或計數(shù),其中中斷用于控制程序?qū)颉?5)并行輸入輸出(I/O)端口:STC89C52有四組8位I/O端口(P0、P1、P2或P3),用于傳輸外部數(shù)據(jù)。(6)全雙工串口:STC89C52配有一個全雙工串行通信端口,用于與其他設(shè)備進行串行數(shù)據(jù)傳輸。串行端口既可以用作異步通信收發(fā)器,也可以用作同步移位器。(7)中斷系統(tǒng):STC89C52具有完善的中斷功能,包括兩個外部中斷、兩個定時器/計數(shù)器中斷和一個串行中斷,可以滿足不同的控制要求,并具有兩個優(yōu)先級。(8)時鐘電路:STC89C52配有最高頻率為90MHz的時鐘電路,用于產(chǎn)生整個單片機的脈沖序列。但是STC89C52單片機需要外接振蕩電容。圖2.17STC89c52的時鐘電路STC89C52的引腳STC89C52采用40引腳封裝的雙列直插式結(jié)構(gòu)。右圖顯示了它們的引腳配置。在這40個管腳中,有兩條正電源和地線、兩條外部應(yīng)時振蕩器的時鐘線和四組8位I/O端口。中斷端口線路與P3端口線路復用。現(xiàn)在讓我們來解釋這些引腳的功能:圖2.18圖2.18STC89c52的引腳引腳9:RESET/Vpd復位信號多路復用引腳。STC89C52上電時,時鐘電路開始工作,reset引腳上出現(xiàn)超過24個時鐘周期的高電平,系統(tǒng)初始復位。初始化后,程序計數(shù)器PC指向0000H,P0-P3的輸出端口均為高電平,堆棧指針寫入07H,其他特殊寄存器清零“0”。RESET從高電平降到低電平后,系統(tǒng)從0000H地址開始執(zhí)行程序。然而,初始復位不會改變RAM的狀態(tài)(包括工作寄存器R0-R7)。STC89C52的復位模式可以是自動或手動,如下圖2.19所示。另外,RESET/Vpd也是一個復用引腳,在Vcc掉電時可以接入備用電源,保證單片機RAM中的數(shù)據(jù)不丟失。圖2.19重置引腳30:ALE/數(shù)據(jù)鎖存訪問外部編程器時,ALE()的輸出用于鎖存地址的低位字節(jié)。當訪問部門的程序存儲器時,ALE端子會有一個時鐘頻率為1/6的正脈沖信號。這個信號可以用來識別單片機是否工作,也可以作為時鐘輸出。此外,當訪問外部程序存儲器時,ALE將跳過一個脈沖。如果MCU是EPROM,在編程期間,將用于輸入編程脈沖。引腳29:當P2訪問外部程序存儲器時,該引腳輸出一個負脈沖選通信號,PC的16位地址數(shù)據(jù)將出現(xiàn)在端口P0和端口上,而外部程序存儲器將指令數(shù)據(jù)放在端口P0上,由CPU讀入并執(zhí)行。31腳:EA/VPP程序存儲器的外選通線,STC89C52單片機,配8kB程序存儲器。當EA為高電平且程序地址小于8kB時,將讀取部分程序存儲器的指令數(shù)據(jù),而當?shù)刂烦^8kB時,將讀取外部指令數(shù)據(jù)。如果EA為低電平,則無論地址大小如何,都將讀取外部程序存儲器指令。通信接口本設(shè)計采用RS-232C串行通信。RS-232C由美國電子工業(yè)協(xié)會(EIA)正式公布,是異步串行通信中應(yīng)用最廣泛的標準總線?,F(xiàn)在,計算機上的串行通信端口(RS-232C)是標準的配置端口,并得到了廣泛的應(yīng)用。計算機上一般有1~2個標準的RS-232C串口,即通道COM1和COM2。RS-232C規(guī)定最大負載電容為2500pF,限制了傳輸距離和傳輸速率。由于RS-232C的發(fā)送端和接收端之間有一個共同的信號地(GND),屬于不平衡電壓型傳輸電路,不使用差分信號傳輸,所以不具備抗共模干擾的能力,共模噪聲會耦合到信號中。不使用調(diào)制解調(diào)器時,RS-232C能可靠傳輸數(shù)據(jù)的最大通信距離為15m。所以不適合遠距離通信,但對于條形屏,15m的通信距離就足夠了。RS-232C規(guī)定的邏輯電平不同于一般微處理器和單片機的邏輯電平。邏輯1(標記)=-3V~-15V,邏輯0(空白)=+3~+15V。因此,為了與計算機RS-232C接口進行通信,單片機系統(tǒng)必須將單片機的信號電平(TTL電平)轉(zhuǎn)換為計算機RS-232C電平,或者將計算機RS-232C電平轉(zhuǎn)換為單片機的TTL電平,并且在通信過程中必須進行兩種電平的轉(zhuǎn)換。實現(xiàn)這種轉(zhuǎn)換的方法可以使用分立元件或?qū)S玫腞S-232C電平轉(zhuǎn)換芯片。目前,專用電平轉(zhuǎn)換芯片應(yīng)用廣泛,如MAX232、MC1488、MC1489等。2.3.5max232電平轉(zhuǎn)換芯片的特點本設(shè)計是利用MAXIM的單電源芯片MAX232完成TTL到RS-232C電平的轉(zhuǎn)換。MAX232是一款單電源雙通道RS-232C發(fā)射器/接收器芯片。符合所有RS-232C技術(shù)規(guī)范,只要是+5V單電源供電即可;片上電荷泵具有升壓和電壓極性反轉(zhuǎn)能力,可以產(chǎn)生+10V和-10V電壓V+和V-;低功耗,典型電源電流為5mA;集成了兩個RS-232C驅(qū)動器和兩個RS-232C接收器。標準RS-232C通信接口可以由+5V單電源和4個外部電容構(gòu)成。硬件接口簡單,所以應(yīng)用廣泛。MAX232的引腳排列和功能描述見表2.2(摘自MAX232的官方數(shù)據(jù)表)表2.2max232的引腳功能叫好Pin名稱引腳功能描述叫好Pin名稱引腳功能描述一個C1+泵電容器1正極九R2OUT第二TTL/CMOS電平輸出2V+正電源濾波10T2IN第二TTL/CMOS電平輸入三C1-泵電容器1的負極11T1IN第一組TTL/CMOS電平輸入四C2+泵電容器2正極12R1OUT第一個TTL/CMOS電平輸出五C2-泵電容器2的負極13R1IN第一組RS-232電平輸入六五-負電源濾波14T1OUT第一組RS-232電平輸出七T2OUT第二組RS-232電平輸出15地線陸地八R2IN第二組RS-232電平輸入16VCC電源+5V圖2.20MAX232引腳排列2.3.6單片機與PC機通信接口電路的設(shè)計根據(jù)設(shè)計要求,設(shè)計如圖17所示的單片機與PC機的通信接口電路。圖2.21MAX232通信接口電路超限指令在本設(shè)計中,超限指示不是關(guān)鍵設(shè)計,所以簡單的用LED加限流電阻來實現(xiàn)。LED如下圖所示。圖2.22LED指示器第三章軟件設(shè)計整個軟件包括兩個主要部分:溫度采集和數(shù)據(jù)傳輸。溫度采集由單總線協(xié)議和注冊碼組成,因此軟件設(shè)計的主要任務(wù)是實現(xiàn)單總線協(xié)議。3.1單總線協(xié)議處理通過單線接口訪問DS1820的協(xié)議如下初始化->ROM操作命令->存儲器操作命令->數(shù)據(jù)處理初始化單線總線上的所有處理都從初始化序列開始,包括總線主機發(fā)送復位脈沖,然后從機發(fā)送存在脈沖。完成此功能的代碼如下:/*************************************************************功能:18B20初始化*參數(shù):*退貨:*修改:*************************************************************/無效Init18b20(無效){dq=1;_nop_();dq=0;tempdelay(86);delay530us主機發(fā)送復位脈沖。_nop_();dq=1;tempdelay(14);//延遲100uS_nop_();_nop_();_nop_();If(dq==0)//檢測到從設(shè)備發(fā)送存在脈沖flag=1;//檢測1820成功!其他flag=0;//檢測1820失??!tempdelay(20);//20_nop_();_nop_();dq=1;}ROM操作命令一旦總線主設(shè)備檢測到從設(shè)備的存在,它就可以發(fā)出一個設(shè)備ROM操作命令。所有ROM操作命令都是8位長,ROM操作命令由1線單字節(jié)讀寫命令完成。/*************************************************************功能:向18B20寫入一個字節(jié)。*參數(shù):*退貨:*修改:*************************************************************/VoidWriteByte(ucharwr)/*單字節(jié)寫入*/{烏恰爾一世;for(I=0;I<8;i++){dq=0;_nop_();dq=wr&0x01tempdelay(5);//延遲45uS//5_nop_();_nop_();dq=1;wr>>=1;}}/*************************************************************功能:讀取18B20的一個字節(jié)。*參數(shù):*退貨:*修改:*************************************************************/UcharReadByte(void)/*讀取單字節(jié)*/{uchari,u=0;for(I=0;I<8;i++){dq=0;u>>=1;dq=1;如果(dq==1)u|=0x80tempdelay(4);_nop_();}return(u);}有了以上的基本功能,我們就可以完成具體的ROM操作了。例如,總線主機產(chǎn)生一個溫度轉(zhuǎn)換命令,然后讀取溫度,如下表所示:表3.1讀數(shù)溫度主機方式數(shù)據(jù)LSB優(yōu)先給…作注解謝謝重置(Reset)復位脈沖480_960us藥方(prescription的縮寫)存在(存在)存在脈沖謝謝55小時遵守ROM命令謝謝64位ROM代碼問題DS1820地址謝謝44h溫度轉(zhuǎn)換命令謝謝I/O線高電平主機將I/O線保持高電平至少2秒鐘,以完成轉(zhuǎn)換。謝謝重置復位脈沖藥方(prescription的縮寫)存在存在存在脈沖謝謝55小時遵守ROM命令謝謝64位ROM代碼問題DS1820地址謝謝北京美博匯讀取暫存存儲器命令藥方(prescription的縮寫)9個數(shù)據(jù)字節(jié)讀取整個臨時存儲器,以便與CRC進行比較。主機現(xiàn)在重新計算從臨時存儲器接收的8位數(shù)據(jù)字節(jié)的CRC,并將計算的CRC與讀取的CRC進行比較。如果匹配,主機將繼續(xù)運行。如果沒有,重復讀取操作。謝謝重置復位脈沖藥方(prescription的縮寫)出席有一個脈沖操作完成。完成這個函數(shù)的代碼如下/*************************************************************功能:CRC校驗*參數(shù):*退貨:*修改:*************************************************************/ucharCRC(ucharj){uchari,CRC_data=0;for(I=0;I<j;i++)CRC_data=crctable[crc_data^temp_buff[i]];return(CRC_data);}/*************************************************************功能:讀取溫度*參數(shù):*退貨:*修改:*************************************************************/無效GemTemp(無效){read_bytes(9);If(CRC(9)==0)/*檢查是否正確*/{溫度=temp_buff[1]*0x100+temp_buff[0];//溫度*=0.0625;溫度*=10;溫度/=16;tempdelay(1);}}/*************************************************************功能:讀取18B20ID*參數(shù):*退貨:*修改:*************************************************************/voreadid(void)/*讀取設(shè)備id*/{init18b20();writebyte(0x33);//讀取romread_bytes(8);}/*************************************************************功能:18B20ID已完全處理*參數(shù):*退貨:*修改:*************************************************************/無效溫度結(jié)果(無效){p=id_buffReadID();init18b20();writebyte(0xcc);//跳過romwritebyte(0x44);//溫度轉(zhuǎn)換init18b20();writebyte(0xcc);//跳過romwritebyte(0xbe);//讀取溫度p=temp_buffGemTemp();}這里應(yīng)該注意,1-Wire協(xié)議提供了一種檢測數(shù)據(jù)中是否存在傳輸錯誤的方法,即CRC校驗。3.2單線CRC校驗處理DS1820有一個8位CRC,包括64位ROM的最高有效字節(jié)??偩€上的主機可以根據(jù)64位ROM的前56位計算CRC值,并將其與存儲在DS1820中的值進行比較,以確定主機是否已正確接收到ROM數(shù)據(jù)。CRC的等價多項式函數(shù)為CRC=X8+X5+X4+1。在傳輸數(shù)據(jù)時,DS1820也使用與上述相同的多項式函數(shù)來生成8位CRC值,并將該值提供給主機以確認數(shù)據(jù)字節(jié)的傳輸。在使用CRC來確認數(shù)據(jù)傳輸?shù)拿糠N情況下,總線主機必須使用上面給出的多項式函數(shù)來計算CRC值,并將計算值與存儲在DS1820的64位ROM部分中的8位CRC值或在DS1820中計算的8位CRC值(臨時讀取)進行比較總線CRC可以通過一個多項式發(fā)生器產(chǎn)生,該發(fā)生器由一個移位寄存器和一個異或門組成,如圖3.1所示。圖3.1移位寄存器和異或門移位寄存器的所有位都初始化為零,然后從產(chǎn)品系列代碼的最低有效位開始,一次移入一位。當產(chǎn)品系列代碼的8位被移入時,序列號也被移入。輸入序列號的第48位后,移位寄存器包含CRC值。CRC的8位應(yīng)該使移位寄存器返回全零。完成CRC校驗的代碼如下:ucharcrc_datauchar代碼CrcTable[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.3單線器件的ROM搜索從上面的溫度讀取過程可以看出,DS18B20是依靠64位注冊碼作為地址來區(qū)分各個器件的。為了在1線總線上完成多點測量,我們必須知道每個器件的注冊碼。當線路上只有一個設(shè)備時,這個問題處理起來非常簡單,只需發(fā)出0X33命令。但實際上,我們可以看到,現(xiàn)場使用的測溫電纜在一根電纜中封裝了幾個18B20,所以我們不可能單獨測量每個18B20的注冊碼,因此問題很復雜。網(wǎng)絡(luò)上的各種參考和套路都沒有這種情況的介紹,不解決這個問題測溫系統(tǒng)就沒有使用價值!通過仔細研究參考DS1820可編程分辨率單線數(shù)字溫度計,發(fā)現(xiàn)單線器件支持一種稱為ROM搜索的操作。ROM搜索可以枚舉1-Wire總線上的所有器件,ROM搜索可以完美實現(xiàn)測溫點的自由增減。ROM搜索針對器件的64位注冊碼,每個單線器件的注冊碼都是唯一的。圖3.264位ROM注冊碼搜索算法算法采用二叉樹結(jié)構(gòu),沿著每個節(jié)點進行搜索過程,直到找到設(shè)備的ROM代碼,也就是葉子。后續(xù)的搜索操作沿著節(jié)點上的其他路徑以相同的方式執(zhí)行,直到找到總線上的所有設(shè)備代碼。搜索算法首先通過復位和存在脈沖時隙復位單總線上的所有器件;成功執(zhí)行該操作后,發(fā)送一個1字節(jié)的搜索命令,使單線器件準備就緒,并開始搜索操作。搜索命令分為兩類:標準搜索命令(0FH)用于搜索連接到網(wǎng)絡(luò)所有設(shè)備;或者報警條件搜索命令(ECH)僅用于搜索那些處于報警狀態(tài)的設(shè)備。這樣就縮小了搜索范圍,可以快速找到需要關(guān)注的設(shè)備。發(fā)出搜索命令后,實際的搜索過程就開始了。首先,總線上的所有從機同時發(fā)送ROM代碼(也稱為注冊碼)中的第一個最低有效位。與所有單線通信一樣,無論是讀取數(shù)據(jù)還是向從機寫入數(shù)據(jù),每個位操作都由單線主機啟動。根據(jù)1-Wire的特性,當所有從設(shè)備同時回復主機時,結(jié)果相當于邏輯AND在所有傳輸?shù)臄?shù)據(jù)比特中;從機發(fā)送其ROM代碼的第一位后,主機開始下一位操作,然后從機發(fā)送第一位數(shù)據(jù)的補碼;從讀取兩次的數(shù)據(jù)位中,可以對ROM代碼的第一位做出一些判斷:圖3.3第一種情況判斷根據(jù)搜索算法的要求,1線主機必須將指定的位發(fā)送回總線上的從機;如果從設(shè)備中ROM代碼的當前位的值與數(shù)據(jù)位匹配,則繼續(xù)參與搜索過程;如果從器件的當前位與其不匹配,則器件切換到等待狀態(tài),并一直等待,直到下一個單線復位信號到來。剩余63位ROM代碼的搜索仍然按照“讀取兩位”和“寫入一位”的模式重復進行。按照這種搜索算法,最終除了一個從機之外的所有從機都會進入等待狀態(tài),最后一輪檢測后就可以得到最后一個預(yù)留(不在等待狀態(tài))設(shè)備的ROM碼。在隨后的搜索過程中,選擇不同的路徑(或分支)來查找其他設(shè)備的ROM代碼。需要注意的是,本文中ROM代碼的數(shù)據(jù)位由第1位(最低有效位)到第64位(最高有效位)來表示,而不是我們通常使用的第0位到第63位的模式;該設(shè)置允許將差位置計數(shù)器的初始值設(shè)置為0,以便于將來比較。圖3.4判斷過程從圖3.4可以看出:如果總線上的所有設(shè)備當前位的值都相同,那么只能選擇一條分支路徑;總線上沒有設(shè)備響應(yīng)的情況屬于異常狀態(tài)。在搜索過程中,要搜索的設(shè)備可能與1線總線斷開。如果距離當前位既有0又有1,這種情況稱為位值差,在后續(xù)的查找過程中對查找器件起著關(guān)鍵作用。搜索算法規(guī)定,如果在第一輪查詢中存在差異(數(shù)據(jù)位/補碼=0/0),則將選擇“0”路徑。注意:這是由本文介紹的特定算法決定的,在其他算法中,“1”路徑可能是首選。記錄下最后一個差值的位置,以便下次搜索。圖3.5列出了出現(xiàn)值差時的路徑選擇。圖3.5分支選擇圖3.6示出了搜索從設(shè)備的流程圖;右邊的注釋欄解釋了流程圖中出現(xiàn)的符號;這些特殊符號也將在本文檔的源代碼附錄中使用。圖3.6搜索流程圖圖3.7搜索流程圖圖3.8搜索流程圖對應(yīng)于上述流程圖的代碼如下位OWSearch(void){idata無符號字符id_bit_numberidata無符號charlast_zero,rom_byte_number位搜索_結(jié)果;位id_bit,cmp_id_bitidata無符號字符rom_byte_mask位搜索_方向;id_bit_number=1;last_zero=0;rom_byte_number=0;rom_byte_mask=1;search_result=0;Crc8=0;如果(!最后設(shè)備標志){OWInit();如果(!旗幟){lastdifference=0;LastDeviceFlag=FALSE返回FALSE}OWWriteByte(0xf0);做{id_bit=OWReadBit();//0CMP_id_bit=OWReadBit();//0if((id_bit==1)&&(CMP_id_bit==1))//11{_nop_();打破;}其他{if(id_bit!=cmp_id_bit)//1001search_direction=id_bit//用于搜索的位寫值其他{//00if(id_bit_number<lastdifference)search_direction=((temp_buff[rom_byte_number]&rom_byte_mask)>0);其他search_direction=(id_bit_number==lastdifference);if(search_direction==0){last_zero=id_bit_number}}if(搜索方向==1)temp_buff[rom_byte_number]|=rom_byte_mask;其他temp_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]);//累加OWCRCrom_byte_number++;rom_byte_mask=1;}}}while(rom_byte_number<8);//循環(huán),直到通過所有ROM字節(jié)0-7如果(!((id_bit_number<65)||(crc8!=0))){LastDiscrepancy=last_zeroif(lastdifference==0)LastDeviceFlag=TRUEsearch_result=TRUE}}如果(!search_result||!temp_buff[0]){lastdifference=0;LastDeviceFlag=FALSE搜索結(jié)果=假;}返回搜索結(jié)果;}該算法通過使用上述流程處理lastdifference、LastFamilyDiscrepancy、LastDeviceFlag和ROM_NO的值來實現(xiàn)兩種不同類型的搜索操作。這兩個操作是搜索單線器件ROM代碼的基礎(chǔ)。3.4“首次”操作“第一個”操作是搜索單線總線上的第一個從設(shè)備。此操作通過將最后一個免責聲明、LastFamilyDiscrepancy和LastDeviceFlag設(shè)置為零,然后進行搜索來完成。最后,從ROM_NO寄存器中讀取ROM代碼。如果1線總線上沒有器件,復位序列將檢測不到響應(yīng)脈沖,搜索過程將停止。lastdifference=0;LastDeviceFlag=FALSErslt=owsearch();通過上面的代碼完成‘第一次’操作。3.5“下一步”操作“下一個”操作是搜索單線總線上的下一個從設(shè)備;通常,這種搜索操作在“第一個”操作或最后一個“下一個”操作之后執(zhí)行;在最后一次搜索后保持這些值的狀態(tài)不變,并執(zhí)行另一次搜索以實現(xiàn)“下一次”操作;之后,從ROM_NO寄存器讀取新的ROM代碼。如果前一次搜索了1線上的最后一個器件,則返回無效標志FALSE,并且狀態(tài)被設(shè)置為搜索算法下次將“首先”運行的狀態(tài)。rslt=owsearch();使用上面的代碼,完成“下一步”操作。3.6數(shù)據(jù)傳輸數(shù)據(jù)傳輸通過RS232串口完成。因為沒有PC軟件,所以使用Windows操作系統(tǒng)的超級終端程序來完成數(shù)據(jù)顯示功能。代碼如下:/*光標定位/*VT100終端*/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);//跳過romOWWriteByte(0x44);//溫度轉(zhuǎn)換ls=gettemp();ls*=10lsi=lsif(LSI>310)LED=0;putbyte(LSI/100+'0');putbyte(LSI%100/10+'0');putbyte('.');putbyte(LSI%10+“0”);putbyte(0x0d);putbyte(0x0a);第四章總結(jié)經(jīng)過近兩個月的努力,畢業(yè)設(shè)計順利完成。在本系統(tǒng)中,由于我使用的是接口簡單的1-Wire,所以本設(shè)計的硬件成本電路復雜度大大降低。利用1-Wire總線協(xié)議提供的搜索機制,解決了增加或減少設(shè)備的問題,提高了系統(tǒng)的可擴展性。同時,認識到簡單的硬件電路是以復雜的軟件設(shè)計為代價的。畢業(yè)設(shè)計是每個大學生必須面對的綜合素質(zhì)考試。如果說我們的學習是過去四年知識積累的過程,那么現(xiàn)在的畢業(yè)設(shè)計就是對過去所學知識的綜合運用,是對理論進行深化和重新理解的時間活動。在這兩個月的畢業(yè)設(shè)計中,我們付出了努力,當然更多的是收獲的喜悅。雖然我的知識得到了鞏固和提高,但我相信我在實踐中的親身經(jīng)歷會讓我在今后的工作和學習中終身受益。首先,學習能力得到了提升。在畢業(yè)設(shè)計中,完成了硬件電路設(shè)計、單片機軟件編程、PCB設(shè)計等。在這些過程中,遇到了很多困難,但通過書籍或網(wǎng)絡(luò)查閱了很多相關(guān)文章,咨詢了導師后,最終得到了解決。比如糧庫的實際工作環(huán)境和要求,在課堂上是接觸不到的,但是通過和工廠技術(shù)人員的交流,我們已經(jīng)初步掌握了這些知識,并且有幸得到了一根實用的測溫電纜。通過這次畢業(yè)設(shè)計,我不僅對理論有了更深入的了解,還加強了與外界的技術(shù)交流,培養(yǎng)了我的自學能力和分析問題、解決問題的能力。更重要的是,我培養(yǎng)了克服困難的勇氣和信心。其次,我培養(yǎng)了自己的市場觀念。一個商品能否搶占市場,除了必要的功能和質(zhì)量要求外,其價格才是最大的競爭優(yōu)勢。如何在保證質(zhì)量、完成相同功能的同時,最大限度降低產(chǎn)品成本,滿足用戶的實際使用習慣。是每個設(shè)計師做方案時首先考慮的。設(shè)計產(chǎn)品的時候要接觸現(xiàn)實,不要閉門造車。有時候?qū)嶋H情況和我們的理解相差甚遠!再次,是人際交往能力的鍛煉。人不是生來就知道的!人的知識不可能面面俱到,這就需要我們借鑒別人成功的經(jīng)驗或者失敗的教訓,這樣才能少走彎路。在單總線驅(qū)動電路的設(shè)計中,我采用了實際產(chǎn)品的設(shè)計方案,效果非常好??傊?,畢業(yè)設(shè)計完成了,但是我們面臨的是工作。我相信我會把我的熱情和我所學的知識投入到工作中,不斷努力,不斷進步!社會經(jīng)濟效益分析本文設(shè)計并構(gòu)建了一套糧庫溫濕度檢測系統(tǒng),主要用于實時在線監(jiān)測各個糧倉的溫濕度,能夠有效地自動控制糧倉的溫濕度。該系統(tǒng)的試制成功,克服了以往糧倉由管理人員人工檢查、測量和計算糧倉溫度和濕度,采用人工方式控制糧倉溫度和濕度的缺點。提高了糧倉溫濕度的檢測速度和精度,也提高了糧倉溫濕度的控制速度和精度?;径沤^了糧食霉變事故,也節(jié)省了大量的人力物力,降低了糧倉管理的工作強度,提高了糧庫管理的效率,保證了糧食管理的安全可靠。參考晉,曰楚。MCS-51系列單片機的接口電路及應(yīng)用實例。航空航天大學,1990年胡彩。單片機原理及接口技術(shù)。清華大學,1996智全登。智能儀器的設(shè)計原理及應(yīng)用。國防工業(yè),1998年6月何立民。MCS-51系列單片機應(yīng)用系統(tǒng)的設(shè)計。航空航天大學,1990年簡敏。單片機在溫度控制系統(tǒng)中的應(yīng)用。江漢大學學報,1996易綱,元,壽達,喬麗燕。MCS-51系列單片機的應(yīng)用設(shè)計。技術(shù)大學,2003年光。常用溫度測量儀器的技術(shù)問答。國防工業(yè),1989年王硯方李玟。微機控制技術(shù)。人民郵電,1990邵一伙。單片機原理實驗及應(yīng)用。科學和技術(shù),1995年如泉。實用微機和單片機控制技術(shù)。電子科技大學,1995華。MCS-51系列單片機的應(yīng)用接口技術(shù)。航空航天大學出版社,1993智能儀器和數(shù)據(jù)采集系統(tǒng)中的新器件及應(yīng)用。電子科技大學,2001周航慈。單片機應(yīng)用程序設(shè)計。航空航天大學,1991年王毅。單片機設(shè)備應(yīng)用手冊。人民郵電,1994ds18b20可編程分辨率單線數(shù)字溫度計ds1820可編程分辨率單線數(shù)字溫度計吳,周鶴琴。微機原理與接口技術(shù)。:中國科技大學。2003:244-423易綱,杰。單片機原理及應(yīng)用。:技術(shù)大學,2004年童,華。模擬電子技術(shù)基礎(chǔ)。:高等教育。2000.3:71-554低功耗可編程溫度控制器tmp01[z]ADI公司,2002年胡·。消防機器人——消防員的好幫手。:消防技術(shù)和產(chǎn)品信息,2001年王全福,金昌。機器人的昨天、今天和明天。中國機械工程2000年第11卷徐愛清韓方。MCS系列單片機的原理及應(yīng)用。:航空航天大學,1990年傅蔡佳。單片機控制工程實用技術(shù)。:化學工業(yè),2004年俞海生等。微機控制技術(shù)。:清華大學,2005王仁培。實用傳感器應(yīng)用手冊。:應(yīng)用電子研究所,2000年致謝在這次畢業(yè)設(shè)計的過程中,我在老師和同學的支持和幫助下完成了我的畢業(yè)設(shè)計和論文。首先,我要向我的導師喬志華先生表達我誠摯的祝福!在這幾個月的時間里,喬老師給了我無私的關(guān)心和幫助,幫助我順利完成了硬件設(shè)計和期末論文,為我解決了難題,給了我很大的幫助和鼓勵。他用自己淵博的知識、嚴謹?shù)膽B(tài)度和高尚的師德向我們展示了為人師表的風范。我會永遠記得老師和同學的鼓勵和幫助,我會繼續(xù)努力學習。附錄a程序清單#雜注代碼,小型,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>#定義ys48071#定義ys7010#定義ys41061#定義ysw10us_nop_();_nop_();_nop_();_nop_();_nop_();#定義ysr5us1_nop_();_nop_();_nop_();_nop_();#定義ysr5us2_nop_();_nop_();_nop_();_nop_();#定義W0#定義R1/*聯(lián)盟ic{無符號intI;無符號字符a[2];};*/#定義uchar無符號字符#定義uint無符號整數(shù)sbitled=p1^7;voidOWInit(void);voidOWWriteByte(ucharwr);/*************************************************************18B20驅(qū)動,DQ是數(shù)據(jù)端口,連接到P1.0*11.0592M晶體振蕩器,上拉4.7k電阻*作者:fyb*2005-3-2511:23好!*************************************************************/sbitdr=p1^2;sbitwb1=p1^0;sbitRb1=p1^1;位標志;datauchartemp_buff[9];/*存儲讀取的字節(jié),9個字節(jié)用于讀取暫存區(qū),8個字節(jié)用于讀取romID*/uchar代碼CrcTable[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};無效延遲(ucharus);//延遲floatgettemp(void);無效延遲(ucharus)//延遲時間{while(us-)_nop_();}/*串行端口初始化*/voidserial_init(無符號字符bt){SCON=0x50;/*模式1:8位UART,使能接收器*/TMOD=0x21;/*定時器1模式2:8位重載*/開關(guān)(bt){案例0://38400TH1=0xfdPCON=0x80;打破;案例1://19200TH1=0xfdPCON=0;打破;案例二://9600TH1=0xfaPCON=0;打破;案例三://4800TH1=0xf4PCON=0;打破;案例4://2400TH1=0xe8PCON=0;打破;案例五://1200TH1=208PCON=0;打破;案例6://600TH1=160PCON=0;打破;案例7://300TH1=64PCON=0;打破;默認值:TH1=0xfaPCON=0;打破;}TR1=1;/*定時器1運行*///ES=1;//EA=1;}voidputbyte(字符c){SBUF=c;而(!TI)_nop_();TI=0;}voidputint(無符號intui){無符號字符ls;ls=(ui/10000+0x30);putbyte(ls);ls=((ui%10000)/1000+0x30);putbyte(ls);ls=((ui%1000)/100+0x30);putbyte(ls);ls=((ui%100)/10+0x30);putbyte(ls);ls=(ui%10+0x30);putbyte(ls);}/*************************************//*發(fā)送一個字節(jié)的十六進制代碼,分為兩個字節(jié)。*/無符號字符代碼hex_[]={"0123456789abcdef"};puthex(無符號字符c){intchch=(c>>4)&0x0f;putbyte(hex_[ch]);ch=c&0x0fputbyte(hex_[ch]);}/*************************************************************18B20驅(qū)動,DQ是數(shù)據(jù)端口,連接到P1.0*11.0592M晶體振蕩器,上拉4.7k電阻*作者:fyb*2005-3-2511:23好!*************************************************************//*************************************************************功能:延遲處理*參數(shù):*退貨:*修改:*************************************************************/voidOWTempDelay(uchar美國){while(us-);}/*************************************************************功能:18B20初始化*參數(shù):*退貨:*修改:*************************************************************/voidOWInit_1(void){//無符號charI;dr=W;wb1=1;_nop_();wb1=0;OWTempDelay(ys480);//延遲480uSdr=R;wb1=1;OWTempDelay(ys70);//12延遲70uSif(rb1!=1)flag=1;//檢測1820成功!其他flag=0;//檢測1820失??!wb1=1;OWTempDelay(ys410);//410美元}voidOWInit(void){OWInit_1();}/*************************************************************功能:向18B20寫入一個位。*參數(shù):*退貨:*修改:*************************************************************/voidwwwritebit_1(bitwr)/*位寫入*/{dr=W;wb1=0;ysw10uswb1=wrOWTempDelay(12);//延遲80uS//5dr=R;wb1=1;}voidwwwritebit(bitwr)/*寫位*/{OWWriteBit_1(wr);}/*************************************************************功能:向18B20寫入一個字節(jié)。*參數(shù):*退貨:*修改:*************************************************************/voidOWWriteByte(ucharwr){烏恰爾一世;for(I=0;I<8;i++){OWWriteBit(wr&0x01);wr>>=1;}}/*************************************************************功能:讀取18B20的一位。*參數(shù):*退貨:*修改:*************************************************************/位OWReadBit_1(void)/*讀取位*/{位lsbdr=W;wb1=0;ysr5us1wb1=1;dr=R;ysr5us2lsb=rb1OWTempDelay(20);返回lsb}位OWReadBit(void)/*讀取位*/{OWReadBit_1();}/*************************************************************功能:讀取18B20的一個字節(jié)。*參數(shù):*退貨:*修改:*************************************************************/UcharOWReadByte(void)/*讀取單字節(jié)*/{idatauchari,u=0;for(I=0;I<8;i++){u>>=1;if(OWReadBit()==1)u|=0x80}return(u);}/*************************************************************功能:讀取18B20*參數(shù):*退貨:*修改:*************************************************************/voidOWread_bytes(ucharj){烏恰爾一世;for(I=0;I<j;i++){temp_buff[I]=OWReadByte();}}/*************************************************************功能:寫18B20。*參數(shù):*退貨:*修改:*************************************************************/voidOWwrite_bytes(ucharj){烏恰爾一世;for(I=0;I<j;i++){OWWriteByte(temp_buff[I]);}}/*************************************************************功能:CRC校驗*參數(shù):*退貨:*修改:*************************************************************/ucharOWCRC(uchar法官){uchari,CRC_data=0;for(I=0;I<j;++)/*查表*/CRC_data=crctable[crc_data^temp_buff[i]];return(CRC_data);}/*搜索過程的程序代碼*/#定義假0#定義正確1//位OWFirst(無符號字符選擇);bitowsearch(void);無符號字符docrc8(無符號字符值);idatacharlastdifference;位LastDeviceFlagidata無符號字符crc8//-//使用現(xiàn)有的在1線總線上執(zhí)行1線搜索算法//搜索狀態(tài)。//返回TRUE:找到設(shè)備,ROM_NO緩沖區(qū)中的ROM號//FALSE:未找到設(shè)備,搜索結(jié)束//位OWSearch(void){idata無符號字符id_bit_numberidata無符號charlast_zero,rom_byte_number位搜索_結(jié)果;位id_bit,cmp_id_bitidata無符號字符rom_byte_mask位搜索_方向;id_bit_number=1;last_zero=0;rom_byte_number=0;rom_byte_mask=1;search_result=0;Crc8=0;如果(!最后設(shè)備標志){OWInit();如果(!旗幟){lastdifference=0;LastDeviceFlag=FALSE返回FALSE}OWWriteByte(0xf0);做{id_bit=OWReadBit();//0CMP_id_bit=OWReadBit();//0if((id_bit==1)&&(CMP_id_bit==1))//11{_nop_();打破;}其他{if(id_bit!=cmp_id_bit)
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年堅果蜂蜜烤制行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年戶外足球場行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年數(shù)字繪畫體驗館行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025年度建筑節(jié)能改造工程合同質(zhì)量與驗收規(guī)范
- 2025年度城市軌道交通工程總承包合同風險管理及應(yīng)對措施
- 2025年度建筑公司分公司技術(shù)研發(fā)合作合同
- 2025年度國際海洋運輸合同中的貨物保險責任范圍界定協(xié)議
- 2025年度凈水設(shè)備租賃與環(huán)保監(jiān)測一體化服務(wù)合同
- 2025年度建筑工程勞務(wù)大包合同范本二零二五年規(guī)范
- 2025年度商務(wù)酒店客房協(xié)議價合作框架合同
- 《道路交通安全法》課件完整版
- 初中2025教學工作計劃
- 2024年度市政工程項目三方合作協(xié)議3篇
- 【大學課件】機電設(shè)備管理技術(shù)概論
- (2024)甘肅省公務(wù)員考試《行測》真題及答案解析
- 《STP營銷戰(zhàn)略概述》課件
- 醫(yī)院醫(yī)務(wù)人員醫(yī)德考評標準
- 急性胸痛患者的急救護理
- 小紅書種草營銷師(初級)認證考試真題試題庫(含答案)
- 癲癇病人的護理(課件)
- 企業(yè)資產(chǎn)管理培訓
評論
0/150
提交評論