《微控制器原理及應(yīng)用技術(shù)》課件第9章_第1頁
《微控制器原理及應(yīng)用技術(shù)》課件第9章_第2頁
《微控制器原理及應(yīng)用技術(shù)》課件第9章_第3頁
《微控制器原理及應(yīng)用技術(shù)》課件第9章_第4頁
《微控制器原理及應(yīng)用技術(shù)》課件第9章_第5頁
已閱讀5頁,還剩398頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第9章單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與應(yīng)用實(shí)例9.1應(yīng)用系統(tǒng)設(shè)計(jì)原則

9.2應(yīng)用系統(tǒng)設(shè)計(jì)流程9.3應(yīng)用系統(tǒng)的可靠性及抗干擾設(shè)計(jì)9.4應(yīng)用系統(tǒng)實(shí)例1——溫度時(shí)間測(cè)量與顯示系統(tǒng)9.5應(yīng)用系統(tǒng)實(shí)例2——太陽能電池板追蹤系統(tǒng)

9.6應(yīng)用系統(tǒng)實(shí)例3——基于GSM網(wǎng)絡(luò)的遠(yuǎn)程遙測(cè)系統(tǒng)設(shè)教學(xué)提示:?jiǎn)纹瑱C(jī)以其成本低、功能強(qiáng)、簡(jiǎn)單易學(xué)、使用方便等獨(dú)特的優(yōu)勢(shì),在智能儀表、工業(yè)測(cè)控、數(shù)據(jù)采集、計(jì)算機(jī)通信等各個(gè)領(lǐng)域得到極為廣泛的應(yīng)用。單片機(jī)應(yīng)用系統(tǒng)從提出任務(wù)到正式投入運(yùn)行的整個(gè)設(shè)計(jì)和調(diào)試過程,稱為單片機(jī)應(yīng)用系統(tǒng)的開發(fā)。應(yīng)用系統(tǒng)的設(shè)計(jì)與開發(fā)是對(duì)所學(xué)習(xí)的單片機(jī)知識(shí)的綜合應(yīng)用。在理解單片機(jī)軟件和硬件的基礎(chǔ)上,把它們結(jié)合在一起,構(gòu)成一個(gè)實(shí)際的電子應(yīng)用系統(tǒng),向現(xiàn)代智能電子系統(tǒng)發(fā)展。教學(xué)要求:本章讓學(xué)生了解單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的一般過程和概念。通過幾個(gè)實(shí)例設(shè)計(jì),讓學(xué)生理解單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的實(shí)際內(nèi)涵,理解現(xiàn)代智能電子系統(tǒng)設(shè)計(jì)的過程,能夠獨(dú)立進(jìn)行簡(jiǎn)單應(yīng)用系統(tǒng)設(shè)計(jì)。

所謂應(yīng)用系統(tǒng),是指利用單片機(jī)作為微處理器所設(shè)計(jì)的能夠完成某種應(yīng)用目的的單片機(jī)控制系統(tǒng)(在調(diào)試過程中通常稱為“目標(biāo)系統(tǒng)”)。單片機(jī)應(yīng)用系統(tǒng)的基本要求主要有以下幾個(gè)方面。9.1應(yīng)用系統(tǒng)設(shè)計(jì)原則

(1)單片機(jī)應(yīng)用系統(tǒng)的可靠性要高。單片機(jī)應(yīng)用系統(tǒng)應(yīng)用在各行各業(yè),應(yīng)用環(huán)境千差萬別,功能各異,但無非是系統(tǒng)的測(cè)量與控制。因此,為了保證工作有序地進(jìn)行,高可靠性是單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的一個(gè)基本要求。如果可靠性不高,會(huì)造成設(shè)備故障頻發(fā),甚至出現(xiàn)生產(chǎn)事故,對(duì)人身與財(cái)產(chǎn)安全造成傷害,引起嚴(yán)重后果。

(2)系統(tǒng)操作便捷、維護(hù)方便。系統(tǒng)操作靈活、便捷,維護(hù)方便是單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的基本要求。因此在進(jìn)行軟、硬件設(shè)計(jì)時(shí),不但要考慮滿足功能要求,還要考慮為操作人員提供良好的、簡(jiǎn)單實(shí)用的操作方法,減少對(duì)操作人員的專業(yè)要求。同時(shí)要設(shè)置保護(hù)電路,防止誤操作對(duì)系統(tǒng)造成損壞。最好配置自檢和診斷程序,能夠?qū)崟r(shí)提供系統(tǒng)的工作狀態(tài),并且系統(tǒng)的布局布線要合理,便于僮魅嗽鋇募觳橛胛護(hù)。

(3)系統(tǒng)通用性強(qiáng)、擴(kuò)展性好。一個(gè)單片機(jī)測(cè)量控制系統(tǒng),一般可以檢測(cè)和控制多個(gè)設(shè)備和不同的過程參數(shù),但各個(gè)設(shè)備和控制對(duì)象的要求是不同的,而且隨著進(jìn)一步的發(fā)展,控制設(shè)備可能要更新,控制對(duì)象也有增減,設(shè)計(jì)系統(tǒng)時(shí)應(yīng)考慮使其適應(yīng)各種不同設(shè)備和各種不同控制對(duì)象,使系統(tǒng)不必作重大改動(dòng)就能很快應(yīng)用于新的控制對(duì)象,這要求系統(tǒng)通用性強(qiáng),擴(kuò)展性好,以便于設(shè)備的更新?lián)Q代與快速升級(jí)。要使微機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)達(dá)到這樣的要求,在設(shè)計(jì)時(shí)必須使系統(tǒng)硬件設(shè)計(jì)標(biāo)準(zhǔn)化,軟件設(shè)計(jì)模塊化。在硬件設(shè)計(jì)時(shí),盡量采用通用的系統(tǒng)結(jié)構(gòu)總線,以便在需要的時(shí)候擴(kuò)充或擴(kuò)展系統(tǒng)。接口部件最好采用通用的LSI接口芯片,在滿足性能指標(biāo)的前提下,盡量把接口硬件部分的操作功能用軟件來實(shí)現(xiàn),以減少系統(tǒng)的復(fù)雜程度。在進(jìn)行單片機(jī)應(yīng)用系統(tǒng)軟件設(shè)計(jì)的時(shí)候,采用模塊化的設(shè)計(jì),便于產(chǎn)品功能的升級(jí)。同時(shí)在進(jìn)行系統(tǒng)設(shè)計(jì)時(shí),各設(shè)計(jì)指標(biāo)應(yīng)留一定的余量,設(shè)計(jì)系統(tǒng)要有一定的前瞻性,保證系統(tǒng)在一定時(shí)間或范圍內(nèi)升級(jí)方便。(4)系統(tǒng)設(shè)計(jì)周期要短,性價(jià)比要高。單片機(jī)測(cè)控技術(shù)發(fā)展迅速,各種新技術(shù)和產(chǎn)品不斷出現(xiàn),在滿足精度、速度和其它性能要求的前提下,應(yīng)縮短設(shè)計(jì)周期并盡可能采用性價(jià)低的元器件,以降低整個(gè)測(cè)控系統(tǒng)的費(fèi)用。上述幾點(diǎn)是設(shè)計(jì)單片機(jī)系統(tǒng)時(shí)應(yīng)考慮的基本要求,其它如精度、速度、體積、重量及監(jiān)控手段等,對(duì)不同的系統(tǒng)均有特定的要求,也必須予以足夠的重視。

單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)過程包括總體設(shè)計(jì)、硬件設(shè)計(jì)、軟件設(shè)計(jì)、在線調(diào)試、產(chǎn)品化等幾個(gè)階段,但它們不是絕對(duì)分開的,有時(shí)是交叉進(jìn)行的。單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的一般過程如圖9.1所示。9.2應(yīng)用系統(tǒng)設(shè)計(jì)流程

圖9.1單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)流程圖9.2.1總體設(shè)計(jì)

單片機(jī)應(yīng)用系統(tǒng)的總體方案的確定是進(jìn)行系統(tǒng)設(shè)計(jì)最重要、最關(guān)鍵的一步??傮w方案的好壞直接影響整個(gè)應(yīng)用系統(tǒng)的投資成本、產(chǎn)品品質(zhì)和具體實(shí)施細(xì)則。

1.功能技術(shù)指標(biāo)的確定

在著手進(jìn)行系統(tǒng)設(shè)計(jì)之前,必須根據(jù)系統(tǒng)的應(yīng)用場(chǎng)合、工作環(huán)境、具體用途提出合理的、詳盡的功能技術(shù)指標(biāo),這是系統(tǒng)設(shè)計(jì)的依據(jù)和出發(fā)點(diǎn),也是決定產(chǎn)品前途的關(guān)鍵。所以,必須認(rèn)真做好這個(gè)工作。不管是老產(chǎn)品的改造還是新產(chǎn)品的設(shè)計(jì),應(yīng)對(duì)產(chǎn)品的可靠性、通用性、可維護(hù)性、先進(jìn)性及成本等進(jìn)行綜合考慮,參考國(guó)內(nèi)外同類產(chǎn)品的有關(guān)資料,使確定的技術(shù)指標(biāo)合理且符合有關(guān)標(biāo)準(zhǔn)。

2.機(jī)型的選擇

選擇單片機(jī)的機(jī)型的出發(fā)點(diǎn)有以下幾個(gè)方面。

(1)市場(chǎng)貨源。所選機(jī)型必須有穩(wěn)定、充足的貨源。

(2)單片機(jī)性能。應(yīng)根據(jù)系統(tǒng)的要求和各種單片機(jī)的性能,選擇最容易實(shí)現(xiàn)產(chǎn)品技術(shù)指標(biāo)的機(jī)型,而且能達(dá)到較高的性能價(jià)格比。

(3)研制周期。在設(shè)計(jì)任務(wù)重、時(shí)間緊的情況下,還需要考慮對(duì)所選擇的機(jī)型是否熟悉,是否能馬上著手進(jìn)行系統(tǒng)的設(shè)計(jì)。與研制周期有關(guān)的另一個(gè)重要因素是單片機(jī)的開發(fā)工具,性能優(yōu)良的開發(fā)工具能加快系統(tǒng)設(shè)計(jì)的速度。

3.器件的選擇

除了單片機(jī)以外,系統(tǒng)中還可能需要傳感器、模擬電路、輸入/輸出電路、存儲(chǔ)器以及鍵盤、顯示器等器件和設(shè)備,這些部件的選擇應(yīng)符合系統(tǒng)的精度、速度和可靠性等方面的要求。在總體設(shè)計(jì)階段,應(yīng)對(duì)市場(chǎng)情況有大體地了解,對(duì)器件的選擇提出具體規(guī)定。

4.硬件和軟件的功能劃分

系統(tǒng)硬件的配置和軟件的設(shè)計(jì)是緊密聯(lián)系在一起的,而且在某些應(yīng)用場(chǎng)合,硬件和軟件具有一定的互換性。有些硬件電路的功能可用軟件來實(shí)現(xiàn),反之亦然。例如:系統(tǒng)日歷時(shí)鐘的產(chǎn)生可以使用時(shí)鐘電路(如5832芯片),也可以由定時(shí)器中斷服務(wù)程序來控制時(shí)鐘計(jì)數(shù)。用硬件完成一些功能,可以提高工作速度,減少軟件設(shè)計(jì)的工作量,但增加了硬件成本;若用軟件代替某些硬件的功能,可以節(jié)省硬件開支,但增加了軟件的復(fù)雜性。由于軟件是一次性投資,因此在一般情況下,如果所研制的產(chǎn)品生產(chǎn)批量比較大,則能夠用軟件實(shí)現(xiàn)的功能都由軟件來完成,以便簡(jiǎn)化硬件結(jié)構(gòu)、降低生產(chǎn)成本。在總體設(shè)計(jì)時(shí),必須權(quán)衡利弊,仔細(xì)劃分好硬件和軟件的功能。9.2.2硬件電路設(shè)計(jì)

所謂硬件電路的總體設(shè)計(jì),是指為實(shí)現(xiàn)該項(xiàng)目全部功能所需要的所有硬件的電氣連線原理圖設(shè)計(jì)。為使硬件設(shè)計(jì)盡可能合理,根據(jù)經(jīng)驗(yàn),系統(tǒng)的硬件電路設(shè)計(jì)應(yīng)注意以下幾個(gè)方面。

(1)盡可能選擇標(biāo)準(zhǔn)化、模塊化的典型電路,提高設(shè)計(jì)的成功率和結(jié)構(gòu)的靈活性。

(2)在條件允許的情況下,盡可能選用功能強(qiáng)、集成度高的電路或芯片。因?yàn)椴捎眠@種器件可能代替某一部分電路,不僅元件數(shù)量、接插件和相互連線減少,體積減小,使系統(tǒng)可靠性增加,而且成本往往比用多個(gè)元件實(shí)現(xiàn)的電路要低。

(3)注意選擇通用性強(qiáng)、市場(chǎng)貨源充足的器件,尤其對(duì)需大批量生產(chǎn)的場(chǎng)合,更應(yīng)注意這方面的問題。其優(yōu)點(diǎn)是:一旦某種元器件無法獲得,也能用其它元器件直接替換或?qū)﹄娐飞宰龈膭?dòng)后用其它器件代替。

(4)在對(duì)中央控制單元、輸入接口、輸出接口、人機(jī)接口等分塊進(jìn)行設(shè)計(jì)時(shí),采用的連接方式應(yīng)選用通用接口方式。在必要的情況下,選用已有的模板作為系統(tǒng)的一部分,盡管成本有些偏高,但會(huì)大大縮短研制周期,提高工作效率。當(dāng)然,在有些特殊情況和小系統(tǒng)的場(chǎng)合,用戶必須自行設(shè)計(jì)接口,定義連線方式。此時(shí)要注意接口協(xié)議,一旦接口方式確定,各個(gè)模塊的設(shè)計(jì)都應(yīng)遵守該接口方式。

(5)系統(tǒng)的擴(kuò)展和各功能模塊的設(shè)計(jì)在滿足應(yīng)用系統(tǒng)功能要求的基礎(chǔ)上,應(yīng)適當(dāng)留有余地,以備將來修改、擴(kuò)展之需。

(6)設(shè)計(jì)時(shí),應(yīng)盡可能多做一些調(diào)研,采用最新的技術(shù)。

(7)在電路設(shè)計(jì)時(shí),要充分考慮應(yīng)用系統(tǒng)各部分的驅(qū)動(dòng)能力。

(8)工藝設(shè)計(jì)時(shí),包括機(jī)箱、面板、配線、接插件等,要充分考慮安裝、調(diào)試、維修是否方便。9.2.3印刷電路板設(shè)計(jì)

單片機(jī)應(yīng)用系統(tǒng)的硬件單元電路設(shè)計(jì)選定完成后,就可以運(yùn)用電路板設(shè)計(jì)軟件完成相應(yīng)的原理圖(.Sch)、印制板圖(.Pcb)的制作??梢圆捎玫碾娐钒鍒D設(shè)計(jì)軟件有很多,如PROTEL、CAD等。但現(xiàn)在大部分電子設(shè)計(jì)者采用PROTEL軟件輔助設(shè)計(jì)。首先,開始電路原理圖的繪制,圖樣要整潔美觀大方,應(yīng)正確標(biāo)注出各元件之間連接的網(wǎng)絡(luò)名稱,為下一步制作印制板圖自動(dòng)生成網(wǎng)絡(luò)連接關(guān)系號(hào)做好準(zhǔn)備。其次,根據(jù)原理圖繪制印制電路板圖,印制電路板一般分為2層板、4層板、8層板,層數(shù)越高,板的造價(jià)越高。其中,印制電路板布線時(shí)要注意以下幾點(diǎn):

(1)印制電路板上每個(gè)IC要并接一個(gè)0.01~0.1μF高頻電容,以減小IC對(duì)電源的影響。注意高頻電容的布線,連線應(yīng)靠近電源端并盡量粗短,否則等于增大了電容的等效串聯(lián)電阻,會(huì)影響濾波效果。布線時(shí)避免90°折線,減少高頻噪聲發(fā)射。

(2)注意晶振布線。晶振與單片機(jī)引腳盡量靠近,用地線把時(shí)鐘區(qū)隔離起來,晶振外殼接地并固定。

(3)用地線把數(shù)字區(qū)與模擬區(qū)隔離。數(shù)字地與模擬地要分離,最后在一點(diǎn)接于電源地。A/D、D/A芯片布線也以此為原則。

(4)單片機(jī)和大功率器件的地線要單獨(dú)接地,以減小相互干擾。大功率器件盡可能放在印制電路板邊緣。

(5)整板設(shè)計(jì)完成后,要及時(shí)檢查信號(hào)走線和連接是否符合設(shè)計(jì)標(biāo)準(zhǔn),器件標(biāo)注是否正確完整,同時(shí)還要注意整體外觀形象。9.2.4軟件程序設(shè)計(jì)

單片機(jī)應(yīng)用系統(tǒng)中軟件的設(shè)計(jì)在很大程度上決定了系統(tǒng)的功能。軟件的設(shè)計(jì)細(xì)分為系統(tǒng)理解、軟件結(jié)構(gòu)設(shè)計(jì)、程序設(shè)計(jì)三個(gè)部分。

(1)系統(tǒng)理解是指在開始設(shè)計(jì)軟件前,熟悉硬件留給軟件的接口地址、I/O方式,確定存儲(chǔ)空間的分配、應(yīng)用系統(tǒng)面板控制開關(guān)、按鍵、顯示的設(shè)置等。

(2)軟件結(jié)構(gòu)設(shè)計(jì)要結(jié)合單片機(jī)所完成的功能確定相應(yīng)的模塊程序,比如一般子程序、中斷功能子程序的確定。確定模塊程序運(yùn)行的先后順序,繪制整體程序流程圖。

(3)程序設(shè)計(jì)和其它軟件程序設(shè)計(jì)一樣,首先要建立數(shù)學(xué)模型,選定數(shù)學(xué)算法,繪制具體程序的流程圖,做好程序接口說明。然后選定編程所用語言(匯編語言或C語言)。以上程序編制時(shí)可以采用WAVE、KeilC等集成編輯軟件的軟件模擬仿真功能進(jìn)行軟件模擬調(diào)試。無誤后通過編輯軟件的匯編功能轉(zhuǎn)換成機(jī)器碼,然后聯(lián)機(jī)調(diào)試。9.2.5調(diào)試、運(yùn)行與維護(hù)

在完成目標(biāo)系統(tǒng)樣機(jī)的組裝和軟件設(shè)計(jì)后,便進(jìn)入系統(tǒng)的調(diào)試階段。用戶系統(tǒng)的調(diào)試步驟和方法是相同的,但具體細(xì)節(jié)與所采用的開發(fā)系統(tǒng)以及目標(biāo)系統(tǒng)所選用的單片機(jī)型號(hào)有關(guān)。

系統(tǒng)調(diào)試的目的是查出系統(tǒng)中硬件設(shè)計(jì)與軟件設(shè)計(jì)中存在的錯(cuò)誤和可能出現(xiàn)的不協(xié)調(diào)的問題,以便修改設(shè)計(jì),最終使系統(tǒng)能正確地工作。最好能在方案設(shè)計(jì)階段就考慮到調(diào)試問題,如采用什么調(diào)試方法、使用何種調(diào)試儀器等,以便在系統(tǒng)方案設(shè)計(jì)時(shí)將必要的調(diào)試方法綜合到軟、硬件設(shè)計(jì)中,或提前做好調(diào)試準(zhǔn)備工作。系統(tǒng)調(diào)試包括硬件調(diào)試、軟件調(diào)試及軟、硬件聯(lián)調(diào)。根據(jù)不同的調(diào)試環(huán)境,系統(tǒng)調(diào)試又分為模擬調(diào)試與現(xiàn)場(chǎng)調(diào)試。各種調(diào)試所起的作用是不同的,它們所處的時(shí)間階段也不一樣,但它們的目標(biāo)是一致的,都是為了查出系統(tǒng)中潛在的錯(cuò)誤。

電路故障包括設(shè)計(jì)性錯(cuò)誤和工藝性故障,通常借助電氣儀表進(jìn)行故障檢查。軟件調(diào)試是利用開發(fā)工具進(jìn)行在線仿真調(diào)試,在軟件調(diào)試過程中也可以發(fā)現(xiàn)硬件故障。幾乎所有的在線仿真器和簡(jiǎn)易的開發(fā)工具都為用戶調(diào)試程序提供了以下幾種基本方法:

(1)單步運(yùn)行。一次只執(zhí)行一條指令,在每執(zhí)行一條指令后,又返回監(jiān)控調(diào)試程序。

(2)連續(xù)運(yùn)行??梢詮某绦蛉魏我粭l地址處啟動(dòng),然后全速運(yùn)行。

(3)斷點(diǎn)運(yùn)行。用戶可以在程序任何處設(shè)置斷點(diǎn),當(dāng)程序執(zhí)行到斷點(diǎn)時(shí),控制返回到監(jiān)控調(diào)試程序。

(4)檢查和修改存儲(chǔ)器單元的內(nèi)容。

(5)檢查和修改寄存器的內(nèi)容。

(6)符號(hào)化調(diào)試。能按匯編語言程序中的符號(hào)進(jìn)行調(diào)試。程序調(diào)試可以一個(gè)模塊一個(gè)模塊地進(jìn)行,一個(gè)子程序一個(gè)子程序地調(diào)試,最后連起來總調(diào)。利用開發(fā)工具提供的單步運(yùn)行和設(shè)置斷點(diǎn)運(yùn)行方式,通過檢查應(yīng)用系統(tǒng)的CPU現(xiàn)場(chǎng)、RAM的內(nèi)容和I/O的狀態(tài),檢查程序執(zhí)行的結(jié)果是否正確,觀察應(yīng)用系統(tǒng)I/O設(shè)備的狀態(tài)變化是否正常,從中可以發(fā)現(xiàn)程序中的死循環(huán)錯(cuò)誤、機(jī)器碼錯(cuò)誤及轉(zhuǎn)移地址的錯(cuò)誤,也可以發(fā)現(xiàn)待測(cè)系統(tǒng)中軟件算法錯(cuò)誤和硬件設(shè)計(jì)錯(cuò)誤。在調(diào)試過程中,不斷地調(diào)整修改應(yīng)用系統(tǒng)的硬件和軟件,直到正確為止。在調(diào)試完成后,系統(tǒng)還要進(jìn)行一段時(shí)間的試運(yùn)行。只有試運(yùn)行,系統(tǒng)才會(huì)暴露出它的問題和不足之處。在系統(tǒng)試運(yùn)行階段,設(shè)計(jì)者應(yīng)當(dāng)觀測(cè)它能否經(jīng)受實(shí)際環(huán)境考驗(yàn),還要對(duì)系統(tǒng)進(jìn)行檢測(cè)和試驗(yàn),以驗(yàn)證系統(tǒng)功能是否滿足設(shè)計(jì)要求,是否達(dá)到預(yù)期效果。

系統(tǒng)經(jīng)過一段時(shí)間的烤機(jī)和試運(yùn)行后,就可投入正式運(yùn)行。在正式運(yùn)行中還要建立一套健全的維護(hù)制度,以確保系統(tǒng)的正常工作。

單片機(jī)系統(tǒng)的可靠性是由多種因素決定的,其中系統(tǒng)的抗干擾性能的好壞是影響系統(tǒng)可靠性的重要因素。因此,研究抗干擾技術(shù),提高單片機(jī)系統(tǒng)的抗干擾性能和單片機(jī)應(yīng)用系統(tǒng)的可靠性是極為重要的。本節(jié)將從干擾的來源、硬件、軟件、電源系統(tǒng)和接地系統(tǒng)等各個(gè)方面來研究分析并給出行Э尚械慕餼齟朧9.3應(yīng)用系統(tǒng)的可靠性及抗干擾設(shè)計(jì)9.3.1干擾來源

一般把影響單片機(jī)測(cè)控系統(tǒng)正常工作的信號(hào)稱為噪聲,又稱干擾。在單片機(jī)系統(tǒng)中出現(xiàn)了干擾,就會(huì)影響指令的正常執(zhí)行,造成控制事故或控制失靈。在測(cè)量通道中產(chǎn)生了干擾,就會(huì)使測(cè)量產(chǎn)生誤差,電壓的沖擊有可能使系統(tǒng)遭到致命的破壞。

環(huán)境對(duì)單片機(jī)控制系統(tǒng)的干擾一般都是以脈沖的形式進(jìn)入系統(tǒng)的,干擾串入單片機(jī)系統(tǒng)的渠道主要有3種,還有其它形式的干擾,如圖9.2所示。

圖9.2單片機(jī)測(cè)控系統(tǒng)主要干擾渠道

1.空間干擾

空間干擾來源于周圍的電氣設(shè)備,如發(fā)射機(jī)、中頻爐、晶閘管逆變電源等發(fā)出的電干擾;廣播電臺(tái)或通信發(fā)射臺(tái)發(fā)出的電磁波;空中雷電,甚至地磁場(chǎng)的變化也會(huì)引起干擾。這些空間輻射干擾會(huì)使單片機(jī)系統(tǒng)不能正常工作。

2.供電系統(tǒng)干擾

由于工業(yè)現(xiàn)場(chǎng)運(yùn)行的大功率設(shè)備眾多,特別是大感性負(fù)載設(shè)備的啟停會(huì)使電網(wǎng)電壓大幅度漲落(浪涌),工業(yè)電網(wǎng)的欠壓或過壓常常達(dá)到額定電壓的±15%以上。這種狀況有時(shí)長(zhǎng)達(dá)幾分鐘、幾個(gè)小時(shí)甚至幾天。由于大功率開關(guān)的通斷、電機(jī)的啟停、電焊等原因,電網(wǎng)上常常出現(xiàn)幾百伏,甚至幾千伏尖脈沖干擾。

3.過程通道干擾

為了達(dá)到數(shù)據(jù)采集或?qū)崟r(shí)控制的目的,開關(guān)量輸入/輸出和模擬量輸入/輸出是必不可少的。在工業(yè)現(xiàn)場(chǎng)這些輸入/輸出的信號(hào)線和控制線多至幾百條甚至幾千條,其長(zhǎng)度往往達(dá)幾百米或幾千米,因此不可避免地將干擾引入單片機(jī)系統(tǒng)。當(dāng)有大的電氣設(shè)備漏電,接地系統(tǒng)不完善或者測(cè)量絕緣不好時(shí),都會(huì)使通道中直接串入干擾信號(hào)。各通道的線路如果出自1根電纜中或綁扎在一起,各路間會(huì)通過電磁感應(yīng)而產(chǎn)生瞬間的干擾,尤其是0~15V的信號(hào)與交流220V的干擾,其表現(xiàn)形式仍然使通道中形成干擾電壓。這樣,輕者會(huì)使測(cè)量的信號(hào)發(fā)生誤差,重者會(huì)使有用的信號(hào)被完全淹沒。有時(shí)這種通過感應(yīng)產(chǎn)生的干擾電壓會(huì)達(dá)到幾十伏以上,使單片機(jī)系統(tǒng)無法工作。

以上3種干擾中,來自供電系統(tǒng)的干擾最多,其次為來自過程通道的干擾。對(duì)于來自空間的輻射干擾,需要適當(dāng)?shù)钠帘魏徒拥貋斫鉀Q。9.3.2電源系統(tǒng)抗干擾設(shè)計(jì)

單片機(jī)測(cè)控系統(tǒng)的供電,常常是一個(gè)棘手的問題,僅一臺(tái)高質(zhì)量的電源不足以解決干擾和電壓波動(dòng)問題,必須完整地設(shè)計(jì)整個(gè)電源供電系統(tǒng)。

邏輯電路是在低電壓、大電流下工作的,電源的分配就必須引起注意,比如1條0.1Ω的電源線回路,對(duì)于5A的供電系統(tǒng),就會(huì)把電源電壓從5V降到4.5V,以至于不能正常工作。另一方面工作在極高頻率下的數(shù)字電路,對(duì)電源線有高頻要求,所以一般電源線上的干擾是數(shù)字系統(tǒng)常出現(xiàn)的問題之一。電源分配系統(tǒng)首要的就是良好的接地,系統(tǒng)的地線必須能夠吸收來自所有電源系統(tǒng)的全部電源。應(yīng)該采用粗導(dǎo)線作為電源連接線,地線應(yīng)盡量短且直接走線。對(duì)于插件式電路板,應(yīng)多給電源線、地線分配幾個(gè)沿插頭方向均勻的插件。

在單片機(jī)系統(tǒng)中,為了提高供電系統(tǒng)的功能,防止串入干擾,建議采用以下措施。

(1)交流近線端加交流濾波器,可濾掉高頻干擾,如電網(wǎng)上大功率設(shè)備啟停造成的瞬間的干擾。濾波器市場(chǎng)上的產(chǎn)品有一級(jí)、二級(jí)濾波器之分,安裝時(shí)外殼要加屏蔽并良好接地,進(jìn)出線要分開,防止感應(yīng)和輻射耦合。低通濾波器僅允許50Hz交流電通過,對(duì)高頻和中頻干擾有良好的衰減作用。

(2)要求高的系統(tǒng)加交流穩(wěn)壓器。

(3)采用居于靜電屏蔽和抗電磁干擾的隔離電源變壓器。

(4)采用集成穩(wěn)壓塊兩級(jí)穩(wěn)壓。目前市場(chǎng)上集成穩(wěn)壓有許多種,如提供正電源的7805、7812、7815、7820、7824,以及提供負(fù)電源的79XX系列穩(wěn)壓塊,它們內(nèi)部是多級(jí)穩(wěn)壓電路,采用兩級(jí)穩(wěn)壓效果較好。例如,主機(jī)電源先用7809穩(wěn)壓到9V,再用7805穩(wěn)壓到5V。

(5)直流輸出部分采用大容量電解電容進(jìn)行平滑濾波。

(6)交流電源線與其它線盡量分開,減少再度耦合干擾。如濾波器的輸出線上干擾已減少,應(yīng)使其與電源進(jìn)線級(jí)濾波器外殼保持一定距離,交流電源線與直流電源線及信號(hào)線分開走線。

(7)電源與信號(hào)線一般都通過地板下面走線,而且不可把兩線靠的太近或互相平行,以減少電源與信號(hào)線之間的相互影響。

(8)在每塊印制板的電源與地線之間并接上去耦電容。即5~10μF的電解電容和1個(gè)0.01~0.1μF的電容,以消除直流電源與地線中的脈沖電流所造成的干擾。9.3.3地線干擾及抑制

在計(jì)算機(jī)應(yīng)用系統(tǒng)中,接地是一個(gè)非常重要的問題,接地問題處理得正確與否將直接影響到系統(tǒng)的正常工作。

1)一點(diǎn)或多點(diǎn)接地的應(yīng)用

在低頻電路中,布線和元器件之間的寄生電感影響不大,因而常采用一點(diǎn)接地,以減少地線造成的地環(huán)路。在高頻電路中,布線和元器件之間的寄生電感和分布電容將造成各接地線間的耦合,影響比較突出,此時(shí)應(yīng)采用多點(diǎn)接地。

通常,頻率小于1MHz時(shí),采用一點(diǎn)接地;頻率高于10MHz時(shí),采用多點(diǎn)接地,頻率處于1~10MHz之間時(shí),若采用一點(diǎn)電路,其地線長(zhǎng)度不應(yīng)超過波長(zhǎng)的1/20。否則,應(yīng)采用多點(diǎn)接地。

2)數(shù)字地與模擬地的連接規(guī)則

數(shù)字地是指TTL或CMOS芯片、I/O接口電路芯片、CPU芯片等數(shù)字邏輯電路的接地端,以及A/D、D/A轉(zhuǎn)換器的數(shù)字地。模擬地是指放大器、采樣保持和A/D、D/A中模擬信號(hào)的接地端。在單片機(jī)系統(tǒng)中,數(shù)字地和模擬地應(yīng)分別接地。即使是一個(gè)芯片上有兩種地也要分別接地,然后在一點(diǎn)處把兩種地連接起來,否則數(shù)字回路通過模擬電路的地線再返回到數(shù)字電源,將會(huì)對(duì)模擬信號(hào)產(chǎn)生影響。

3)印刷電路板的地線分布原則

印刷電路板的地線分布原則如下:

(1)TTL和CMOS器件的接地線要成輻射網(wǎng)狀,避免環(huán)形。

(2)電路板上的地線的寬度要根據(jù)通過電流的大小而定,最好不小于3mm。在可能的情況下,地線盡量加寬。

(3)旁電路的地線不要太長(zhǎng)。

(4)功率地通過電流信號(hào)較大,地線應(yīng)較寬,必須與小信號(hào)地分開。

4)信號(hào)電纜屏蔽層的接地

信號(hào)電纜可以采用雙絞線和多芯線,有屏蔽和無屏蔽兩種情況。雙絞線具有抑制電磁干擾的作用,屏蔽線具有抑制靜電感應(yīng)的干擾作用。對(duì)于屏蔽線,屏蔽層最佳的接地點(diǎn)是在信號(hào)源側(cè)(一點(diǎn)接地)。9.3.4其它提高系統(tǒng)可靠性的方法

1)使用微處理器監(jiān)控電路

為了提高系統(tǒng)的可靠性,需要芯片生產(chǎn)商推出的微處理器監(jiān)控芯片,這些芯片具有如下功能。

(1)加電復(fù)位;

(2)監(jiān)控電壓變化;

(3)Watchdog電路;

(4)芯片功能;

(5)備份電池切換開關(guān)等。典型產(chǎn)品有MAXIM公司推出的MAX690A/MAX692A,MAX703A~MAX709/MAX813L,美國(guó)IPM公司生產(chǎn)的IPM706等。這些產(chǎn)品功能和原理相似,使用方法可查閱有關(guān)資料。

2)軟件抗干擾措施

對(duì)于開關(guān)量的輸入,在軟件上可以采取多次(至少兩次)讀入的操作,幾次讀入經(jīng)比較無誤后,再進(jìn)行確認(rèn)。開關(guān)輸出時(shí),可以對(duì)輸出量進(jìn)行回讀,經(jīng)比較確認(rèn)無誤后再輸出。對(duì)于按鈕和開關(guān),要用軟件延時(shí)的辦法避免機(jī)械抖動(dòng)造成的誤讀。

在條件控制中,對(duì)于條件控制的一次采樣、處理、控制輸出,應(yīng)該為循環(huán)的采樣、處理、控制輸出。但由于軟件設(shè)計(jì)靈活,節(jié)省硬件資源,所以軟件抗干擾技術(shù)已得到較為廣泛的應(yīng)用。軟件抗干擾技術(shù)的一般方法如下。

(1)軟件濾波。采用軟件的方法抑制疊加在輸入信號(hào)上的噪聲影響,可以通過軟件濾波法提出虛假信號(hào),求取真值。軟件濾波方法有兩種:一是算術(shù)平均濾波法;二是滑動(dòng)平均濾波法。

(2)開關(guān)量的輸入、輸出抗干擾設(shè)計(jì)。可采用對(duì)開關(guān)量輸入信號(hào)重復(fù)檢測(cè),對(duì)開關(guān)量輸出口數(shù)據(jù)刷新的方法。

(3)由于CPU受到干擾,程序計(jì)數(shù)器PC的狀態(tài)被破壞,導(dǎo)致程序從一個(gè)區(qū)域跳轉(zhuǎn)到另一個(gè)區(qū)域,或者程序在地址空間內(nèi)“亂飛”,或者進(jìn)入死循環(huán)。因此必須盡可能早地發(fā)現(xiàn)并采取措施,把程序納入正軌。為使“亂飛”的程序被攔截或程序擺脫死循環(huán)可采取指令冗余、軟件陷阱或“看門狗”等技術(shù)。

在日常工業(yè)生產(chǎn)和生活領(lǐng)域,通常需要進(jìn)行一些與時(shí)間、溫度有關(guān)的數(shù)據(jù)的采集與顯示。這就需要我們?cè)O(shè)計(jì)一個(gè)微機(jī)應(yīng)用系統(tǒng),能夠同時(shí)測(cè)量溫度和實(shí)時(shí)顯示溫度與當(dāng)前時(shí)間。9.4應(yīng)用系統(tǒng)實(shí)例1——溫度時(shí)間測(cè)量與顯示系統(tǒng)例如,在測(cè)量系統(tǒng)中,特別是長(zhǎng)時(shí)間無人值守的測(cè)控系統(tǒng)中,經(jīng)常需要記錄某些具有特殊意義的數(shù)據(jù)及其出現(xiàn)的時(shí)間和溫度。在本節(jié)中,主要介紹基于單片機(jī)的溫度與時(shí)間采集與顯示系統(tǒng)。9.4.1系統(tǒng)的功能分析

溫度與時(shí)間采集系統(tǒng)的功能主要是完成溫度、時(shí)間的采集與顯示,即

(1)實(shí)時(shí)溫度的采集。采用溫度傳感器完成溫度的采集,在實(shí)際應(yīng)用中,可以采用的溫度傳感器有模擬和數(shù)字兩種類型,采用數(shù)字傳感器可以降低系統(tǒng)設(shè)計(jì)的難度。由于在日常生活中,主要測(cè)量的是天氣問題,我們采用物美價(jià)廉的單線數(shù)字溫度傳感器18B20芯片。

(2)時(shí)鐘采集。單片機(jī)用軟件可以完成時(shí)鐘的功能,但時(shí)鐘精度差,因此在這里我們采用Dallas公司生產(chǎn)的串行實(shí)時(shí)時(shí)鐘芯片DS1302來完成時(shí)鐘的功能。采用串口與單片機(jī)進(jìn)行實(shí)時(shí)的通信。

(3)時(shí)鐘溫度的顯示。能夠?qū)崟r(shí)顯示當(dāng)前的時(shí)間與溫度,這里我們采用常見的LCD1602顯示模塊。9.4.2系統(tǒng)的設(shè)計(jì)方案

根據(jù)設(shè)計(jì)的功能要求,確定系統(tǒng)的設(shè)計(jì)方案。該系統(tǒng)主要由6個(gè)模塊組成,分別為單片機(jī)控制模塊,時(shí)鐘電路模塊,復(fù)位電路模塊,溫度采集電路模塊,時(shí)間采集電路模塊和時(shí)時(shí)溫度顯示電路模塊,如圖9.3所示。

圖9.3溫度時(shí)鐘系統(tǒng)采集框圖單片機(jī)主要完成整個(gè)系統(tǒng)的控制與調(diào)度,對(duì)信息進(jìn)行輸入、輸出、處理和交換;時(shí)鐘電路為單片機(jī)系統(tǒng)提供時(shí)間基準(zhǔn);復(fù)位電路主要完成單片機(jī)的初始化,它可以實(shí)現(xiàn)上電復(fù)位和手動(dòng)復(fù)位;溫度采集電路完成實(shí)時(shí)的溫度采集,在這里采用串行總線的方式完成數(shù)據(jù)的傳輸;時(shí)間采集電路主要完成精確的時(shí)鐘產(chǎn)生,產(chǎn)生精確的時(shí)分秒信號(hào);時(shí)間溫度顯示電路主要完成時(shí)間溫度的顯示。9.4.3系統(tǒng)硬件電路的設(shè)計(jì)

本實(shí)例中以DS18B20作為溫度傳感器,DS1320作為實(shí)時(shí)時(shí)鐘芯片,采用AT89S52作為微控制器,形成一個(gè)溫度時(shí)間補(bǔ)償和檢測(cè)系統(tǒng)。該系統(tǒng)的輸出為一個(gè)LCD顯示器——LCD1602,下面簡(jiǎn)要介紹每個(gè)具體電路。

1.單片機(jī)AT89S52

單片機(jī)采用Atmel公司的AT89S52芯片。AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8KB在線系統(tǒng)可編程Flash存儲(chǔ)器,使Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在線系統(tǒng)編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧8位CPU和在線系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、高效的解決方案。AT89S52具有以下標(biāo)準(zhǔn)功能:8千字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時(shí)器,2個(gè)數(shù)據(jù)指針,3個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)模式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。

2.實(shí)時(shí)時(shí)鐘電路

實(shí)時(shí)時(shí)鐘電路采用美國(guó)DALLAS公司的DS1302集成芯片。它是一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5~5.5V。它采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。

DS1302的引腳排列如圖9.4所示。其中VCC1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由VCC1或VCC2兩者中的較大者供電。當(dāng)VCC2大于VCC1+0.2V時(shí),VCC2給DS1302供電。當(dāng)VCC2小于VCC1時(shí),DS1302由VCC1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動(dòng)置高電平來啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc>2.0V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。SCLK為時(shí)鐘輸入端。

DS1302的控制字如圖9.5所示。控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中;位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù);為1則表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)為0表示要進(jìn)行寫操作,為1表示要進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。

圖9.4DS1302封裝圖

圖9.5DS1302的控制字在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。

DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字見表9.1。此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。

DS1302與CPU的連接需要三條線,即SCLK(7)、I/O(6)、RST(5)。表9.1日歷時(shí)間寄存器及其控制字

3.數(shù)字溫度傳感器

溫度采集電路采用美國(guó)Dallas半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820。它是支持“一線總線”接口的溫度傳感器,在其內(nèi)部使用了在板(ONB0ARD)專利技術(shù)。全部傳感元件和轉(zhuǎn)換電路集成在形如三極管的集成電路內(nèi)。一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測(cè)量系統(tǒng)的構(gòu)建引入了全新概念。

DS1820數(shù)字化溫度傳感器提供9~12位(二進(jìn)制)溫度讀數(shù),溫度信息經(jīng)過單線接口送入DS1820或從DS1820送出,因此從主機(jī)CPU到DS1820僅需一條線(和地線)。DS1820的電源可以由數(shù)據(jù)線本身提供而不需要外部電源,因?yàn)槊恳粋€(gè)DS1820在出廠時(shí)已經(jīng)給定了唯一的序號(hào),因此任意多個(gè)DS1820可以存放在同一條單線總線上,這允許在許多不同的地方放置溫度敏感器件。DS18B20的測(cè)量范圍從-55℃到+125℃增量值為0.5,可在1s(典型值)內(nèi)把溫度模擬信號(hào)變換成數(shù)字信號(hào)。

1)DS18B20的封裝

DS18B20的引腳采用To92和8PinSOIC封裝,外形和引腳排列如圖9.6所示。

DS18B20引腳定義:

·GND:電源地。

·DQ:數(shù)字信號(hào)輸入/輸出端。

·Vdd:外接供電電源輸入端(在寄生電源接線方式時(shí)接地)。

·NC:空引腳。

圖9.6DS18B20的封裝

2)DS18B20的構(gòu)成

DS18B20的內(nèi)部結(jié)構(gòu)如圖9.7所示,主要包括:寄生電源、溫度傳感器、64位激光(lasered)ROM、存放中間數(shù)據(jù)的高速暫存器RAM、非易失性溫度報(bào)警器TH和TL、配置寄存器等部分。

圖9.7DS18B20的內(nèi)部結(jié)構(gòu)

(1)寄生電源。寄生電源由二極管VD1、VD2、寄生電容C和電源檢測(cè)電路組成,電源檢測(cè)電路用于判定供電方式,DS18B20有兩種供電方式:3~5.5V的電源供電方式和寄生電源供電方式(直接從數(shù)據(jù)線獲取電源)。寄生電源供電時(shí),Vdd端接地,器件從單總線上獲取電源。當(dāng)I/O總線呈低電平時(shí),由電容C上的電壓繼續(xù)向器件供電。該寄生電源有兩個(gè)優(yōu)點(diǎn):第一,檢測(cè)遠(yuǎn)程溫度時(shí)無需本地電源;第二,缺少正常電源時(shí)也能讀ROM。

(2)64位激光ROM。ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看做是該DS18B20的地址序列碼。激光ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。64位激光ROM序列號(hào)的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號(hào),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。

(3)溫度傳感器。DS18B20中的溫度傳感器可以完成對(duì)溫度的測(cè)量。DS18B20的溫度測(cè)量范圍是-55℃~+125℃,分辨率的默認(rèn)值是12位。DS18B20溫度采集轉(zhuǎn)化后得到16位數(shù)據(jù),存儲(chǔ)在DS18B20的兩個(gè)8位RAM中,如表9.2所示。高字節(jié)的高5位S代表符號(hào)位,如果溫度值大于或等于0,符號(hào)位為0;溫度值小于0,符號(hào)位為1;低字節(jié)的第4位是小數(shù)部分,中間7位是整數(shù)部分。測(cè)得的溫度和數(shù)字量的關(guān)系如表9.3所示。表9.2DS18B20的16位數(shù)據(jù)位定義表9.3

DS18B20溫度與數(shù)字輸出的典型值

(4)內(nèi)部存儲(chǔ)器。DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存器RAM和一個(gè)非易失性的可電擦除的EEPROM,EEPROM用于存放高溫度和低溫度觸發(fā)器TH、TL和配置寄存器的內(nèi)容。高速暫存存儲(chǔ)器由9個(gè)字節(jié)組成,其分配如圖9.8所示。

①第1個(gè)和第2個(gè)字節(jié)是測(cè)得的溫度信息,第1個(gè)字節(jié)的內(nèi)容是溫度的低8位,第2個(gè)字節(jié)是溫度的高8位。

②第3個(gè)和第4個(gè)字節(jié)是TH和TL的非易失性復(fù)制,在每一次上電復(fù)位時(shí)被刷新(從EEPROM中復(fù)制到暫存器中)。③第5個(gè)字節(jié)是配置寄存器,每次上電后配置器也會(huì)刷新。

④第6、7、8個(gè)字節(jié)保留。

⑥第9個(gè)字節(jié)是冗余校驗(yàn)字節(jié)。

(5)配置寄存器。暫存器的第5字節(jié)是配置寄存器,可通過相應(yīng)的寫命令進(jìn)行配置,其內(nèi)容如表9.4所示。

圖9.8DS18B20的內(nèi)部存儲(chǔ)器結(jié)構(gòu)表9.4配置寄存器未定義

低5位一直都是“1”,TM是測(cè)試模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng)。R1和R2用來設(shè)置DS18B20的分辨率,如表9.5所示(DS18B20出廠時(shí)被設(shè)置為12位)。表9.5分辨率配置4.時(shí)鐘溫度顯示電路

在本例中時(shí)鐘溫度顯示電路采用字符型液晶顯示模塊LCD1602,長(zhǎng)沙太陽人電子有限公司的1602字符型液晶顯示器LCD1602是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,它可以顯示兩行字符,每行可以顯示16個(gè)字。1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別。

1)1602LCD主要技術(shù)參數(shù)

顯示容量:16×2個(gè)字符。

芯片工作電壓:4.5~5.5V。

工作電流:2.0mA(5.0V)。

模塊最佳工作電壓:5.0V。

字符尺寸:2.95×4.35(W×H)mm。

2)引腳功能說明

第1腳:VSS為地電源。

第2腳:VDD接5V正電源。

第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10kΩ的電位器調(diào)整對(duì)比度。

第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器;低電平時(shí)選擇指令寄存器。第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí),可以讀忙信號(hào);當(dāng)RS為高電平、R/W為低電平時(shí),可以寫入數(shù)據(jù)。

第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。

第15腳:背光源正極。

第16腳:背光源負(fù)極。

3)1602LCD的指令說明和時(shí)序

1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表9.6所示。表9.6控制命令表

1602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的(說明:1為高電平、0為低電平)。

指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置。

指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。

指令3:光標(biāo)和顯示模式設(shè)置,I/D:光標(biāo)移動(dòng)方向,高電平表示右移,低電平表示左移;S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平表示無效。

指令4:顯示開/關(guān)控制,D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示;C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo);B:控制光標(biāo)是否閃爍,高電平表示閃爍,低電平表示不閃爍。

指令5:光標(biāo)或字符移位,S/C:高電平時(shí),移動(dòng)顯示的文字;低電平時(shí),移動(dòng)光標(biāo)。

指令6:功能設(shè)置命令,DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線;N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示;F:低電平時(shí)顯示5×7的點(diǎn)陣字符,高電平時(shí)顯示5×10的點(diǎn)陣字符。

指令7:字符發(fā)生器RAM地址設(shè)置。

指令8:DDRAM地址設(shè)置。

指令9:讀忙標(biāo)志位和光標(biāo)地址,BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),低電平表示不忙。

指令10:寫數(shù)據(jù)。

指令11:讀數(shù)據(jù)。

讀、寫操作時(shí)序分別如圖9.9和9.10所示。

圖9.9讀操作時(shí)序

圖9.10寫操作時(shí)序

4)1602LCD的RAM地址映射和標(biāo)準(zhǔn)字庫表

液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志位,若為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,1602的內(nèi)部顯示地址如圖9.11所示。

圖9.111602LCD內(nèi)部顯示地址例如第二行第一個(gè)字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒定為高電平1,所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。

在對(duì)液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。

1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如圖9.12所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。

圖9.12字符代碼與圖形對(duì)應(yīng)圖

5)1602LCD的一般初始化(復(fù)位)過程

①延時(shí)15ms。

②寫指令38H(不檢測(cè)忙信號(hào))。

③延時(shí)5ms。

④寫指令38H(不檢測(cè)忙信號(hào))。

⑤延時(shí)5ms。

⑥寫指令38H(不檢測(cè)忙信號(hào))。以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測(cè)忙信號(hào)。

⑦寫指令38H:顯示模式設(shè)置。

⑧寫指令08H:顯示關(guān)閉。⑨寫指令01H:顯示清屏。

⑩寫指令06H:顯示光標(biāo)移動(dòng)設(shè)置。

B11寫指令0CH:顯示開和光標(biāo)設(shè)置。

5.復(fù)位電路

復(fù)位電路產(chǎn)生復(fù)位信號(hào),復(fù)位信號(hào)送入RST后還要送至片內(nèi)的施密特觸發(fā)器,由片內(nèi)復(fù)位電路在每個(gè)機(jī)器周器的S5P2時(shí)刻對(duì)觸發(fā)器輸出采樣信號(hào),然后由內(nèi)部復(fù)位電路產(chǎn)生復(fù)位操作所要的信號(hào)。復(fù)位電路具有上電自動(dòng)復(fù)位和按鍵復(fù)位。

上電自動(dòng)復(fù)位原理:RST引腳是復(fù)位信號(hào)的輸入端,只要高電平的復(fù)位信號(hào)持續(xù)兩個(gè)機(jī)器周期以上的有效時(shí)間,就可以使單片機(jī)上電復(fù)位信號(hào)無效。按鍵復(fù)位在此不再作過多的介紹,其原理和上電復(fù)位是相同的。但其采用的是脈沖復(fù)位電路和電平復(fù)位電路兩種。系統(tǒng)的復(fù)位電路如圖9.13所示。

圖9.13系統(tǒng)的復(fù)位電路

6.時(shí)鐘電路

本系統(tǒng)中采用了12MHz的晶振,給系統(tǒng)提供時(shí)鐘。圖中的C6、C7電容起著系統(tǒng)時(shí)鐘頻率微調(diào)和穩(wěn)定的作用。設(shè)計(jì)中一定要注意正確選擇參數(shù)(30pF),并保證電路的對(duì)稱性。系統(tǒng)時(shí)鐘電路如圖9.14所示。

圖9.14系統(tǒng)時(shí)鐘電路

7.電路原理圖及I/O分配

本例總的電路原理圖如圖9.15所示,單片機(jī)的I/O口與各模塊引腳的連接和相關(guān)的地址分配如下:

·P2.3:DS1302的數(shù)據(jù)輸入、輸出引腳端口。

·P2.4:DS1302的串行時(shí)鐘輸入端口。

·P2.5:LCD1602的片選使能信號(hào),下降沿觸發(fā)。

·P2.6:LCD1602的讀寫控制信號(hào),高電平表示讀,低電平表示寫。

·P2.7:LCD1602的寄存器選擇信號(hào),高電平表示數(shù)據(jù),低電平表示指令。

·P3.4:溫度傳感器DS18B20的數(shù)據(jù)輸入端口。

·P3.6:DS1302的復(fù)位引腳端口。9.4.4控制過程的軟件程序?qū)崿F(xiàn)

1)本系統(tǒng)的軟件功能

本系統(tǒng)主要完成數(shù)據(jù)信息的采集與顯示,在這里要完成時(shí)鐘的接收和溫度數(shù)據(jù)的采集和顯示。因此在軟件的設(shè)計(jì)中,要考慮對(duì)采集芯片DS1302和DS18B20的軟件操作。單片機(jī)控制DS1302時(shí)鐘芯片的軟件主要完成芯片的初始化和數(shù)據(jù)的讀取;而對(duì)于DS18B20芯片,涉及的軟件除了對(duì)芯片的初始化和對(duì)采集的數(shù)據(jù)讀取外,還要完成對(duì)溫度的檢測(cè)和補(bǔ)償,通過AT89S52完成對(duì)DS18B20芯片的控制和數(shù)據(jù)傳輸,查詢當(dāng)前的DS18B20溫度采集和轉(zhuǎn)換是否完成是關(guān)鍵,并且完成對(duì)轉(zhuǎn)換后的數(shù)據(jù)的讀取。整個(gè)系統(tǒng)的流程如圖9.16所示。

圖9.16系統(tǒng)的軟件流程圖

2)系統(tǒng)的軟件代碼

系統(tǒng)的主程序用C51編寫,主要完成對(duì)DS18B20的調(diào)用中斷管理、測(cè)量溫度值的計(jì)算及溫度值的顯示功能,對(duì)DS1302的實(shí)時(shí)時(shí)鐘時(shí)間的數(shù)據(jù)讀取。在這里,DS18B20的分辨率可以通過編程進(jìn)行選擇。在這里我們?cè)敿?xì)的列出系統(tǒng)的C語言程序代碼。/**************************************

使用1602液晶顯示+DS1302+C51時(shí)鐘+DS18B20溫度顯示

注:AT89C51使用12MHz晶振

/*************************************/

#include<reg52.h>

#include<string.h>

#include<intrins.h>

#defineData_PortP0

#defineucharunsignedchar

#defineuintunsignedint

//LCD與單片機(jī)連接口

#defineBusy0x80//用于檢測(cè)LCM狀態(tài)字中的Busy標(biāo)識(shí)

SbitLCD_RW=P2^1;

SbitLCD_RS=P2^0;

SbitLCD_EN=P2^2;

//DS1302與單片機(jī)的接口

SbitT_CLK=P2^4;

SbitT_IO=P2^3;

SbitT_RST=P3^6;

//DS18B20與單片機(jī)的接口

SbitDQ=P3^4;

SbitACC0=ACC0;

SbitACC=ACC^7;

uinttvalue;//溫度值

uchartflag;//溫度正負(fù)標(biāo)志

uchardatadisdata[5];//存放溫度值

uchardatainit_time[7]={0x00,0x00,0x12,0x03,0x07,0x06,0x13};

//初始化后設(shè)置為:13年06月07日,星期五,12點(diǎn)0分0秒

Uchardataclk_time[7];//存放時(shí)間值

//子函數(shù)列表

ViodDelay(intdec);//延時(shí)子程序

//LCD1602子函數(shù)

ViodWriteDataLCM(ucharWDLCM);//寫顯示數(shù)據(jù)到LCD

ViodWriteCommandLCM(ucharWCLM);//寫指令數(shù)據(jù)到LCD

bitReadStatusLCM(void);//檢測(cè)忙狀態(tài)

voidInit_LCM(void);//LCM初始化

voidDispByte_LCM(ucharY,ucharX,ucharDData);//按指定位置顯示一字符

voidDispList_LCM(ucharX,ucharY,uchardata*AData);//按指定位置顯示一字符

//DS1302子函數(shù)

VoidInputByte_DS1302(uchard);//實(shí)時(shí)時(shí)鐘寫入一字節(jié)

VoidIoutputByte_DS13302(uchard);//實(shí)時(shí)時(shí)鐘寫入一串字節(jié)

ViodWrite_DS1302(ucharucAddr,ucharucDa);//往DS1302寫入數(shù)據(jù)

UcharRead_DS1302(ucharucAddr);//讀取DS1302某地址的數(shù)據(jù)

ViodSet_DS1302(uchardata*pClock);//設(shè)置初始時(shí)間

ViodTime_DS1302(Viod);//讀取實(shí)時(shí)時(shí)鐘

ViodDisp_DS1302(Viod);//顯示時(shí)間

//DS18B20子函數(shù)

ViodDelay_18B20(uinti);//DS18B20復(fù)位

UcharRead_DS18B20(Viod);//從DS18B20中讀數(shù)據(jù)

ViodWrite_DS18B20(ucharwdata);//從DS18B20中寫數(shù)據(jù)

ViodRead_DS18B20_temp(Viod);//讀取溫度值并轉(zhuǎn)換

ViodDisp_DS18B20(Viod);//溫度值顯示

/*******************************

函數(shù):延時(shí)子程序

*******************************/

ViodDelay(intdec)

{inti;

while(dec--)

{for(i=0;i<250;t++)

{_nop_();

}

}

}

/*******************************

函數(shù):LCD1602驅(qū)動(dòng)程序

*******************************/

/*******************************

函數(shù):寫顯示數(shù)據(jù)到LCD

********************************/

viodWriteDataLCM(ucharWDLCM)

{While(ReadStatusLCM());//檢測(cè)忙

LCD_RS=1;

LCD_RW=0;

LCD_EN=0;

Data_port=WDLCM;

_nop_();_nop_();_nop_();_nop_();

LCD_EN=1;

_nop_();_nop_();_nop_();_nop_();

LCD_EN=0;

}

/*******************************

函數(shù):寫指令數(shù)據(jù)到LCD

*******************************/

viodWriteCommandLCM(ucharWCLCM)

{While(ReadStatusLCM());//檢測(cè)忙

LCD_RS=0;

LCD_RW=0;

LCD_EN=0;

Data_port=WCLCM;

_nop_();_nop_();_nop_();_nop_();

LCD_EN=1;

_nop_();_nop_();_nop_();_nop_();

LCD_EN=0;

}

/******************************

函數(shù):檢測(cè)忙狀態(tài)

*******************************/

bitReadStatusLCM(viod)

{bitresult;

LCD_RS=0;

LCD_RW=1;

LCD_EN=1;

_nop_();_nop_();_nop_();_nop_();

result=(bit)(Data_Port&Busy);

LCD_EN=0;//檢測(cè)忙信號(hào)

returnresult;

}

/******************************

函數(shù):LCD1602初始化

*******************************/

viodInit_LCM(viod)

{Data_Port=0;

WriteCommandLCM(0x38);

Delay(5);

WriteCommandLCM(0x38);

Delay(5);

WriteCommandLCM(0x38);

Delay(5);

WriteCommandLCM(0x08);//關(guān)閉顯示

WriteCommandLCM(0x01);//顯示清屏

WriteCommandLCM(0x06);//顯示光標(biāo)移動(dòng)設(shè)置

WriteCommandLCM(0x0c);//顯示開及關(guān)光標(biāo)設(shè)置

}

/******************************

函數(shù):按指定位置顯示一個(gè)字符

*******************************/

viodDispByte_LCM(ucharY;ucharX;uchardataDData)

{Y&=0x01;

X&=0xf;//限制X不能大于15,Y不能大于1

If(Y)X|=0xC0;//Y=0,顯示第一行;Y=1,顯示第二行

X|=0x80;//算出指令碼

WriteCommandLCM(X);//發(fā)送地址碼

WriteCommandLCM(DData);//顯示單個(gè)字符

}

/******************************

函數(shù):按指定位置顯示一個(gè)串符

*******************************/

viodDispListe_LCM(ucharY;ucharX;uchardata*AData)

{ucharListLength,j;

ListLength=strlen(AData);

Y&=0x1;

X&=0xf;//限制X不能大于15,Y不能大于1

If(Y)X|=0xC0;//Y=0,顯示第一行;Y=1,顯示第二行

X|=0x80;//算出指令碼

WriteCommandLCM(X);//發(fā)送地址碼

for(j=0;j<ListLength;i++)

{

WriteDataLCM(AData[j]);//顯示單個(gè)字符

X++;

}

}

/******************************

函數(shù):DS1302讀寫程序

*******************************/

/***************************

函數(shù):實(shí)時(shí)時(shí)鐘寫入一字符

*******************************/

viodIputByte_DS1302(uchard)

{uchari;

ACC=d;

for(i=8;i>0;i--)

{

T_IO=ACC0;//相當(dāng)于匯編中的RRC

T_CLK=1;

T_clk=0;

ACC=ACC>>1;

}

}

/******************************

函數(shù):實(shí)時(shí)時(shí)鐘讀取一字節(jié)

*******************************/

ucharOutputByte_DS1302(viod)

{

uchari;

for(i=8;i>0;i--)

{

ACC=ACC>>1;//相當(dāng)于匯編中的RRC

ACC7=T_IO;

T_CLK=1;

T_CLK=0;

}

Return(ACC);

}

/******************************

函數(shù):往DS1302寫入數(shù)據(jù)

*******************************/

ViodWrite_DS1302(ucharucAddr,ucharucDa)

{

T_RST=0;

T_CLK=0;

T_RST=1;

InputByte_DS1302(ucAddr);//地址,命令

InputByte_DS1302(ucDa);//寫1Byte

T_CLK=1;

T_RST=0;

}

/*******************************

函數(shù):讀取DS1302某地址的數(shù)據(jù)

********************************/

ucharRead_DS_1302(ucharucAddr)

{

ucharucData;

T_RST=0;

T_CLK=0;

T_RST=1;

InputByte_DS1302(ucAddr);//地址,命令

ucData=OutputByte_DS1302();//讀1Byte

T_CLK=1;

T_RST=0;

return(ucData);

}

/*******************************

函數(shù):設(shè)置初始時(shí)間

********************************/

voidSet_DS1302(uchardata*pClock)

{

uchari;

ucharwaAddr=0x80;

Write_DS1302(0x8e,0x00);//控制命令,WP=0,寫操作

for(i=7;i>0;i--)

{

Write_DS1302(wAddr,*pClock);//秒、分、時(shí)、日、月、星期、年

pClock++;

waAddr+=2;

}

Write_DS1302(0x8e,0x80);//控制命令,WP=1,寫保護(hù)

}

/*******************************

函數(shù):從實(shí)時(shí)時(shí)鐘芯片讀取時(shí)間

********************************/

VoidTime_DS1302(viod)

{

uchari;

ucharraddr=0x81;

for(i=7;i>0;i--)

{

Clk_time[i]=Read_DS1302(raddr);

raddr+=2;

}

}

/********************************

函數(shù):顯示從DS1302中讀取的時(shí)間

*********************************/

voidDisp_DS1302(viod)

{

DispByte_LCM(0,0x2,clk_time[0]);//顯示年月日,星期,時(shí):分:秒

DispByte_LCM(0,0x3,′-′);

DispByte_LCM(0,0x4,clk_time[1]);

DispByte_LCM(0,0x5,′-′);

DispByte_LCM(0,0x6,clk_time[2]);

DispByte_LCM(0,0xA,clk_time[3]);

DispByte_LCM(1,0xB,clk_time[4]);

DispByte_LCM(1,0x2,′:′);

DispByte_LCM(1,0x2,clk_time[5]);

DispByte_LCM(1,0x2,′:′’);

DispByte_LCM(1,0x2,clk_time[6]);

}

/********************************

函數(shù):DS18B20程序

*********************************/

/********************************

函數(shù):延時(shí)10*i微秒

*********************************/

voidDelay_18B20(uinti)

{

while(i--);

}

/*********************************

函數(shù):DS18B20復(fù)位

**********************************/

voidRst_DS18B20(viod)

{

DQ=1;

Delay_18B20(4);//DQ復(fù)位

DQ=0;//延時(shí)

Delay_18B20(100);//DQ拉低

DQ=1;//精確延時(shí)大于480μs

Delay_18B20(40);//拉高

}

/**********************************

函數(shù):DS18B20復(fù)位

***********************************/

ucharRead_DS18B20(viod)

{

uchari=0;

uchardat-0;

for(i=8;i>0;i--)

{

DQ=0;//給脈沖信號(hào)0

dat>>=1;

DQ=1;//給脈沖信號(hào)1

if(DQ)

dat|=0x80;

Delay_18B20(10);

}

return(dat);

}

/***********************************

函數(shù):向DS18B20中寫數(shù)據(jù)

************************************/

viodWrite_DS18B20(ucharwdata)

{

uchari=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=wdata&0x01;

Delay_18B20(10);

DQ=1;

wdata>>=1;

}

}

/************************************

函數(shù):讀取溫度值并轉(zhuǎn)換

*************************************/

viodRead_DS18B20_temp(viod)

{

uchara,b;

Rst_DS18B20();

Write_DS18B20(0xcc);//跳過讀序列號(hào)

Write_DS18B20(0x44);//啟動(dòng)溫度轉(zhuǎn)換

Rst_DS18B20();

Write_DS18B20(0xcc);//跳過讀序列號(hào)

Write_DS18B20(0xbe);//讀取

a=Read_DS18B20(0xbe);

b=Read_DS18B20(0xbe);

tvalue=b;

tvalue<<=8;

tvalue=tvalue|a;

if(tvalue<0x0fff)

tflag=0;

else

{

tvalue=~tvalue+1;

tflag=1;

}

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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)論