紅外線測溫儀(重用)√
紅外線測溫儀(重用)√,紅外線,測溫,重用
第 1 頁 共 46 頁引言隨著“信息時代”的到來,作為獲取信息的手段——傳感器技術(shù)得到了顯著的進(jìn)步,其應(yīng)用領(lǐng)域越來越廣泛,對其要求越來越高,需求越來越迫切。傳感器技術(shù)已成為衡量一個國家科學(xué)技術(shù)發(fā)展水平的重要標(biāo)志之一。因此,了解并掌握傳感器的基本結(jié)構(gòu)、工作原理及特性是非常重要的。為了提高對傳感器的認(rèn)識和了解,尤其是對溫度傳感器的深入研究以及其用法與用途,基于實用、廣泛和典型的原則而設(shè)計了本系統(tǒng)。本文利用單片機(jī)結(jié)合傳感器技術(shù)而開發(fā)設(shè)計了紅外抄表系統(tǒng)。文中把傳感器理論與單片機(jī)實際應(yīng)用有機(jī)結(jié)合,詳細(xì)地講述了利用溫度傳感器 DS18B20 測量環(huán)境溫度,以及實現(xiàn)紅外數(shù)據(jù)傳輸?shù)倪^程。本設(shè)計應(yīng)用性比較強(qiáng),只要對電路部分稍加改裝,就可以實現(xiàn)抄讀其它的數(shù)字儀表設(shè)備:如數(shù)字電度表,數(shù)字水表等等。設(shè)計后的系統(tǒng)具有操作方便,控制靈活等優(yōu)點。其主要功能和指標(biāo)如下:1、利用溫度傳感器(DS18B20)測量某一點環(huán)境溫度;2、測量范圍為-55℃~+99℃,精度為±0.5℃; 3、用 4 位數(shù)碼管進(jìn)行顯示實際溫度值顯示;4、手持端通過紅外發(fā)射管發(fā)射測溫信號;5、測溫端通過紅外發(fā)射管發(fā)送到手持端; 6、手持端可以隨時查看指定待測物體的溫度值。設(shè)計的核心是環(huán)境溫度的測量以及紅外數(shù)據(jù)的發(fā)射和接收,和溫度的顯示。文中對每個部分功能、實現(xiàn)過程作了詳細(xì)地介紹。 第 2 頁 共 46 頁1 方案選擇該系統(tǒng)主要由溫度測量和數(shù)據(jù)采集和發(fā)送三部分組成。下面列舉兩種實現(xiàn)方案:方案一:溫度檢測可以使用低溫?zé)崤蓟蜚K電阻,數(shù)據(jù)采集部分則使用帶有 A/D 通道的單片機(jī)。考慮到一般的 A/D 輸入通道都只能接收大信號,所以還要設(shè)計相應(yīng)的放大電路。而模擬信號在長距離傳輸過程中,抗電磁干擾是令人傷腦筋的問題。此方案的軟件簡單,但硬件復(fù)雜,且檢測點數(shù)追加時,各敏感元件參數(shù)的不一致性,都將會導(dǎo)致誤差的產(chǎn)生,難以完全清除,而且成本會有較大增長幅度。方案二:使用單片機(jī)和數(shù)字式單總線溫度傳感器構(gòu)成。其具有下列特點:①具有高的測量精度和分辨率,測量范圍大;②抗干擾能力強(qiáng),穩(wěn)定性好;③信號易于處理、傳送和自動控制;④便于動態(tài)及多路測量,讀數(shù)直觀;⑤安裝方便,維護(hù)簡單,工作可靠性高。單總線溫度傳感器可以采用 DALLAS 公司生產(chǎn)的 DS18B20 系列,這類溫度傳感器直接輸出數(shù)字信號,且多路溫度傳感器可以掛在 1 條總線上,共同占用單片機(jī)的1 個 I/O 口即可實現(xiàn)。在提升單片機(jī) I/O 口驅(qū)動能力的前提下,理論上可以任意擴(kuò)充檢測的溫度點數(shù)。比較兩個方案后可以發(fā)現(xiàn),方案二更適合于用作本系統(tǒng)的實施方案。盡管方案二不需要 A/D,但考慮到系統(tǒng)擴(kuò)充等因素,單片機(jī)可以選用 AT98C2051。 第 3 頁 共 46 頁2 硬件部分采用方案二的硬件設(shè)計比較簡單,系統(tǒng)構(gòu)成如圖 1 所示。 圖 1溫度測試系統(tǒng)和手持接收系統(tǒng)組成框圖2.1 DS18B20介紹DALLAS 公司的 DS18B20 單總線數(shù)字傳感器工作溫度范圍是-55℃~125℃,在-30℃~85℃范圍內(nèi)溫度測量精度為±0.5℃;具有溫度報警功能,用戶可設(shè)置最高和最低報警溫度,且設(shè)置值掉電不丟失;采用 DALLAS 公司特有的單總線通信協(xié)議,只用一條數(shù)據(jù)線就可實現(xiàn)與 MCU 的通信;此外,DS18B20 能夠直接從數(shù)據(jù)線獲得電源,無需外部電池供電。DS18B20 通過使用在板(on_board)溫度測量專利技術(shù)來測量溫度。其溫度測量電路是通過計數(shù)時鐘周期來實現(xiàn)的,DS18B20 有兩個溫度系數(shù)振蕩器,溫度測量時對高溫度系數(shù)振蕩器產(chǎn)生的門開同期內(nèi),低溫度系數(shù)振蕩器經(jīng)歷的時鐘周期的個數(shù)進(jìn)行計數(shù)而得到的。DS18B20 數(shù)字溫度傳感器提供 9 位(二進(jìn)制)溫度讀數(shù),指示器件溫度,所以無需A/D 轉(zhuǎn)換。信息經(jīng)過單線接口送入 DS18B20 或從 DS18B20 送出,因此從主機(jī) CPU 到DS18B20 僅需一條線連接,而且 DS18B20 的電源可由數(shù)據(jù)線本身提供(相對于外部電源,轉(zhuǎn)換時間要延長)。因此每一個 DS18B20 在出廠時已經(jīng)給定了唯一的序號因此從理論DS18B20數(shù)碼管 紅外發(fā)射紅外接收AT89C51紅外接收紅外發(fā)射按鍵數(shù)碼管AT89C51 第 4 頁 共 46 頁AT89C51DS18B20上說任意多個 DS18B20 可以連接在一條單線總線上。DS18B20 的測量范圍從-55℃到+125℃,增量為 0.5℃(最高精度可達(dá) 0.1℃),轉(zhuǎn)換速度小于 1s(典型值)。而在本遙測系統(tǒng)中采用外部電源供電溫度測量工作方式,其中電阻 R 是上拉電阻,使得單線總線的空閑狀態(tài)是高電平。它與 CPU(AT89C51)的接法如圖 2。 5 VR地圖 2 DS18B20 與單片機(jī)的連接由于 DS18B20 只有一根數(shù)據(jù)線。因此它和主機(jī)(單片機(jī))通信是需要串行通信,而 AT89C51 有兩個串行端口,所以可以不用軟件來模擬實現(xiàn)。經(jīng)過單線接口訪問DC18B20 必須遵循如下協(xié)議:初始化、ROM 操作命令、存儲器操作命令和控制操作。要使傳感器工作,一切處理均從序列開始。主機(jī)發(fā)送(Tx)--復(fù)位脈沖(最短為 480μs 的低電平信號)。接著主機(jī)便釋放此線并進(jìn)入接收方式(Rx)??偩€經(jīng)過 4.7K 的上拉電阻被拉至高電平狀態(tài)。在檢測到I/O 引腳上的上升沿之后,DS18B20 等待 15-60μs,并且接著發(fā)送脈沖(60-240μs 的低電平信號)。然后以存在復(fù)位脈沖表示 DS18B20 已經(jīng)準(zhǔn)備好發(fā)送或接收,然后給出正確的 ROM 命令和存儲操作命令的數(shù)據(jù)。DS18B20 通過使用時間片來讀出和寫入數(shù)據(jù),時間片用于處理數(shù)據(jù)位和進(jìn)行何種指定操作的命令。它有寫時間片和讀時間片兩種。寫時間片:當(dāng)主機(jī)把數(shù)據(jù)線從邏輯高電平拉至邏輯低電平時,產(chǎn)生寫時間片。有兩種類型的寫時間片:寫 1 時間片和寫 0 時間片。所有時間片必須有 60 微秒的持續(xù)期,在各寫周期之間必須有最短為 1 微秒的恢復(fù)時間。讀時間片:從 DS18B20 讀數(shù)據(jù)時,使用讀時間片。當(dāng)主機(jī)把數(shù)據(jù)線從邏輯高電平拉至邏輯低電平時產(chǎn)生讀時間片。數(shù)據(jù)線在邏輯低電平必須保持至少 1 微秒;來自DS18B20 的輸出數(shù)據(jù)在時間下降沿之后的 15 微秒內(nèi)有效。為了讀出從讀時間片開始算起 15 微秒的狀態(tài),主機(jī)必須停止把引腳驅(qū)動拉至低電平。在時間片結(jié)束時,I/O 引腳經(jīng)過外部的上拉電阻拉回高電平,所有讀時間片的最短持續(xù)期為 60 微秒,包括兩個讀周期間至少 1μs 的恢復(fù)時間。 第 5 頁 共 46 頁一旦主機(jī)檢測到 DS18B20 的存在,它便可以發(fā)送一個器件 ROM 操作命令。所有 ROM操作命令均為 8 位長。DS18B20 的引腳定義和封裝形式如圖 3 所示。DQ 為數(shù)字信號輸入/輸出端;GND 為電源地;VDD 為外接電源。DS18B20 的光刻 ROM 中存有 64 位序列號,它可以看作是該 DS18B20 的地址序列碼。64 位光刻 ROM 的排列是:開始 8 位(28H)是產(chǎn)品類型標(biāo)號,接著的 48 位是該DS18B20 自身的序列號,最后 8 位是前面 56 位的循環(huán)冗余校驗碼(CRC=X8+X5+X4+1)。光刻 ROM 的作用是使每一個 DS18B20 擁有惟一的地址序列碼,以確保在一根總線上掛接多個 DS18B20。所有的串行通訊,讀寫每一個 bit 位數(shù)據(jù)都必須嚴(yán)格遵守器件的時序邏輯來編程,同時還必須遵守總線命令序列,對單總線的 DS18B20 芯片來說,訪問每個器件都要遵守下列命令序列:首先是初始化;其次執(zhí)行 ROM 命令;最后就是執(zhí)行功能命令(ROM 命令和功能命令后面以表格形式給出)。 如果出現(xiàn)序列混亂,則單總線器件不會響應(yīng)主機(jī)。當(dāng)然,搜索 ROM 命令和報警搜索命令,在執(zhí)行兩者中任何一條命令之后,要返回初始化。 基于單總線上的所有傳輸過程都是以初始化開始的,初始化過程由主機(jī)發(fā)出的復(fù)位脈沖和從機(jī)響應(yīng)的應(yīng)答脈沖組成。應(yīng)答脈沖使主機(jī)知道,總線上有從機(jī),且準(zhǔn)備就緒。在主機(jī)檢測到應(yīng)答脈沖后,就可以發(fā)出 ROM 命令。這些命令與各個從機(jī)設(shè)備的唯一 64 位 ROM 代碼相關(guān)。在主機(jī)發(fā)出 ROM 命令,以訪問某個指定的 DS18B20,接著就可以發(fā)出 DS18B20 支持的某個功能命令。這些命令允許主機(jī)寫入或讀出 DS18B20 便箋式RAM、啟動溫度轉(zhuǎn)換。軟件實現(xiàn) DS18B20 的工作嚴(yán)格遵守單總線協(xié)議:(1)主機(jī)首先發(fā)出一個復(fù)位脈沖,信號線上的 DS18B20 器件被復(fù)位。(2)接著主機(jī)發(fā)送 ROM 命令,程序開始讀取單個在線的芯片 ROM 編碼并保存在單片機(jī)數(shù)據(jù)存儲器中,把用到的 DS18B20 的 ROM 編碼離線讀出,最后用一個二維數(shù)組保存ROM 編碼,數(shù)據(jù)保存在 X25043 中。(3)系統(tǒng)工作時,把讀取了編碼的 DS18B20 掛在總線上。發(fā)溫度轉(zhuǎn)換命令,再總線復(fù)位。(4)然后就可以從剛才的二維數(shù)組匹配在線的溫度傳感器,隨后發(fā)溫度讀取命令就可以獲得對應(yīng)的溫度值了。在主機(jī)初始化過程,主機(jī)通過拉低單總線至少 480us,來產(chǎn)生復(fù)位脈沖。接著,主機(jī)釋放總線,并進(jìn)入接收模式。當(dāng)總線被釋放后,上拉電阻將單總線拉高。在單總線器件檢測到上升沿后,延時 15~60us,接著通過拉低總線 60-240us,以產(chǎn)生應(yīng)答脈沖。寫時序均起始于主機(jī)拉低總線,產(chǎn)生寫 1 時序的方式:主機(jī)在拉低總線后,接著 第 6 頁 共 46 頁必須在 15us 之內(nèi)釋放總線。產(chǎn)生寫 0 時序的方式:在主機(jī)拉低總線后,只需在整個時序期間保持低電平即可(至少 60us)。在寫字節(jié)程序中的寫一個 bit 位的時候,沒有按照通常的分別寫 0 時序和寫 1 時序,而是把兩者結(jié)合起來,當(dāng)主機(jī)拉低總線后在 15us 之內(nèi)將要寫的位 c 給 DO:如果 c是高電平滿足 15us 內(nèi)釋放總線的要求,如果 c 是低電平,則 DO=c 這條語句仍然是把總線拉在低電平,最后都通過延時 58us 完成一個寫時序(寫時序0 或?qū)憰r序 1)過程。每個讀時隙都由主機(jī)發(fā)起,至少拉低總線 1us,在主機(jī)發(fā)起讀時序之后,單總線器件才開始在總線上發(fā)送 0 或 1。所有讀時序至少需要 60us。單片機(jī)通過命令實現(xiàn)對 DS18B20 的控制,其支持的主要命令如表 1 所示。表 1 DS18B20 主要命令及其功能說明命令碼 功能說明 命令碼 功能說明33H 讀 ROM 中的 64 位地址序列碼 BEH 讀 9 字節(jié)暫存寄存器55H只有地址碼匹配的 DS18B2 才能接收后續(xù)的命令4EH寫入溫度上/下限,緊隨其后是 2 字節(jié)數(shù)據(jù),對應(yīng)上限和下限值F0H鎖定總線上 DS18B20 的個數(shù)和識別其 ROM 中的 64 位地址序列碼48H將 9 字節(jié)暫存寄存器的第 3和 4 字節(jié)復(fù)制到 EEPROM 中ECH只有溫度超過上限或下限的DS18B20 才做出響應(yīng)B8H將 EEPROM 的內(nèi)容恢復(fù)到暫存寄存器的第 3 和 4 字節(jié)44H啟動 DS18B20 進(jìn)行溫度轉(zhuǎn)換,結(jié)果存入 9 字節(jié)的暫存寄存器B4H讀供電模式,寄生供電時DS18B20 發(fā)送 0,外接電源時DS18B20 發(fā)送 1CCH忽略地址序列碼,適合單片DS18B202.2 單片機(jī)的選擇(1)AT89C51 的特性及引腳說明①主要特性·與MCS-51 兼容 ·4K字節(jié)可編程閃爍存儲器 ·壽命:1000寫/擦循環(huán) 第 7 頁 共 46 頁·數(shù)據(jù)保留時間:10年·全靜態(tài)工作:0Hz-24Hz·三級程序存儲器鎖定·128*8位內(nèi)部RAM·32可編程I/O線·兩個16位定時器/計數(shù)器·5個中斷源 ·可編程串行通道 ·低功耗的閑置和掉電模式·片內(nèi)振蕩器和時鐘電路 AT89C51的引腳功能,圖4所示:圖 4 AT89C51的引腳功能圖②管腳說明—VCC:供電電壓。—GND:接地。—P0口:P0口為一個8位漏級開路雙向I/O口,每個管腳可吸收8TTL門電流。當(dāng)P1口的管腳寫“1”時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FLASH編程時,P0口作為原碼輸入口,當(dāng)FLASH進(jìn)行校驗 第 8 頁 共 46 頁時,P0輸出原碼,此時P0外部電位必須被拉高。—P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入“1”后,電位被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 —P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳電位被內(nèi)部上拉電阻拉高,且作為輸入。作為輸入時,P2口的管腳電位被外部拉低,將輸出電流,這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉的優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。—P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入時,由于外部下拉為低電平,P3口將輸出電流(ILL),也是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下所示:P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 (外部中斷0)0INTP3.3 (外部中斷1)1P3.4 T0(記時器0外部輸入)P3.5 T1(記時器1外部輸入)P3.6 (外部數(shù)據(jù)存儲器寫選通)WRP3.7 (外部數(shù)據(jù)存儲器讀選通)DP3口同時為閃爍編程和編程校驗接收一些控制信號。—RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機(jī)器周期的高電平時間?!?:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的PROGALE/地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令時ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。— :外部程序存儲器的選通信號。在由外部程序存儲器取址期間,每個機(jī)器PSEN 第 9 頁 共 46 頁周期 兩次有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的 信號將不出現(xiàn)。PSEN PSEN— :當(dāng) 保持低電平時,訪問外部ROM;注意加密方式1時, 將內(nèi)部VA/ A鎖定為RESET;當(dāng) 端保持高電平時,訪問內(nèi)部ROM。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。—XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。—XTAL2:來自反向振蕩器的輸出。③內(nèi)部結(jié)構(gòu)框圖如圖5所示。圖5 AT89C51的內(nèi)部結(jié)構(gòu)框圖(2)AT89C51 的基本操作如圖 6 所示,在 X1 和 X2 之間接一只石英振蕩晶體構(gòu)成了單片機(jī)的時鐘電路,它還有另一種接法,是把外部振蕩器的信號直接連接到 XTAL1 端,XTAL2 端懸空不用。AT89C51 復(fù)位引腳 RST/VP 通過片內(nèi)一個施密特觸發(fā)器(抑制噪聲作用)與片內(nèi)復(fù)位電路相連,施密特觸發(fā)器的輸出在每一個機(jī)器周期由復(fù)位電路采樣一次。當(dāng)振蕩電路工作,并且在 RST 引腳上加一個至少保持 2 個機(jī)器周期的高電平時,就能使 AT89C51完成一次復(fù)位。復(fù)位不影響 RAM 的內(nèi)容。復(fù)位后,PC 指向 0000H 單元,使單片機(jī)從起始地址 0000H 單元開始重新執(zhí)行程序。所以,當(dāng)單片機(jī)運(yùn)行出錯或進(jìn)入死循環(huán)時,可按復(fù)位鍵重新啟動。MCS-51單片機(jī)通常采用上電自動復(fù)位和按鈕復(fù)位兩種復(fù)位方式。上電復(fù)位利用電容器充電來實現(xiàn)。按鈕復(fù)位又分為按鈕電平復(fù)位和按鈕脈沖復(fù)位。前者將復(fù)位端通過電阻與Vcc相接;后者利用RC微分電路產(chǎn)生正脈沖來達(dá)到復(fù)位目的。復(fù)位電路參數(shù)的選擇應(yīng)能保證復(fù)位高電平持續(xù)時間大于2個機(jī)器周期。本系統(tǒng)采用的是按鍵脈沖復(fù)位,具體電路和原理將在下面的章節(jié)介紹。圖 6 AT89C51基本操作電路振蕩器特性:XTAL1、XTAL2為片內(nèi)振蕩器的反相放大器的輸入和輸出端??刹捎檬⒕w或陶瓷振蕩器組成時鐘振蕩器,如需從外部輸入時鐘AT89C51,時鐘信號從XTAL1輸入,XTAL2應(yīng)懸空。由于輸入到內(nèi)部電路是經(jīng)過一個2分頻觸發(fā)器,所以輸入的外部時鐘信號無需特殊要求,但它必須符合電平的最大和最小值及時序規(guī)范。2.3 其它元器件的選擇 第 10 頁 共 46 頁除了測溫芯片DS18B20以及單片機(jī)AT89C51以外,在電源輸入部分還選用了L7805CV穩(wěn)壓芯片和濾波電容,以及用于紅外部分的4011四與非門邏輯芯片,當(dāng)然還有紅外發(fā)射和接收管,這里接收管采用TO-92三腳封裝的一體化接收頭,顯示不分采用了12PIN的數(shù)碼管LDS-5461AH,總共可以顯示四位數(shù)據(jù)和小數(shù)點,其位選部分使用了NPN三極管來進(jìn)行位掃描。具體功能及細(xì)節(jié)詳見電路原理部分。2.4 電路設(shè)計由于是基于單片機(jī)實現(xiàn),硬件電路就相對簡單很多,只需要設(shè)計一下電源穩(wěn)壓電路、鍵盤電路、顯示電路、測溫電路、紅外發(fā)射和接收電路以及它們與單片機(jī)的連接即可。(1)單片機(jī)工作部分由圖 6 已知 AT89C51 的基本操作電路。但其中的一些參數(shù)還得依據(jù)具體要求來設(shè)計。具體接幾兆晶體是基于機(jī)器周期考慮。一個機(jī)器周期由 6 個狀態(tài)(S1-S6) 組成,每個狀態(tài)又持續(xù)兩個振蕩周期(分為 P1 和 P2)。這樣,一個機(jī)器周期由 12 個振蕩周期組成,由 S1P1(狀態(tài) 1 節(jié)拍 1)到 S6P2(狀態(tài) 6 節(jié)拍 2)。若是采用 12MHz 的晶體振蕩器,則每個周期恰好為 1us,如此對于編程而言相對容易些。因而選擇 12MHz 的晶體振蕩器。此外在兩引腳之間加入一個 20pF 的小電容是為了使系統(tǒng)更穩(wěn)定,避免雜音干擾而關(guān)機(jī)。(2)電源部分如圖 7 所示,電源接入采用 5V 的直流電對整個系統(tǒng)供電,使用了 L7805CV 芯片來對輸入電壓進(jìn)行穩(wěn)壓,在芯片旁邊設(shè)計了三個電容,它們的目的是慮除外界對電路的干擾,使電路得到一個穩(wěn)定線性的直流電壓。為了確認(rèn)電路進(jìn)入工作狀態(tài),還在設(shè)計時加入了一個發(fā)光二極管,用于顯示電源是否正常工作,如果電路處于接電狀態(tài),二極管就會導(dǎo)通而發(fā)光。圖 7 電源接入部分 第 11 頁 共 46 頁(3)顯示部分的設(shè)計由 LED 組成的 7 段發(fā)光管顯示器是不太復(fù)雜的單片機(jī)應(yīng)用系統(tǒng)常用外部設(shè)備之一,在這里我們就選用一個 4 數(shù)碼管一體化來顯示溫度值,當(dāng)測得的溫度是大于零時(正溫度)顯示兩位整數(shù)和兩位小數(shù),當(dāng)溫度是小于零時(零下)第一位自動顯示“-”號,后三位顯示兩位整數(shù)和一位小數(shù)。①7 段發(fā)光管顯示器由 7 段發(fā)光線段組成,并按“日”字形排列,每一段都是一個發(fā)光二極管,如圖 8 所示。圖中將 7 個 LED 的陰極連在一起,稱之為共陰極接法。反之為共陽極接法。②如果將公共陰極接地,而在 a~g 各段的陽極加上不同的電壓,就會使各段的發(fā)光情況不同,形成不同的發(fā)光字符。加在 7 段陽極上的電壓可以用數(shù)字量表示,如果某一段的陽極為數(shù)字量 1,則這個段就發(fā)光;如為 0,則不發(fā)光。數(shù)字量與段的對應(yīng)關(guān)系如表 2 所示。表 2 七段 LED 字形碼顯示字符 共陽極字符碼共陰極字符碼0 3FH C0H1 06H F9H2 5BH A4H3 4FH B0H4 66H 99H5 6DH 92H6 7DH 82H7 07H F8H8 7FH 80H9 6FH 90H圖 8 七段結(jié)構(gòu)及外形圖 在這次電子日歷時鐘的設(shè)計中使用了四個 7 段 LED 顯示器,而多位顯示器連用有兩種方法。其一,每一位都用各自的 8 位輸出口控制,在顯示某字符時,相應(yīng)的段恒定發(fā)光或不發(fā)光。這種顯示方法屬于靜態(tài)顯示。顯然,靜態(tài)顯示需占用較多的 I/O 口線。其二,是動態(tài)顯示。即將多個 7 段 LED 的段選端復(fù)接在一起,只用一個 8 位輸出口控制段選,段選碼同時加到各個 7 段 LED 顯示器上,通過控制各個顯示器公共陽極輪流接高電平的辦法,逐一輪流地啟動各個 LED。在這種方法中,只要恰當(dāng)?shù)剡x擇點亮?xí)r間和間隔時間,就會給人以這樣一種假相:似乎各位 LED 是“同時”顯示的。動態(tài)顯示法是目前各種單片機(jī)采用的流行方法。其優(yōu)點是硬件簡單, “動態(tài)”由軟件實現(xiàn)。 第 12 頁 共 46 頁因而我選用動態(tài)顯示的方法。(4)LED 驅(qū)動電路的設(shè)計LED 是電流控制的顯示器件,若想使 LED 發(fā)光則必須保證有足夠大的電流流過 LED的各段。流過 LED 的電流大時,LED 發(fā)光亮度高;流過 LED 的電流小時,LED 發(fā)光亮度就低,為了使 LED 能夠長期可靠地工作應(yīng)使流過 LED 的電流為其額定電流。為 LED 顯示器提供電流的電路稱為 LED 的驅(qū)動電路。由于顯示部分選擇了動態(tài)顯示,因此驅(qū)動電路也選擇動態(tài)驅(qū)動。動態(tài)顯示電路的驅(qū)動電路分為段驅(qū)動電路和位驅(qū)動電路兩種。段驅(qū)動電路考慮到所有的段電流均流過位選線,因此位驅(qū)動電路的驅(qū)動能力應(yīng)為段驅(qū)動能力的 8 倍(最嚴(yán)重情況八段全亮)。圖 9 為動態(tài)顯示時的驅(qū)動電路原理圖,圖中采用了達(dá)林頓復(fù)合驅(qū)動電路。驅(qū)動電路可采用分立元件電路,也可采用集成驅(qū)動電路,此外有些硬件譯碼電路本身包括驅(qū)動電路。由于這里采用動態(tài)輸出,且單片機(jī)的內(nèi)部結(jié)構(gòu)決定了數(shù)碼管可以直接由單片機(jī)驅(qū)動。因此采用分立元件的顯示驅(qū)動電路也很簡單,如圖10所示。 限流電阻段碼 a~g 段驅(qū)動電路位選線位驅(qū)動電路圖 9 動態(tài)驅(qū)動電路圖 10 位選控制電路具體顯示部分電路如圖 11 所示。它是 4 位 LED 動態(tài)顯示接口電路。LED 顯示器為 第 13 頁 共 46 頁共陽極,字段線并聯(lián),共用 AT89C51 的 P0 口(輸出字段碼),每位 LED 的公共端由89C51 的 P2 口控制,即由 P2 口輸出位碼,經(jīng)過開關(guān)三極管控制位選。顯然圖中各顯示位不可能同時顯示不同的數(shù)字或符號,只有采用動態(tài)的方法輪流使每位顯示器顯示,并保留一段時間,通常保留時間為 10ms。由于 LED 具有余輝性以及人眼視覺的惰性,雖然每位顯示器的顯示是分時段性,但只要適當(dāng)選取掃描頻率,人眼的視覺就是連續(xù)的。圖 11 四位動態(tài) LED 顯示器接口電路(5)鍵盤電路的設(shè)計這里設(shè)計鍵盤的功能是清零,啟動和單片機(jī)復(fù)位鍵,所以手持端只需三個鍵測溫端只需一個鍵即可完成。單片機(jī)系統(tǒng)所用的鍵盤有編碼鍵盤和非編碼鍵盤兩種。①編碼鍵盤本身除了按鍵之外,還包括產(chǎn)生鍵碼的硬件電路。只要按下編碼鍵盤的某一個鍵,它就能產(chǎn)生這個鍵的代碼,并稱為鍵碼,與此同時還產(chǎn)生一個脈沖信號,以通知 CPU 接收鍵碼,編碼鍵盤的優(yōu)點是使用比較方便,亦不需要編寫太復(fù)雜的程序。其缺點是使用的硬件較復(fù)雜。②非編碼鍵盤的按鍵是排列成行、列矩陣形式的。按鍵的作用只是簡單地實現(xiàn)接點的接通或斷開,因此必須有一套相應(yīng)的程序與之配合,才能產(chǎn)生相應(yīng)的鍵碼,非編碼鍵盤幾乎不需要附加什么硬件電路。因此為了簡潔電路,我使用非編碼鍵盤。但使用非編碼鍵盤需要通過軟件來解決按鍵的識別、防抖動以及如何產(chǎn)生鍵碼的問題。 第 14 頁 共 46 頁基于鍵數(shù)少的原因我采用獨(dú)立式鍵盤接口與單片機(jī)相連接,因為它占用的I/O口不多。圖中每個按鍵占用一個口,彼此獨(dú)立,互不影響。上拉電阻保證按鍵沒被按下時,I/O口輸入高電平。獨(dú)立式鍵盤可工作在查詢方式下,通過I/O口讀入鍵狀態(tài),當(dāng)有鍵被按下時I/O口變?yōu)榈碗娖剑幢话聪碌逆I對應(yīng)為高電平,這樣通過讀電平狀態(tài)可判斷是否有鍵按下和哪個鍵被按下。(6)紅外發(fā)射與接收利用單片機(jī)異步通訊口,用紅外光發(fā)射管和一體化接收管來實現(xiàn)接收和發(fā)送點信號的功能。通訊距離約3-10米,異步通訊波特率1200。圖 12 紅外發(fā)射和接收電路電路原理:紅外發(fā)送電路由4011MOS與非門和38KHz振蕩器組成,串口發(fā)送控制門電路和紅外光發(fā)射管驅(qū)動輸出電路組成。單片機(jī)串口發(fā)送TXD端為‘0’時,紅外光發(fā)射管發(fā)出38KHz調(diào)制紅外光線。TXD端為‘1’時,發(fā)射管就不發(fā)光。見上圖12。紅外接收電路為紅外接收專門集成電路,當(dāng)收到38KHz調(diào)制紅外光線時,輸出端為‘0’ ,平時為‘1’ 。正可與單片機(jī)串口發(fā)送接收端RXD配接。(7)實際電路最終通過Protel 99 SE軟件將以上各個部分電路及元器件組合在一起,得到一個完整的電路圖,如圖13和圖14。然后對各個元器件進(jìn)行合理的封裝,對封裝后的PCB進(jìn)行排版以得到最好的布局,為接下來焊接元器件有一定的幫助,而且合理的布局也能使完成后的實物更美觀。 第 15 頁 共 46 頁由于本設(shè)計兩部分電路都有紅外發(fā)射和接收部分,而區(qū)別在于遠(yuǎn)端有一個測溫電路而手持端沒有,所以在設(shè)計電路圖時將兩部分設(shè)計成一樣的結(jié)構(gòu),即在手持端也有設(shè)計了測溫芯片的接口,只要對手持端的程序稍加修改也能實現(xiàn)測溫的功能。這樣在后期制作時便于對電路的安裝與調(diào)試,而且也有利于電路的功能擴(kuò)展。下面給出了兩部分的電路圖。圖 13 測溫端電路圖圖 14 手持端電路圖 第 16 頁 共 46 頁3 軟件部分軟件用 C 語言進(jìn)行編程,采用模塊化設(shè)計方法。圖 15 手持端與測溫端的框圖3.1 軟件模塊的劃分該系統(tǒng)的控制軟件主要可以分為測溫和紅外兩個大的部分,其中具體有單片機(jī)初始化程序、定時中斷服務(wù)程序、DS18B20 接口程序、紅外發(fā)射編碼和紅外接收解碼程序等模塊。3.1.1 定時/計數(shù)器應(yīng)用(1)定時/計數(shù)器功能簡介AT89C51單片機(jī)內(nèi)部設(shè)有兩個16位可編程的定時/計數(shù)器,簡稱定時器0和定時器1,分別用T0和T1表示。其功能同一般定時計數(shù)器,主要作用是:第一,作為一段特定時間長短的定時;第二,可以計算由T1或T0引腳輸入的脈沖數(shù),前者在應(yīng)用上可以產(chǎn)生正確的時間延遲及定時去執(zhí)行中斷服務(wù)程序,而后者則是計數(shù)器或者計頻器的設(shè)計。在本設(shè)計中這兩種作用都用到了。這兩個定時器本身有四種工作模式可供使用,如表3所示。表3 四種工作模式接收數(shù)據(jù)發(fā)送信號開始顯示開始接收信號顯示發(fā)送數(shù)據(jù)測溫 第 17 頁 共 46 頁M1 MO 工作方式 功能說明0 0 模式 0 13 位計數(shù)器 0 1 模式 1 16 位計數(shù)器1 0 模式 2 8 位自動重裝計數(shù)器1 1 模式 3 定時器 0:分成兩個 8 位計數(shù)器定時器 1:停止計數(shù)(2)定時器相關(guān)的控制寄存器TMOD為模式控制寄存器,主要用來設(shè)置定時/計數(shù)器的操作模式;TCON為控制寄存器,主要用來控制定時器的啟動與停止。兩個16位的定時/計數(shù)器T0和T1均可以分成2個獨(dú)立的8位計數(shù)器即TH0、TL0、TH1、TL1,它們用于存定時或計數(shù)的初值。①模式控制寄存器--TMOD TMOD是一個專用寄存器,用于控制T1和T0的操作模式及工作方式,其各位定義如下:D7 D6 D5 D4 D3 D2 D1 D0GATE C/TM1 M0 GATE C/TM1 M0定時器1 定時器0· GATE:門控位。當(dāng) GATE=0,定時器只由軟件控制位 TR0 或 TR1 來控制啟停。位為 1,定時器啟動開始工作;為 0 時,定時器停止工作。當(dāng) GATE=1 時,定時器iTR的啟動要由外部中斷引腳和 位共同控制。只有當(dāng)外部中斷引腳 或 為高時,iTR0INT置 1 才能啟動定時器工作。i·C/ :功能選擇位。當(dāng) C/ =O 時設(shè)置為定時器工作方式;計數(shù)脈沖由內(nèi)部提供,計數(shù)周期等于機(jī)器周期。當(dāng) C/ =1 時設(shè)置為計數(shù)器工作方式,計數(shù)脈沖為外部引腳 T0 或 T1 的引入的外部脈沖信號?!1、M0:操作模式控制位,2 位可形成 4 種編碼,對應(yīng)于 4 種操作模式。TMOD 模式控制寄存器不能進(jìn)行位尋址,只能用字節(jié)傳送指令設(shè)置定時器的工作方式及操作模式,低 4 位用于定義定時器 0,高 4 位用于定義定時器 1。系統(tǒng)復(fù)位時 TMOD所有位均為 0。模式控制字的設(shè)置舉例:若設(shè)置定時器 1 為定時器工作方式,由軟件啟動,選擇操作模式 2;定時器 0 為計數(shù)方式,由軟件啟動,選擇操作模式 1。則 TMOD 各位設(shè)置為:0 0 l 0 0 1 O l 25H用 MOV TMOD,#25H 指令寫入 TMOD 中。②控制寄存器--TCON 第 18 頁 共 46 頁TCON 的作用是用于控制定時器的啟動、停止及定時器的溢出標(biāo)志和外部中斷觸發(fā)方式等。各位定義如下:8FH 8EH 8DH 8CH 8BH 8AH 89H 88HTF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0·TF1和TF0;分別為定時器1和定時器0溢出標(biāo)志。當(dāng)定時器計滿產(chǎn)生溢出時,由硬件自動置“1” ,并可申請中斷。進(jìn)人中斷服務(wù)程序后,由硬件自動清0。這兩位也可作為程序查詢的標(biāo)志位,在查詢方式下應(yīng)由軟件來清0?!R1 和 TR0:為定時器 1 和定時器 0 的啟動控制位。當(dāng)由軟件使 清 0 而停止iTR定時器的工作。定時器啟動時該位應(yīng)置“1” 。定時器的啟動與門控位和外部中斷引腳有關(guān)。當(dāng) GATE 設(shè)置為 0,定時器的啟動由=1 控制;而當(dāng) GATE 設(shè)置為 1 時,定時器啟動除了 =1 外,還要求外部中斷引iTR iTR腳 =1 時定時器方可啟動工作。IN·IE1 和 IE0:為外部中斷 1 和外部 0 的中斷請求標(biāo)志位。當(dāng)外部中斷源INTI有請求時其對應(yīng)的中斷標(biāo)志位置“1” 。其復(fù)位由觸發(fā)方式來設(shè)置?!T1 和 IT0:為外部中斷 1 和外部中斷 0 的觸發(fā)方式選擇位。 設(shè)置為“0”時iIT為電平觸發(fā)方式;設(shè)置為“1”時為邊沿觸發(fā)方式。TCON 中低 4 位是與外部中斷有關(guān)的位,高 4 位為定時器控制位。它是一個可以進(jìn)行位尋址的寄存器。當(dāng)系統(tǒng)復(fù)位時所有位均為 0。若要啟動定時器可以使用位操作指令SETB 來啟動。iTR(3)定時計數(shù)器的操作模式①模式 0模式 0 是一個 13 位的定時/計數(shù)器,16 位的寄存器只用了高 8 位( )和低 5 位(iTH的 D4-D0 位), 的高 3 位未用。iTLiTL計時工作脈沖定時器的工作時鐘可以由內(nèi)部或是外部來提供,由 C/ 位來決定,當(dāng) C/ =1 時,由外部引腳 T0 來供給,作為計數(shù)器使用,當(dāng) C/ =0 時,則由內(nèi)部時鐘來提供,作為T一般的定時器使用,而定時器的時鐘為系統(tǒng)工作時鐘除以 12,在 AT89C51 中,石英振蕩晶體使用 11.0592MHz,所以定時器每一個計數(shù)時間脈沖寬為:12/11.0592MHz=1.085us (3.1.1)若石英振蕩晶體改為 12MHz,定時器每一個計數(shù)時間脈沖寬為:12/12MHz=1.0us (3.1.2) 第 19 頁 共 46 頁激活定時器定時器動作的必要條件有:·GATE=0 時,TR0=1,定時器 0 就會工作;·GATE=1 時,除了 TR0=1,INT0 還須是高電平。若使用定時器內(nèi)部時鐘工作 C/ =0,GATE=0,在模式 0 操作下,用命令:TMOV TMOD,#00H便可設(shè)置定時器 0 于模式 0 做計時工作,將 TR0 設(shè)為 1,定時器便會開始工作了。定時時間長短設(shè)置在模式 0 工作下,計數(shù)器最多可計數(shù)個數(shù)為 M= =8192,由 0 到 8192 便產(chǎn)生溢32出而引發(fā)中斷信號,引起定時器 0 的中斷(TF0=1)??赡苤灰嫈?shù) 100 個脈沖便產(chǎn)生中斷,只要將初值 8092(8192-100)加載計數(shù)器即可,一旦激活計數(shù)器后,計數(shù)變?yōu)?093、8094、……一直到 8192 則產(chǎn)生中斷,這樣就計數(shù) 100 次了,而時間長度為:1.085us*100=108.5us (3.1.3)也就是經(jīng)過 108.5us 后就產(chǎn)生中斷了。在定時器 0 中,加載定時器的初值,匯編語言指令為:TL0=(8192-C).MOD.32 (3.1.4)TH0=(8192-C)/32 (3.1.5)其中 C 為所要計數(shù)的值, “MOD”為取余數(shù)的運(yùn)算,除以 32 后取余數(shù)部分。 “/”為除法運(yùn)算,在做完除法后取整數(shù)部分。計時溢出當(dāng)計時終了產(chǎn)生溢出,定時器應(yīng)用兩種方法可知道系統(tǒng)產(chǎn)生定時器中斷了:·檢查其中斷控制寄存器 TCON 中的 TF0 及 TF1,若為 1 則表示產(chǎn)生計時溢出了?!?zhí)行對應(yīng)的中斷服務(wù)程序。②模式 1在模式 1 工作下,計數(shù)器最多可計數(shù)個數(shù)為 M= =65536,計時時間最長為1621.085us*65536=72ms (3.1.6)而計數(shù)初值的加載方法為:TL0=(65536-C).MOD.256 (3.1.7)TH0=(65536-C)/256 (3.1.8) 第 20 頁 共 46 頁其中 C 為所要計數(shù)的值,計數(shù)時間長度為:1.085us*C (3.1.9)③模式 2模式 2 有自動重新加載初值的功能,使定時器做更精確的計時。在模式 2 工作下,計數(shù)器最多可計數(shù)個數(shù)為 M= =256,計時時間最長為:821.085us*256=0.28ms (3.1.10)而計數(shù)初值的加載方法為:TH0=256-C (3.1.11)其中 C 為所要計數(shù)的值,計數(shù)時間長度為:1.085us*C (3.1.12)④模式 3在模式3中,定時器1停止計時工作,而定時器0分為兩個獨(dú)立的8位定時器。其計數(shù)初值加載方法同模式2。3.1.2 中斷控制應(yīng)用(1)中斷源AT89C51 單片機(jī)的中斷源:2 個外部輸人中斷源 (P3.2)和 (P3.3);3 個0INT1IT內(nèi)部中斷源 T0 和 T1 的溢出中斷源及串行口發(fā)送/接收中斷源。在本系統(tǒng)中只使用了 3個內(nèi)部中斷源:TF0 和 TF1:定時器 0 和定時器 1 的溢出中斷。當(dāng) T0 或 T1 計數(shù)器加 1,計數(shù)產(chǎn)生溢出時,則將 TCON 中的 TF0 或 TF1 置 1,向 CPU 申請中斷。RI 和 TF1:串行口的接收和發(fā)送中斷。當(dāng)串行口接收或發(fā)送完一幀數(shù)據(jù)時,將TCON 中的 RI 或 TI 位置 1,向 CPU 申請中斷。當(dāng)某中斷源的中斷請求被 CPU 響應(yīng)之后,CPU 將自動把此中斷源的中斷入口地址(又稱中斷矢量地址)裝入 PC,中斷服務(wù)程序即從此地址開始執(zhí)行。因此一般在此地址單元中存放一條絕對跳轉(zhuǎn)指令,可以跳至用戶安排的中斷服務(wù)程序的入口處。AT89C51單片機(jī)各中斷源的矢量地址是固定的。見表 4。表 4 單片機(jī)中斷源的矢量地址表中斷源 矢量地址 自然優(yōu)先級 第 21 頁 共 46 頁外部中斷 0 中斷INT0003HT0 定時器 0 中斷 000BH外部中斷 1 中斷 0013HT1 定時器 1 中斷 002BHR1 或 T1 串行口中斷 0023H最高最低(2)中斷請求標(biāo)志SCON 的中斷標(biāo)志串行口的中斷請求標(biāo)志由串行口控制寄存器 SCON 的 D0 和 D1 位來設(shè)置。RI(SCON.0)為接收中斷標(biāo)志位;TI(SCON.1)為發(fā)送中斷標(biāo)志位。其中斷申請信號的產(chǎn)生過程為:發(fā)送過程:當(dāng) CPU 將一個數(shù)據(jù)寫入發(fā)送緩沖器 SBUF 時,就啟動發(fā)送。每發(fā)送完一幀數(shù)據(jù)。由硬件自動將 TI 位置 1。但 CPU 響應(yīng)中斷時,并不能清除 TI 位,所以必須由軟件清除。接收過程:在串行口允許接收時.即可串行接收數(shù)據(jù),當(dāng)一幀數(shù)據(jù)接收完畢,由硬件自動將 RI 位置 1。同樣 CPU 響應(yīng)中斷時不能清除 RI 位,必須由軟件清除。AT89C51 單片機(jī)系統(tǒng)復(fù)位后,TCON 和 SCON 中各位均清 0,應(yīng)用時要注意各位的初始狀態(tài)。(3)中斷允許控制①中斷的開放和屏蔽AT89C51 單片機(jī)中的專用寄存器 IE 稱為中斷允許寄存器,其作用是用來對各中斷源進(jìn)行開放或屏蔽的控制。其各位的定義如下:AFH AEH ADH ACH ABH AAH A9H A8HEA — ET2 ES ET1 EX1 ET0 EX0—IE.7:EA0。CPU 中斷允許位。EA=1,CPU 開放中斷;EA=0,CPU 屏蔽所有中斷請求?!狪E.4:ES0。串行中斷允許位。ES=1,允許串行口中斷;ES=0,禁止串行口中斷。—IE.3:ET1。T1 中斷允許位。ET1=1,允許 T1 中斷;ET1=0,禁止 T1 中斷?!狪E.2:EX1。外部中斷 1 允許位。EX1=1,允許外部中斷 1 中斷;EX1=0,禁止外部中斷 1 中斷?!狪E.1:ET0。T0 中斷允許位。ET0=1,允許 T0 中斷;ET0=0,禁止 T0 中斷?!狪E.0:EX0。外部中斷 0 允許位。EX0=1,允許外部中斷 0 中斷;EX0=0,禁止外部中斷 0 中斷。 第 22 頁 共 46 頁系統(tǒng)復(fù)位后,IE 中各中斷允許位均被清零,即禁止所有中斷。②中斷源優(yōu)先級結(jié)構(gòu)靠設(shè)置 IP 寄存器把各中斷源的優(yōu)先級分為高低 2 級,它遵循 2 條基本原則:·低優(yōu)級中斷可以較高優(yōu)先級中斷所中斷,反之不能。·一種中斷(不管什么優(yōu)先級)一旦得到響應(yīng),與它同級的中斷不能再中斷它。為了實現(xiàn)這 2 條規(guī)則,中斷系統(tǒng)內(nèi)部包含 2 個不可尋址的“優(yōu)先級激活”觸發(fā)器。其中一個指示某高優(yōu)級的中斷正在得到服務(wù),所有后來的中斷都被阻斷。另一個觸發(fā)器指示某低優(yōu)先級的中斷正在得到服務(wù),所有同級的中斷都被阻斷,但不阻斷高優(yōu)先級的中斷。當(dāng) CPU 同時收到幾個同一優(yōu)先級的中斷請求時,根據(jù)內(nèi)部的硬件查詢順序,CPU 將按自然優(yōu)先級順序確定該響應(yīng)哪個中斷請求。其自然優(yōu)先級由硬件形成,排列如表:表 5 自然優(yōu)先級中斷源 同級自然優(yōu)先級外部中斷 0定時器 0 中斷外部中斷 1定時器 1 中斷串行口中斷最高級最低級定時器 2 中斷 最低級(52 系列單片機(jī)中)在每一個機(jī)器周期中,CPU 對所有中斷源都順序地檢查一遍,這樣到任一機(jī)器周期的 S6 狀態(tài),可找到所有已激活的中斷請求,并排好了優(yōu)先級。在下一個機(jī)器周期的 S1狀態(tài),只要不受阻斷就開始響應(yīng)其中最高優(yōu)先級的中斷請求。若發(fā)生下列情況,中斷響應(yīng)會受到阻斷:·同級或高優(yōu)先級的中斷正在進(jìn)行中;·現(xiàn)在的機(jī)器周期還不是執(zhí)行指令的最后一個機(jī)器周期,即正在執(zhí)行的指令還沒完成前不響應(yīng)任何中斷;·正在執(zhí)行的是中斷返回指令 RETI 或是訪問專用寄存器 IE 或 IP 的指令,換而言之,在 RETI 或者讀寫 IE 或 IP 之后,不會馬上響應(yīng)中斷請求,至少要在執(zhí)行其它一條指令之后才會響應(yīng)。若存在上述任一種情況,中斷查詢結(jié)果就被取消。否則,在緊接著的下一個機(jī)器周期,中斷查詢結(jié)果變?yōu)橛行А?4)中斷處理過程中斷處理過程可分為三個階段:即中斷響應(yīng)、中斷處理和中斷返回。由于各計算機(jī)系統(tǒng)的中斷系統(tǒng)硬件結(jié)構(gòu)不同,中斷響應(yīng)的方式就有所不同。 第 23 頁 共 46 頁①中斷響應(yīng)中斷響應(yīng)條件CPU 響應(yīng)中斷的條件有:·有中斷源發(fā)出中斷請求;·中斷總允許位 EA=1,即 CPU 開中斷;·申請中斷的中斷源的中斷允許位為 1,即沒有被屏蔽。以上條件滿足,一般 CPU 會響應(yīng)中斷,但在上一節(jié)中所述的中斷受阻斷的情況下,本次的中斷請求 CPU 不會響應(yīng)。如果中斷響應(yīng)條件滿足,而且不存在中斷受阻的情況下,則 CPU 將響應(yīng)中斷。在此情況下,CPU 首先使被響應(yīng)中斷的相應(yīng)“優(yōu)先級激活”觸發(fā)器置位,以阻斷同級和低級的中斷。然后,根據(jù)中斷源的類別,在硬件的控制下內(nèi)部自動形成長調(diào)用指令(LCALL),此指令的作用將自動把斷點壓入堆棧,但不自動保存 PSW 的內(nèi)容。然后將對應(yīng)的中斷源的矢量地址裝入程序計數(shù)器 PC,使程序轉(zhuǎn)向該中斷的矢量地址,以轉(zhuǎn)至中斷服務(wù)程序?qū)?yīng)的入口地址。在使用時,通常在這些地址單元中存放一條絕對跳轉(zhuǎn)指令,使程序轉(zhuǎn)移到用戶安排的中斷服務(wù)程序入口處。②中斷處理中斷處理包括兩部分內(nèi)容:一是保護(hù)現(xiàn)場,二是中斷服務(wù)?,F(xiàn)場通常有 PSW、工作寄存器、專用寄存器等。如果在中斷服務(wù)程序中要用這些寄存器,則在進(jìn)入中斷服務(wù)之前應(yīng)將它們的內(nèi)容保護(hù)起來稱為保護(hù)現(xiàn)場;同時在中斷結(jié)束,執(zhí)行 RETI 指令之前應(yīng)恢復(fù)現(xiàn)場。編寫中斷服務(wù)程序時需注意到:·各中斷源的入口矢量地址之間,只相隔 8 個單元,一般中斷服務(wù)程序是容納不下的,最常用的解決方法是在中斷人口矢量地址單元處存放一條無條件轉(zhuǎn)移指令,而轉(zhuǎn)至存儲器其它的任何空間去?!と粢趫?zhí)行當(dāng)前中斷程序時禁止更高優(yōu)先級中斷,應(yīng)用軟件關(guān)閉 CPU 中斷,或屏蔽更高級中斷源的中斷,在中斷返回前再開放中斷?!ぴ诒Wo(hù)現(xiàn)場和恢復(fù)現(xiàn)場時,為了不使現(xiàn)場信息受到破壞或造成混亂,在此情況下,應(yīng)關(guān) CPU 中斷,使 CPU 暫不響應(yīng)新的中斷請求。這樣就要求在編寫中斷服務(wù)程序時,注意在保護(hù)現(xiàn)場之前要關(guān)中斷,在保護(hù)現(xiàn)場之后若允許高優(yōu)先級中斷打斷它,則應(yīng)開中斷。同樣在恢復(fù)現(xiàn)場之前應(yīng)關(guān)中斷,恢復(fù)之后再開中斷。③中斷返回中斷處理程序的最后一條指令是中斷返回指令 RET1。它的功能是將斷點彈出送回PC 中,使程序能返回到原來被中斷的程序繼續(xù)執(zhí)行。AT89C51 的 RETI 指令除了彈出斷點之外,它還通知中斷系統(tǒng)已完成中斷處理,并 第 24 頁 共 46 頁將“優(yōu)先級激活”觸發(fā)器清除(該觸發(fā)器在響應(yīng)中斷時置 1)。3.1.3 測溫部分單片機(jī)初始化程序由主函數(shù)實現(xiàn),主要完成定時器 T0、T1 的初始化、中斷系統(tǒng)的初始化等功能。定時器 T0 中斷函數(shù)每隔 5ms 執(zhí)行 1 次;定時器 T1 中斷函數(shù)每隔 50ms中斷 1 次,每中斷 20 次(1 秒)即讀取 DS18B20 的溫度代碼,轉(zhuǎn)換為溫度值,再拆分成單個數(shù)碼后送入顯示緩沖區(qū)。DS18B20 接口程序主要由復(fù)位函數(shù)、讀位函數(shù)、讀字節(jié)函數(shù)、寫位函數(shù)、寫字節(jié)函數(shù)、讀溫度函數(shù)等組成。由于 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ù)接收。DS18B20 的讀時序:對于 DS18B20 的讀時序分為讀 0 時序和讀 1 時序兩個過程,圖 14。對于 DS18B20 的讀時序是從主機(jī)把單總線拉低之后,在 15 秒之內(nèi)就得釋放單總線,以讓 DS18B20 把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20 在完成一個讀時序過程,至少需要60us 才能完成。圖 14 主 CPU 讀 0、1 時序DS18B20 的寫時序:圖 13 DS18B20 的復(fù)位時序 第 25 頁 共 46 頁對于 DS18B20 的寫時序仍然分為寫 0 時序和寫 1 時序兩個過程。對于 DS18B20 寫 0 時序和寫 1 時序的要求不同,當(dāng)要寫 0 時序時,單總線要被拉低至少 60us,保證 DS18B20 能夠在 15us 到 45us 之間能夠正確地采樣 IO 總線上的“0”電平,當(dāng)要寫 1 時序時,單總線被拉低之后,在 15us 之內(nèi)就得釋放單總線。圖 15 主 CPU 寫 0、1 時序3.1.4 紅外發(fā)送和接收由于通用紅外遙控系統(tǒng)發(fā)射和接收實際是兩個相反的過程,所以在這里只給出了發(fā)射部分原理和設(shè)計,接收部分原理與其相同只要做一個逆反過程便可得到相應(yīng)的結(jié)果??紤]到紅外光反射的原因,發(fā)送的信號也可能會被本身接收,因此紅外通信需采用異步半雙工方式,即通信的某一方發(fā)送和接收是交替進(jìn)行的。這里設(shè)置單片機(jī)的串行口采用方式 3 通信;通信的數(shù)據(jù)格式為每幀 11 位,包括 1 位起始位、8 位數(shù)據(jù)位、1 位奇偶校驗位和 1 位停止位;片內(nèi)定時器 T1 作為波特率發(fā)生器,選擇傳送的波特率為 1200bps,則定時器 T1 的初值應(yīng)設(shè)置為 TL1=TH1=E8H,另外應(yīng)禁止定時器 T1 中斷,以免因定時器 T1 溢出而產(chǎn)生不必要的中斷。進(jìn)行紅外通信之前,通信雙方首先要根據(jù)系統(tǒng)的功能要求制訂某種特定的通信協(xié)議,然后才能編寫相應(yīng)的通信程序。紅外抄表系統(tǒng)中,紅外通信的一方是測溫端,另一方是手持抄表器,雙方遵循表 6 格式的通信協(xié)議。在紅外通信過程中,手持抄表器是通信的發(fā)起者,其發(fā)送和接收都是主動的。它的具體工作過程為:CPU 不斷掃描鍵盤,若發(fā)現(xiàn)有命令鍵按下,則調(diào)用發(fā)送子程序發(fā)送相應(yīng)的操作命令;發(fā)送結(jié)束后即啟動接收子程序,以接收測溫端回送的信息,然后對接收到的信息進(jìn)行后續(xù)處理,在數(shù)碼管上顯示出來。表 6 抄表系統(tǒng)的通信協(xié)議格式操作 操作碼 地址碼 數(shù) 據(jù) 結(jié)束符讀取表數(shù) AAH 3 字節(jié) BCD 碼 3 字節(jié) BCD 碼 EDH設(shè)置表號 BBH - 3 字節(jié) BCD 碼 EDH 第 26 頁 共 46 頁設(shè)置表底數(shù) CCH 3 字節(jié) BCD 碼 3 字節(jié) BCD 碼 EDH開/關(guān)表設(shè)備 DDH 3 字節(jié) BCD 碼 A0H/B0H EDH校驗出錯 EEH 3 字節(jié) BCD 碼 - EDH大概有以下兩種編碼格式(Format) 。第一種格式為 1913、9012、1621 格式;第二種為 3010 格式。其中尤以第一種格式用得最多。第一種格式以 1621 為例,當(dāng)按下遙控器上的某個按鍵時,遙控器將發(fā)射出一幀數(shù)據(jù),幀數(shù)據(jù)的編碼格式由三部分組成:引導(dǎo)碼(Lead cod
壓縮包目錄 | 預(yù)覽區(qū) |
|
請點擊導(dǎo)航文件預(yù)覽
|
編號:146879
類型:共享資源
大?。?span id="hbpzx1f" class="font-tahoma">59.77KB
格式:RAR
上傳時間:2017-10-26
100
積分
積分
- 關(guān) 鍵 詞:
- 紅外線 測溫 重用
- 資源描述:
-
紅外線測溫儀(重用)√,紅外線,測溫,重用展開閱讀全文
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流,未經(jīng)上傳用戶書面授權(quán),請勿作他用。
鏈接地址:http://m.appdesigncorp.com/p-146879.html