基于單片機(jī)與VC串口通信的溫度采集系統(tǒng)設(shè)計(jì).doc_第1頁(yè)
基于單片機(jī)與VC串口通信的溫度采集系統(tǒng)設(shè)計(jì).doc_第2頁(yè)
基于單片機(jī)與VC串口通信的溫度采集系統(tǒng)設(shè)計(jì).doc_第3頁(yè)
基于單片機(jī)與VC串口通信的溫度采集系統(tǒng)設(shè)計(jì).doc_第4頁(yè)
基于單片機(jī)與VC串口通信的溫度采集系統(tǒng)設(shè)計(jì).doc_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1章 緒 論1.1 背景和意義傳統(tǒng)靠人工控制的溫度、濕度、液位等信號(hào)的測(cè)壓力控系統(tǒng),外圍電路比較復(fù)雜,測(cè)量精度較低,分辨力不高,需進(jìn)行溫度校準(zhǔn)(非線性校準(zhǔn)、溫度補(bǔ)償、傳感器標(biāo)定等);且它們的體積較大、使用不夠方便,更重要的是參數(shù)的設(shè)定需要有其它儀表的參與,外界設(shè)備多,成本高,因而越來(lái)越適應(yīng)不了社會(huì)的要求。在對(duì)多類型、多通道信號(hào)同時(shí)進(jìn)行檢測(cè)和控制中,傳統(tǒng)的測(cè)控系統(tǒng)能力有限。如何將計(jì)算機(jī)與各種設(shè)施、設(shè)備結(jié)合,簡(jiǎn)化人工操作并實(shí)現(xiàn)自動(dòng)控制,滿足社會(huì)的需求,成為一個(gè)很迫切的問(wèn)題. 溫度檢測(cè)是現(xiàn)代檢測(cè)技術(shù)的重要組成部分,在保證產(chǎn)品質(zhì)量、節(jié)約能源和安全生產(chǎn)等方面起著關(guān)鍵的作用。隨著科學(xué)技術(shù)的發(fā)展,由單片集成電路構(gòu)成的溫度傳感器的種類越來(lái)越多,測(cè)量的精度越來(lái)越高,響應(yīng)時(shí)間越來(lái)越短,因其使用方便、無(wú)需變換電路等特點(diǎn)已經(jīng)得到了廣泛的應(yīng)用,例如:以前常用的ad590和lm35等,以及現(xiàn)在得到廣泛應(yīng)用的dsl820、ds1821和ds1620等。本次畢業(yè)設(shè)計(jì)正是為了完成溫度采集而設(shè)計(jì)的,而且采用了前不久美國(guó)dallas公司生產(chǎn)的可組網(wǎng)數(shù)字式溫度傳感器ds1820,可以說(shuō)與人們的日常生活是息息相關(guān)的,具有很大的現(xiàn)實(shí)意義。1.2 目的和內(nèi)容新型數(shù)字化、網(wǎng)絡(luò)化傳感器在工程中的應(yīng)用具有極其重要的意義。 這類傳感器是各種參量送入計(jì)算機(jī)系統(tǒng),進(jìn)行智能監(jiān)測(cè)、控制的最前端。隨著科技的發(fā)展,數(shù)字化、網(wǎng)絡(luò)化傳感器應(yīng)用日益廣泛,以其傳統(tǒng)方式不可比擬的優(yōu)勢(shì)漸漸成為技術(shù)的趨勢(shì)和主流。本次設(shè)計(jì)的目的就是以數(shù)字傳感器ds1820作為前端,采集溫度經(jīng)過(guò)單片機(jī)處理后,再采用串口通信,把溫度顯示在vc編輯的計(jì)算機(jī)界面上,實(shí)現(xiàn)與計(jì)算機(jī)的通信。本系統(tǒng)的設(shè)計(jì)包括硬件和軟件兩大部分。系統(tǒng)的硬件部分大致可分為四部分:ds1820溫度采集部分、單片機(jī)處理部分、顯示電路部分、與計(jì)算機(jī)串口通信部分。設(shè)計(jì)框圖如圖1.1所示:圖1.1 總設(shè)計(jì)框圖系統(tǒng)的軟件部分分為五大部分:讀取ds1820的內(nèi)部數(shù)據(jù)部分、單片機(jī)對(duì)溫度的處理部分、數(shù)碼顯示部分、串口通信部分、vc+界面部分。1.3 發(fā)展前景近年來(lái),利用智能化數(shù)字式溫度傳感器以實(shí)現(xiàn)溫度信息的在線檢測(cè)已成為溫度檢測(cè)技術(shù)的一種發(fā)展趨勢(shì)。數(shù)字化技術(shù)推動(dòng)了信息化的革命,在傳感器的器件結(jié)構(gòu)上采用數(shù)字化技術(shù),使信息的采集更加方便。例如,對(duì)于溫度信號(hào)采集系統(tǒng),傳統(tǒng)的模擬溫度傳感器多為鉑電阻、銅電阻等。每一個(gè)傳輸線至少有兩根導(dǎo)線,帶補(bǔ)償接法需要三根導(dǎo)線。如果對(duì)50路溫度信號(hào)進(jìn)行檢測(cè),就需要100根導(dǎo)線接到采集端口,然后還要經(jīng)過(guò)電橋電路、信號(hào)放大、通道選擇、a心轉(zhuǎn)換等,才能將溫度信號(hào)供計(jì)算機(jī)處理。而ds1820新型單總線數(shù)字溫度傳感器,采用3腳(或8腳)封裝,從ds1820讀出或?qū)懭霐?shù)據(jù)僅需要一根io口線。并且以串行通信的方式與微控制器進(jìn)行數(shù)據(jù)通信。該器件將半導(dǎo)體溫敏器件、a心轉(zhuǎn)換器、存儲(chǔ)器等做在一個(gè)很小的集成電路芯片上,傳感器直接輸出的就是溫度信號(hào)數(shù)字值。信號(hào)傳輸采用兩芯(或三芯)電纜構(gòu)成的單總線結(jié)構(gòu)。一條單總線電纜上可以掛接若干個(gè)數(shù)字溫度傳感器,每個(gè)傳感器有一個(gè)唯一的地址編碼。微控制器通過(guò)對(duì)器件的尋址,就可以讀取某一個(gè)傳感器的溫度值,從而簡(jiǎn)化了信號(hào)采集系統(tǒng)的電路。第2章 主要器件介紹2.1 溫度傳感器ds1820ds1820是美國(guó)dallas半導(dǎo)體公司生產(chǎn)的可組網(wǎng)數(shù)字式溫度傳感器,在其內(nèi)部使用了在板(on-b0ard)專利技術(shù)。全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。ds1820具有以下特性: 1、獨(dú)特的單線接口方式,ds1820在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與ds1820的雙向通訊。 2、ds1820支持多點(diǎn)組網(wǎng)功能,多個(gè)ds1820可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)多點(diǎn)測(cè)溫。 3、ds1820在使用中不需要任何外圍元件。 4、溫范圍55125,固有測(cè)溫分辨率0.5。 5、測(cè)量結(jié)果以9位數(shù)字量方式串行傳送。ds1820采用3腳pr-35封裝或8腳soic封裝,引腳排列如圖2.1所示。i/o為數(shù)據(jù)輸入/輸出端(即單線總線),常態(tài)下呈高電平。udd是可供選用的外部+5v電源端不用時(shí)需接地。gnd為地,nc為空腳。圖2.1 ds1820的封裝圖2.1.1 ds1820的工作原理1、 ds1820的內(nèi)部結(jié)構(gòu)ds1820的內(nèi)部結(jié)構(gòu)如圖2.2所示:圖2.2 ds1820的內(nèi)部結(jié)構(gòu)該芯片內(nèi)部有經(jīng)過(guò)激光修正的rom,內(nèi)含64位rom編碼,包括產(chǎn)品系列號(hào)(高8位),產(chǎn)品序列號(hào)(中間48位)和crc編碼(低8位)編碼格式如下表2.1:表2.1 ds1820的rom結(jié)構(gòu)圖8位產(chǎn)品系列號(hào)48位產(chǎn)品序號(hào)8位crc編碼2、 ds1820測(cè)溫原理ds1820測(cè)溫原理如圖2.3所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在55所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1 ,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫度。圖2.3中的斜率累加器用于補(bǔ)償和修正測(cè)溫過(guò)程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。圖2.3 測(cè)溫原理框圖在正常測(cè)溫情況下,ds1820的測(cè)溫分辯率為0.5以9位數(shù)據(jù)格式表示,其中最低有效位(lsb)由比較器進(jìn)行0.25比較,當(dāng)計(jì)數(shù)器1中的余值轉(zhuǎn)化成溫度后低于0.25時(shí),清除溫度寄存器的最低位(lsb),當(dāng)計(jì)數(shù)器1中的余值轉(zhuǎn)化成溫度后高于0.25,置位溫度寄存器的最低位(lsb)。高字節(jié)溫度值只代表符號(hào)位,低字節(jié)具體對(duì)應(yīng)的溫度格式如下表2.2所示: 表2.2 低字節(jié)溫度格式262524232221202-1下面舉例說(shuō)明這種溫度輸出形式,如表2.3所示。表2.3 溫度輸出形式溫 度(temp_read)msb,lsb二進(jìn)制溫度輸出十六進(jìn)制溫度輸出+125.000000000,1111101000fa+25.000000000,001100100032+0.500000000,0000000100010.000000000,000000000000-0.511111111,11111111ffff續(xù)表溫 度(temp_read)msb,lsb二進(jìn)制溫度輸出十六進(jìn)制溫度輸出-25.011111111,11001110ffce-55.011111111,10010010ff922.1.2 ds1820操作協(xié)議dsl820作為一種單線器件,要求嚴(yán)格的協(xié)議來(lái)確保數(shù)據(jù)的正確讀寫這個(gè)協(xié)議是:初始化、rom操作命令、存儲(chǔ)器操作命令、處理數(shù)據(jù)。下面介紹ds1820工作的時(shí)序要求:1、 初始化在單總線上的所有處理均是從初始化開始,主機(jī)總線發(fā)送一個(gè)復(fù)位脈沖(最短為480us的低電平信號(hào)),ds1820在檢測(cè)到總線的上升沿之后等待1560us,接著發(fā)出存在脈沖(60us240us)。 任何命令的發(fā)送必須先由主機(jī)發(fā)出復(fù)位信號(hào),收到dsl820發(fā)出的先導(dǎo)脈沖后,再發(fā)送命令和數(shù)據(jù)。復(fù)位和先導(dǎo)脈沖的時(shí)序如圖2.4所示。首先由主機(jī)把數(shù)據(jù)線下拉成低電平持續(xù)480us960us,然后釋放數(shù)據(jù)線完成復(fù)位操作,dsl820收到后,等待16us60us發(fā)出寬度為60us240us的低電乎,即先導(dǎo)脈沖,主機(jī)收到先導(dǎo)脈沖后說(shuō)明握手成功,可以進(jìn)行下一步的通訊。任何一次讀寫操作都必須先進(jìn)行復(fù)位,發(fā)送一條rom指令,然后發(fā)送ram指令,完成預(yù)定的操作。 圖2.4 ds1820復(fù)位2、 讀寫時(shí)序讀寫時(shí)序:如圖2.5所示,主機(jī)寫入0時(shí),將數(shù)據(jù)線拉成低電平并保持60us再釋放數(shù)據(jù)線,寫入1時(shí)要先使數(shù)據(jù)線變低,然后在15us內(nèi)釋放。主機(jī)讀取每位數(shù)據(jù)時(shí),都先將數(shù)據(jù)線拉低至少1us的時(shí)間,然后釋放等待輸出的數(shù)據(jù),ds1820的輸出數(shù)據(jù)從下降沿起保持15us供主機(jī)采樣。圖2.5 ds1820的讀寫時(shí)序2.1.3 ds1820的指令系統(tǒng) 1、 rom操作指令 總線主機(jī)檢測(cè)到ds1820的存在,便可發(fā)出rom操作指令之一,這些指令如下:(1) 讀rom(read rom) 機(jī)器碼33h 適用于單片,讀出64位地址,當(dāng)有多于一片的dsl820在線時(shí),讀出的將是各片地址相與的結(jié)果。 (2) 匹配rom(match rom) 機(jī)器碼55h 適用多片dsl820、緊跟該命令之后要輸入64位地址,與該地址對(duì)應(yīng)的ds1820響應(yīng)以后的讀寫命令。(3) 跳過(guò)rom(skip rom) 機(jī)器碼cch 用于單片,它忽略64位地址。(4) 搜索rom(search rom) 機(jī)器碼f0h 該命令可以確認(rèn)dsl820的個(gè)數(shù)和對(duì)應(yīng)的64位地址。(5) 報(bào)警搜索rom(alarm rom)機(jī)器碼ech 執(zhí)行后,只有溫度超過(guò)設(shè)定的高限或低于設(shè)定的低限,片子才響應(yīng)此命令,接卞來(lái)的搜尋過(guò)程同執(zhí)行search rom命令后相同。2、ram操作命令總線主機(jī)只有在發(fā)出rom操作命令之后,才可以對(duì)存儲(chǔ)器進(jìn)行操作,相應(yīng)命令如下:(1) 寫暫存存儲(chǔ)器(write scratchpad) 機(jī)器碼4eh 向筆記本的第3和第4字節(jié)寫上下限數(shù)據(jù),緊跟該命令后是傳送兩字節(jié)的數(shù)據(jù)。(2) 讀暫存存儲(chǔ)器(read scratchpad) 機(jī)器碼beh 讀內(nèi)部筆記本中9字節(jié)的內(nèi)容。(3) 內(nèi)部復(fù)制暫存存儲(chǔ)器(copy scratchpad) 機(jī)器碼48h將筆記本的第3和第4字節(jié)存入eep_rom。(4) 溫度變換(convert temperature) 機(jī)器碼44h 執(zhí)行后開始進(jìn)行溫度轉(zhuǎn)換,轉(zhuǎn)換時(shí)間最長(zhǎng)為500ms,使用寄生電源時(shí),數(shù)據(jù)線至少保持500ms的高電平。轉(zhuǎn)換后的結(jié)果保存在內(nèi)部9字節(jié)的筆記本中。(5) 重新調(diào)出eepram(recall eepram) 機(jī)器碼b8h 將eeprom中內(nèi)容恢復(fù)到筆記本中第3和第4字節(jié),每次上電自動(dòng)執(zhí)行一次此命令。(6) 讀電源(read supply) 機(jī)器碼b4h 讀ds1820的供電模式,如果采用寄生模式,d51820發(fā)送0,如果采用外接電源, ds1820發(fā)送1。2.1.4 ds1820精度提高原理1、 ds1820內(nèi)部暫存寄存器ds1820內(nèi)部暫存寄存器的分布如表2.4所示,其中第7字節(jié)存放的是當(dāng)溫度寄存器停止增值時(shí)計(jì)數(shù)器1的計(jì)數(shù)剩余值,第8字節(jié)存放的是每度所對(duì)應(yīng)的計(jì)數(shù)值,這樣,我們就可以通過(guò)下面的方法獲得高分辨率的溫度測(cè)量結(jié)果。首先用ds1820提供的讀暫存寄存器指令(beh)讀出以0.5為分辨率的溫度測(cè)量結(jié)果,然后切去測(cè)量結(jié)果中的最低有效位(lsb),得到所測(cè)實(shí)際溫度整數(shù)部分t整數(shù),然后再用beh指令讀取計(jì)數(shù)器1的計(jì)數(shù)剩余值m剩余和每度計(jì)數(shù)值m每度,考慮到ds1820測(cè)量溫度的整數(shù)部分以0.25、0.75為進(jìn)位界限的關(guān)系,實(shí)際溫度t實(shí)際可用下式計(jì)算得到: t實(shí)際=(t整數(shù)0.25)+(m每度m剩余)/m每度 = t整數(shù)+0.75 (m剩余/m每度)2、 測(cè)量數(shù)據(jù)比較 表2.5為采用直接讀取測(cè)溫結(jié)果方法和采用計(jì)算方法得到的測(cè)溫?cái)?shù)據(jù)比較,通過(guò)比較可以看出,計(jì)算方法在ds1820測(cè)溫中不僅是可行的,也可以大大的提高ds1820的測(cè)溫分辨率.表2.4 ds1820暫存寄存器分布 表2.5 ds1820直接測(cè)溫結(jié)果與計(jì)算測(cè)溫結(jié)果數(shù)據(jù)比較 寄存器內(nèi)容字節(jié)地址溫度低數(shù)字位0溫度高數(shù)字位1高溫限值2低溫限值3保留位4保留位5計(jì)數(shù)剩余值6每度計(jì)數(shù)值7crc校驗(yàn)8次數(shù)t(直接)m剩余m每度t(實(shí)際)121.000728020.850234.000428234.238349.000308349.388452.000668451.964564.000498564.174679.000568779.106782.500168882.5682.1.5 硬件接法ds1820硬件接法有兩種:如圖2.6外接電源供電和圖2.7寄生電源供電: 圖2.6 外接電源供電 圖2.7 寄生電源供電 外接電源是多片ds1820同時(shí)進(jìn)行溫度轉(zhuǎn)換的最保險(xiǎn)的用法,此時(shí)gnd不能浮接。采用寄生模式時(shí)vdd必須接地,在溫度轉(zhuǎn)換期間ds1820通過(guò)高電平的數(shù)據(jù)線供電,傳遞數(shù)據(jù)時(shí)它由內(nèi)部從電電路的電容供電。這種用法的最大好處是節(jié)省了一根引線。由于每個(gè)ds1820在轉(zhuǎn)換期間約耗電1ma,所以當(dāng)多個(gè)ds1820同時(shí)轉(zhuǎn)換時(shí),電源可能供電不足,這時(shí)應(yīng)再啟動(dòng)轉(zhuǎn)換后10us以內(nèi),到通mosfet,把數(shù)據(jù)線直接聯(lián)到電源上。當(dāng)溫度在100度以上時(shí),不能使用寄生電源模式,因?yàn)楦邷貢r(shí)大的漏電流有可能會(huì)拉下通訊時(shí)的高電平,cpu無(wú)法得到正確的數(shù)值。2.2 單片機(jī)介紹單芯片微電腦簡(jiǎn)稱單片機(jī)。它是由中央處理器(cpu)、內(nèi)存單元及輸入輸出單元所組成。依靠地址總線、數(shù)據(jù)總線與控制總線,cpu可與內(nèi)存單元及i/o單元相連,構(gòu)成完整的微電腦系統(tǒng)。單芯片微電腦為將cpu、內(nèi)存及i/o等組合制作于同一芯片內(nèi)的微控制器,所以僅需要少量的外圍電路即可獨(dú)立工作。單片機(jī)具有電路簡(jiǎn)單及不占空間的優(yōu)點(diǎn),主要用于工業(yè)控制及民用消費(fèi)性產(chǎn)品,如汽車遙控器、防盜器、冷氣機(jī)及工廠自動(dòng)化。2.2.1 mcs-51系列簡(jiǎn)介mcs-51系列根據(jù)電路結(jié)構(gòu)可分為四種版本,詳見表2.6。 表2.6 mcs-51系列單片機(jī)版 本組件名稱ram(byte)romi/o腳(pin)計(jì)時(shí)/計(jì)數(shù)器中斷romless803112803225rom80511284k rom3225eprom87511284k eprom3225eeprom89511284k eeprom3225通常在程序開發(fā)階段,常需要修改程序,故一般選用單芯片內(nèi)含程序內(nèi)存eprom和eeprom的版本。而eeprom為電可清除的新型產(chǎn)品,其壽命可達(dá)1000次,而且清除原有程序和燒錄程序都十分方便,已經(jīng)得到了廣泛應(yīng)用;若程序發(fā)展到程序階段,則可采用rom版本,直接將程序燒錄進(jìn)去,可降低成本。2.2.2 mcs-51內(nèi)部結(jié)構(gòu)mcs-51芯片的外部引腳和指令系統(tǒng)完全兼容,其內(nèi)部結(jié)構(gòu)除rom/eprom/ eeprom不同外,其余完全相同。它是由8位cpu、4kbytesrom、128bytesram、8位i/o口和很多工作寄存器及特殊功能寄存器(sfr)組成的。1、cpu是單片機(jī)的核心,是計(jì)算機(jī)的控制和指揮中心,由運(yùn)算器和控制器組成。運(yùn)算器包括一個(gè)可進(jìn)行8位算術(shù)運(yùn)算和邏輯運(yùn)算的單元alu,8位的暫存器1,暫存器2,8位的累加器acc,寄存器b和程序狀態(tài)寄存器psw等??刂破靼ǔ绦蛴?jì)數(shù)器pc,指令寄存器ir,指令譯碼器id,震蕩器及定時(shí)電路等。2、8951片內(nèi)有rom(程序存儲(chǔ)器,只能讀)和ram(數(shù)據(jù)存儲(chǔ)器,可讀可寫)兩類,它們有個(gè)自獨(dú)立的存儲(chǔ)地址空間,與一般微機(jī)的存儲(chǔ)器配置方式很不相同。3、8051/8751/8951片內(nèi)程序存儲(chǔ)器rom容量為4kb,地址從0000h開始,用于存放程序和表格常數(shù)。mcs-51片內(nèi)數(shù)據(jù)存儲(chǔ)器ram均為128bytes,地址為00h-7fh,用于存放運(yùn)算的中間結(jié)果,數(shù)據(jù)暫存以及數(shù)據(jù)緩沖等。在這128bytes的ram中,有32個(gè)字節(jié)單元可指定為工作寄存器,這同一般處理器不同。mcs-51的片內(nèi)ram和工作寄存器排在一個(gè)隊(duì)里統(tǒng)一編址。另外,8951還有sp,dptr,pcon等特殊寄存器,它們也同128字節(jié)的ram和在一個(gè)隊(duì)列里編址,地址為80h-ffh。在這128字節(jié)ram單元中有21個(gè)特殊寄存器(sfr),這些特殊功能寄存器還包括p0-p3口鎖存器。4、mcs-51有四個(gè)8位并行接口,即p0-p3。它們都是雙向端口,每一個(gè)端口各有8條i/o線,均可輸入/輸出。p0-p3口四個(gè)鎖存器同ram統(tǒng)一編址,可以把i/o口當(dāng)作一般特殊功能寄存器來(lái)尋址。2.2.3 mcs-51單片機(jī)引腳功能圖2.8為mcs-51系列單片機(jī)的40支dip包裝的引腳圖。其中圖2.8 mcs-51系列單片機(jī)引腳圖許多引腳是多用途的,信號(hào)名稱后面括號(hào)中的數(shù)字為引腳號(hào)碼,現(xiàn)說(shuō)明如下:1、 vss(20):接地信號(hào)線2、 vcc(40):+5v電源輸入引腳3、xtal1(19):反相振蕩放大器輸入4、xtal1(18):反相振蕩放大器輸出5、reset(9):復(fù)位輸入端6、(31):外部存取至能輸入信號(hào)線。7、p0.0p0.7(3239):端口0,8位輸入輸出端口。此端口為開汲極結(jié)構(gòu),當(dāng)輸出端口使用時(shí)應(yīng)外加提升電阻。8、 p1.0p1.7(18腳):端口1,8位輸入輸出端口。此端口具有內(nèi)部提升電阻的雙向i/o,每支腳可獨(dú)立做輸入輸出。 9、 p2.0p2.7(2128腳):端口2,8位輸入輸出端口。此端口具有內(nèi)部提升電阻的雙向i/o,與p1同。10、p3.0p3.7(1017腳):端口,8位輸入輸出端口。此端口也具有內(nèi)部提升電阻的雙向i/o。具有雙重功能,除當(dāng)一般i/o外,每支腳的特殊功能如下:p3.0(rxd):串行口輸入p3.1(txd):串行口輸出p3.2(int0):外部中斷0輸入p3.3(int1):外部中斷1輸入p3.4(t0):定時(shí)器0的外部輸入p3.5(t1):定時(shí)器1的外部輸入p3.6():片外數(shù)據(jù)存儲(chǔ)器寫選通p3.7():片外數(shù)據(jù)存儲(chǔ)器讀選通2.2.4 mcs-51的復(fù)位動(dòng)作reset引腳是復(fù)位信號(hào)的輸入端。復(fù)位信號(hào)是高電平有效,其有效時(shí)間持續(xù)24個(gè)振蕩周期(即二個(gè)機(jī)器周期)以上。當(dāng)復(fù)位發(fā)生時(shí),除i/o、堆棧指針及sbuf外,內(nèi)部電路會(huì)將特殊功能緩沖器全部寫入0,如表2.7所示。表2.7 一些寄存器的復(fù)位狀態(tài)寄存器復(fù)位狀態(tài)寄存器復(fù)位狀態(tài)pc0000htcon00hacc00htl000hpsw00hth000hsp07htl100hdptr0000hthi00hp0p3ffhscon00hipxx000000bsbuf不定續(xù)表寄存器復(fù)位狀態(tài)寄存器復(fù)位狀態(tài)ie0x000000bpcon0xxxxxxx btmod00h復(fù)位操作有上電自動(dòng)復(fù)位和按鍵手動(dòng)復(fù)位兩種方式。上電自動(dòng)復(fù)位是通過(guò)外部復(fù)位電路的電容充電來(lái)實(shí)現(xiàn)的,其電路圖如圖2.9(a)所示。這樣,只要電源vcc的上電時(shí)間不超過(guò)1ms,就可以實(shí)現(xiàn)自動(dòng)上電復(fù)位,即通過(guò)電源就完成了系統(tǒng)的復(fù)位初始化。按鍵手動(dòng)復(fù)位有電平方式和脈沖方式兩種。其中,按鍵電平復(fù)位是通過(guò)復(fù)位端經(jīng)電阻與vcc電源接通而實(shí)現(xiàn)的,其電路圖如圖2.9(b)所示;而按鍵脈沖復(fù)位則是利用rc微分電路產(chǎn)生的正脈沖來(lái)實(shí)現(xiàn)的,其電路圖如圖2.9(c)所示。上述電路圖中的電阻,電容參數(shù)使用于6mhz晶振,能保證復(fù)位信號(hào)高電平持續(xù)時(shí)間大于2個(gè)機(jī)器周期。 (a) (b) (c)圖2.9 復(fù)位電路 2.3 本章小結(jié)本章介紹了溫度傳感器ds1820和單片機(jī)的一些知識(shí)。對(duì)本設(shè)計(jì)與相關(guān)的ds1820的知識(shí)做了詳細(xì)介紹。雖然外觀很不起眼的ds1820,卻有著較復(fù)雜的內(nèi)部結(jié)構(gòu)。作為一個(gè)單總線的數(shù)字傳感器,它有著自己的存儲(chǔ)空間和操作指令系統(tǒng)。要想很好的運(yùn)用ds1820,必須對(duì)它的結(jié)構(gòu)和指令系統(tǒng)又有所認(rèn)識(shí)。本章還介紹了單片機(jī)的結(jié)構(gòu)、管腳功能及復(fù)位動(dòng)作等。本設(shè)計(jì)具體用到的單片機(jī)的某些功能,在后面硬件設(shè)計(jì)介紹中也有的介紹,所以在本章就沒(méi)有具體介紹。通過(guò)本章的介紹,就可以理解這個(gè)設(shè)計(jì)的設(shè)計(jì)方案,也能夠?qū)竺娴恼鹿?jié)有更好的認(rèn)識(shí)。第3章 系統(tǒng)的硬件設(shè)計(jì)3.1 設(shè)計(jì)方案的選定本設(shè)計(jì)要求:1、該溫度測(cè)控系統(tǒng)測(cè)溫精度達(dá)0.5度;2、單片機(jī)實(shí)現(xiàn)硬件,與pc串口通信3、溫度傳感器選用ds1820于是,根據(jù)設(shè)計(jì)要求,溫度采集部分我選用了溫度傳感器ds1820。硬件核心處理部分選用了單片機(jī)來(lái)實(shí)現(xiàn)。單片機(jī)我選用了常用的at89c51型號(hào)的單片機(jī)。用單片機(jī)來(lái)完成溫度數(shù)據(jù)的采集、存儲(chǔ)、數(shù)據(jù)轉(zhuǎn)換、顯示和發(fā)送。串口通信部分,我選用了rs232的九孔的串口線和九針的串口座來(lái)完成串口數(shù)據(jù)的傳輸??紤]到單片機(jī)的串口輸出電壓和rs232的工作電壓不匹配的問(wèn)題,我選用了常用的串口電平轉(zhuǎn)換芯片max232cpe。顯示部分的數(shù)碼管我選用了一塊四位一體的共陽(yáng)的數(shù)碼管。為了降低硬件成本,我的數(shù)碼管驅(qū)動(dòng)采用了四個(gè)pnp三極管放大電流來(lái)實(shí)現(xiàn)。3.2 設(shè)計(jì)的主要思想本設(shè)計(jì)主要用可組網(wǎng)數(shù)字式溫度傳感器ds1820來(lái)采集外界溫度,其內(nèi)部on-board專利技術(shù)測(cè)量溫度,把全部傳感器以及各種數(shù)字轉(zhuǎn)換電路集成在一起做成形如一只三極管的集成電路,故系統(tǒng)不另需a/d轉(zhuǎn)換電路。它有獨(dú)特的單線接口方式,在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與ds1820的雙向通訊。而且在使用中不需要任何外圍元件。其測(cè)溫范圍55125,固有測(cè)溫分辨率0.5,測(cè)量結(jié)果以9位數(shù)字量方式串行傳送。中心處理部分用51系列單片機(jī)來(lái)實(shí)現(xiàn)。本設(shè)計(jì)是基于89c51型號(hào)的單片機(jī),來(lái)實(shí)現(xiàn)硬件部分的溫度轉(zhuǎn)換、存儲(chǔ)和顯示等。由于溫度傳感器ds1820是單線串行結(jié)構(gòu),故需要單片機(jī)用串行方式對(duì)其寫入指令使其執(zhí)行命令,再通過(guò)這唯一的數(shù)據(jù)線向單片機(jī)寫入數(shù)據(jù)。而且該傳感器所輸出的溫度是9位數(shù)字量方式,故還需要把其溫度的數(shù)據(jù)格式轉(zhuǎn)化成該設(shè)計(jì)顯示部分所需的數(shù)據(jù)格式,因而單片機(jī)還要將其輸出的溫度進(jìn)行處理后才將其顯示出來(lái)。而且該溫度傳感器內(nèi)部還有兩個(gè)存儲(chǔ)器里分別存放著溫度報(bào)警上、下限,用戶使用寫入存儲(chǔ)器命令,設(shè)置溫度報(bào)警值。故單片機(jī)還需要對(duì)ds1820寫入該命令和報(bào)警上下限的具體值??傊?,除了硬件平臺(tái)的搭建外,還要編寫大量匯編語(yǔ)言的程序來(lái)支撐該硬件平臺(tái)。在單片機(jī)與pc機(jī)連接時(shí),用串口rs232和電平轉(zhuǎn)換器件max232來(lái)實(shí)現(xiàn)他們之間的串口通信。通過(guò)這個(gè)串口把單片機(jī)所接收到的溫度數(shù)據(jù)傳送給pc機(jī)。然后,用vc編輯一個(gè)溫度顯示的界面,在pc機(jī)上顯示所測(cè)得溫度值,此為軟件部分設(shè)計(jì)。對(duì)于這部分實(shí)現(xiàn)的同時(shí),我用數(shù)碼管作為硬件溫度顯示。設(shè)計(jì)的要求測(cè)溫精度達(dá)0.5度。但我實(shí)際設(shè)計(jì)中準(zhǔn)備采用提高精度的方法實(shí)現(xiàn)測(cè)溫精度達(dá)0.1度。系統(tǒng)的硬件部分大致可分為四部分: ds1820與單片機(jī)接口電路部分、復(fù)位電路及振蕩電路部分、顯示電路部分、串口通信部分??偟碾娐穲D見附錄。下面分別介紹四部分電路的設(shè)計(jì)思想。3.3 ds1820與單片機(jī)接口電路ds1820與單片機(jī)的接口電路有兩種方式,一種是采用外接電源方式,一種是采用寄生電源方式。本設(shè)計(jì)中采用外接電源方式,如圖3.1所示。圖3.1 ds1820與單片機(jī)接口電路r為上拉電阻,典型值可取5.1k或4.7k 。本設(shè)計(jì)中采用的5.1k的上拉電阻。ds1820的i/o線接單片機(jī)p1.1口,通過(guò)對(duì)p1.1的控制來(lái)完成對(duì)ds1820的讀寫操作。3.4 復(fù)位電路及振蕩電路這部分為單片機(jī)工作需要的外圍電路部分。特別是其振蕩部分電路關(guān)系到單片機(jī)內(nèi)部的機(jī)械周期。3.4.1 復(fù)位電路mcs-51的復(fù)位輸入reset腳為高電位動(dòng)作,其高電位時(shí)間至少需要2個(gè)機(jī)械周期,故復(fù)位電路的rc值不可隨意選取。如圖3.2所示,為我所采用的開機(jī)復(fù)位電路。電源on時(shí),電容視為短路,故reset腳為+5v的高電位。然后經(jīng)歷rc=10u8.2k的充電時(shí)間后, reset腳降為低電位,此時(shí)cpu由地址0開始執(zhí)行程序。電容器上的開關(guān)可達(dá)到手動(dòng)復(fù)位的功能,摁下開關(guān),可強(qiáng)迫系統(tǒng)復(fù)位。圖3.2 復(fù)位電路3.4.2 振蕩電路89c51芯片內(nèi)部有一個(gè)高增益反向放大器,用于構(gòu)成振蕩器。反向放大器的輸入端為xtal1,輸出端為xtal2,分別是89c51的19腳和18腳。在xtal1和xtal2兩端跨接石英晶體及兩個(gè)電容就可以構(gòu)成穩(wěn)定的自激振蕩器,電容c1和c2通常取30pf左右,對(duì)振蕩器頻率有微調(diào)作用。振蕩頻率范圍是1.2mhz-12mhz。晶體振蕩器的振蕩信號(hào)從xtal2端輸入到片內(nèi)的時(shí)鐘發(fā)生器上,時(shí)鐘發(fā)生器是一個(gè)2分頻的觸發(fā)器電路,它將振蕩器的信號(hào)頻率fosc除以2,向cpu提供了兩相時(shí)鐘信號(hào)p1和p2。時(shí)鐘信號(hào)的周期稱為機(jī)器狀態(tài)時(shí)間s(state),它是振蕩周期的2倍。在每個(gè)時(shí)鐘周期(即機(jī)器狀態(tài)時(shí)間s)的前半個(gè)周期,相位1信號(hào)有效,在每個(gè)時(shí)鐘周期的后半個(gè)周期,相位2有效。本設(shè)計(jì)使用的晶振為12m,并使用內(nèi)部振蕩,故僅需 再18,19腳之間接一個(gè)石英振蕩器,并各接一個(gè)電容接地。如圖3.3所示。圖3.3 振蕩電路51單片機(jī)的機(jī)械周期由s1至s6共6個(gè)狀態(tài)所組成,每個(gè)狀態(tài)又可細(xì)分為相1(p1)和相2(p2),故一個(gè)機(jī)械周期等于12個(gè)振蕩周期,所以圖3.3所示的振蕩電路的振蕩周期和機(jī)械周期為:振蕩周期=1/(12mhz)=1/12us 機(jī)械周期=6態(tài)2相振蕩周期=121/12us=1us了解指令執(zhí)行所花費(fèi)的機(jī)械周期后,即可計(jì)算延時(shí)時(shí)間。3.5 顯示電路單片機(jī)中通常使用7段led構(gòu)成字型“8”,另外,還有一個(gè)小數(shù)點(diǎn)發(fā)光二極管以顯示數(shù)字,符號(hào)及小數(shù)點(diǎn)。這種顯示器有共陽(yáng)極和共陰極兩種,發(fā)光二極管的陽(yáng)極連在一起的稱為共陽(yáng)極顯示器,陰極連在一起的稱為共陰極顯示器。一位顯示起由8個(gè)發(fā)光二極管組成,其中,7個(gè)發(fā)光二極管構(gòu)成字型“8”的各個(gè)段a-g,另一個(gè)小數(shù)點(diǎn)為dp發(fā)光二極管。當(dāng)在某段發(fā)光二極管上施加一定的正向電壓時(shí),該段即亮;不加電壓則暗。為了保護(hù)各段led不被損壞,需要加限流電阻。3.5.1 數(shù)碼管的選擇及其硬件連接在顯示部分,我采用四位數(shù)字顯示我所要顯示的溫度。因?yàn)閐s1820的測(cè)溫范圍是-55+125度,且本設(shè)計(jì)我把它的測(cè)溫精度提高到了0.1度,考慮到有百位數(shù)的顯示,也有小數(shù)位的顯示,所以我用到了一個(gè)四位一體的數(shù)碼管來(lái)顯示最后的溫度。由于提供的元件限制,我選用了一片共陽(yáng)的四位一體的數(shù)碼管,它有12個(gè)管腳,4位段選端,具體管腳分配如圖3.4所示。圖3.4 四位共陽(yáng)極數(shù)碼管 本設(shè)計(jì)我的電流放大部分采用三極管來(lái)實(shí)現(xiàn)。由于選用的數(shù)碼管是共陽(yáng)的型號(hào),故只用把段選端通過(guò)pnp三極管與單片機(jī)相連。三極管的c極接到5伏電源、e極與數(shù)碼管片選端相連、b極接上一個(gè)1k的限流電阻到單片機(jī)的p1口。我用p1口的p1.4p1.7作為數(shù)碼管段選端。用單片機(jī)的p2.0p2.7口作為8個(gè)位選端。當(dāng)然,位選端分別通過(guò)八個(gè)200歐的限流電阻與p2口相連。具體電流放大電路如圖3.5所示。圖3.5 電流放大電路3.5.2 動(dòng)態(tài)顯示由于所有4位段選線皆由一個(gè)i/o口控制,因此,在每一瞬間,4位led會(huì)顯示相同的字符。這就是動(dòng)態(tài)顯示。要想每位顯示不同的字符,就必須采用掃描方法輪流點(diǎn)亮各位led,即在每一瞬間只使某一位字符顯示。在此瞬間,段選控制i/o口輸出相應(yīng)字符段選碼(即字型碼),而位選則控制i/o口在該顯示位送入選通電平,以保證該位顯示相應(yīng)字符。段選碼,位選碼每送入一次后延遲1ms,因人眼的視覺(jué)暫留時(shí)間為0.1s(100ms),所以每位顯示的間隔不能超過(guò)20ms,并保持延時(shí)一段時(shí)間,以造成視覺(jué)暫留效果,給人看上去每個(gè)數(shù)碼管總在亮。利用視覺(jué)暫留原理,p1.4p1.7導(dǎo)通頻率每秒必須在16秒以上,頻率太快會(huì)閃爍,太慢數(shù)字會(huì)模糊。這部分是通過(guò)延時(shí)程序來(lái)實(shí)現(xiàn)的,具體的延時(shí)時(shí)間也是先大概估算下需要多少時(shí)間,再通過(guò)與實(shí)際效果比較,定下來(lái)的延時(shí)時(shí)間。具體程序?qū)⒃谲浖榻B部分給出。3.5.3 顯示位數(shù)的分配顯示部分四位數(shù)碼管的分配依次如下:百位(也為符號(hào)位)、十位、個(gè)位(個(gè)位始終帶有小數(shù)點(diǎn)顯示)、小數(shù)位。 具體介紹如下:對(duì)于百位的顯示,它又具有符號(hào)顯示的功能。本次設(shè)計(jì)對(duì)第一位數(shù)碼管的安排是:1、 當(dāng)溫度低于100度高于0度時(shí),百位顯示數(shù)字0;2、 當(dāng)溫度超過(guò)100度時(shí),百位顯示數(shù)字1;3、 當(dāng)溫度為負(fù)溫度時(shí),百位顯示“”即負(fù)號(hào)。 其他三位的顯示,考慮到了有小數(shù)顯示,故把個(gè)位數(shù)始終帶上小數(shù)點(diǎn)來(lái)顯示。十位和小數(shù)位,就始終不顯示小數(shù)點(diǎn),這樣就達(dá)到了比較容易識(shí)別的溫度顯示了。具體的實(shí)現(xiàn)這些功能在后面會(huì)介紹,主要是通過(guò)匯編語(yǔ)言編程來(lái)實(shí)現(xiàn)。3.6 串口通信本設(shè)計(jì)采用串行方式發(fā)送數(shù)據(jù)。在單片機(jī)方面主要用到了它的串行端口信號(hào)輸入輸出端:rxd,txd。然后,通過(guò)串口的電平轉(zhuǎn)換芯片max232把5v電平轉(zhuǎn)換成正負(fù)12v電平,再送到九針串口rs232,通過(guò)串口線把數(shù)據(jù)送到pc機(jī)上,最后用計(jì)算機(jī)上的溫度顯示界面顯示出來(lái)。以下介紹怎樣用這些器件來(lái)實(shí)現(xiàn)串口通信的:3.6.1 單片機(jī)串行端口mcs-51內(nèi)部有一個(gè)可規(guī)劃的串行端口,為一個(gè)全雙工的通訊端口,故可以同時(shí)發(fā)送和接收數(shù)據(jù)。串行端口的優(yōu)點(diǎn)就是使用較少的傳輸線即可完成數(shù)據(jù)的傳輸。同時(shí),mcs-51的通訊端口也是一個(gè)接收緩沖式的串行端口,在sfr中有一個(gè)sbuf的寄存器,專門供存放發(fā)送和接收的數(shù)據(jù),所以欲發(fā)送或接收,僅需對(duì)sbuf的寄存器進(jìn)行存取即可。實(shí)際上,發(fā)送和接收各有一個(gè)sbuf寄存器,且占用同一地址(99h),依照讀取或?qū)懭雜buf寄存器的動(dòng)作來(lái)決定到底使用哪一個(gè)寄存器。當(dāng)將指令寫入sbuf時(shí),及時(shí)將數(shù)據(jù)寫入串行數(shù)據(jù)發(fā)送緩沖器sbuf中發(fā)送出去;反之亦然。串行端口接收到一個(gè)字節(jié)的數(shù)據(jù)后,產(chǎn)生串行端口中斷,通知cpu至sbuf讀取數(shù)據(jù),此時(shí)串行端口可繼續(xù)接受第二個(gè)數(shù)據(jù),當(dāng)?shù)诙€(gè)數(shù)據(jù)接收完成時(shí),存于sbuf中的第一個(gè)數(shù)據(jù)若還沒(méi)被讀取,則第一個(gè)數(shù)據(jù)會(huì)丟失。同理,將一個(gè)字節(jié)數(shù)據(jù)寫入發(fā)送sbuf中,便會(huì)通過(guò)串行端口發(fā)送出去,發(fā)送完畢后便產(chǎn)生中斷,通知cpu已經(jīng)發(fā)送完成,可繼續(xù)發(fā)下一個(gè)數(shù)據(jù)。串行端口一共有四種工作模式,由sfr中的98h可位尋址的scon寄存器來(lái)選擇。本設(shè)計(jì)采用的是串行端口處于模式1的情況。此時(shí),串行端口經(jīng)由txd引腳負(fù)責(zé)發(fā)送及通過(guò)rxd引腳負(fù)責(zé)接受10位數(shù)據(jù),其中包括一個(gè)起始位、8個(gè)數(shù)據(jù)位和1個(gè)停止位。由于接收和發(fā)送是由不同的引腳負(fù)責(zé)的,故可同時(shí)接收和發(fā)送。但本設(shè)計(jì)只用到了發(fā)送數(shù)據(jù)部分,所以接收部分基本沒(méi)用,但在連接電路時(shí),還是接上了接收部分的電路。串行通信這部分的硬件很簡(jiǎn)單,單片機(jī)上只用到了txd和rxd兩個(gè)管腳。3.6.2 max232的應(yīng)用 max232產(chǎn)品是由德州儀器公司(ti)推出的一款兼容rs232標(biāo)準(zhǔn)的芯片。該器件包含2驅(qū)動(dòng)器、2接收器和一個(gè)電壓發(fā)生器電路提供tia/eia-232-f電平。該器件符合tia/eia-232-f標(biāo)準(zhǔn),每一個(gè)接收器將tia/eia-232-f電平轉(zhuǎn)換成5-v ttl/cmos電平。每一個(gè)發(fā)送器將ttl/cmos電平轉(zhuǎn)換成tia/eia-232-f電平。它的封裝形式如圖3.6,它的外圍電路連接如圖3.7。圖3.6 max232的封裝圖3.7 max232的外圍電路接法3.6.3 rs232的應(yīng)用1、rs-232功能介紹rs-232被定義為一種在低速率串行通訊中增加通訊距離的單端標(biāo)準(zhǔn)。rs-232采取不平衡傳輸方式,即所謂單端通訊。收、發(fā)端的數(shù)據(jù)信號(hào)是相對(duì)于信號(hào)地,如從dte設(shè)備發(fā)出的數(shù)據(jù)在使用db25連接器時(shí)是2腳相對(duì)7腳(信號(hào)地)的電平,db25各個(gè)引腳定義參見圖3.8。典型的rs-232信號(hào)在正負(fù)電平之間擺動(dòng),在發(fā)送數(shù)據(jù)時(shí),發(fā)送端驅(qū)動(dòng)器輸出正電平在+5+15v,負(fù)電平在-5-15v電平。當(dāng)無(wú)數(shù)據(jù)傳輸時(shí),線上為ttl,從開始傳送數(shù)據(jù)到結(jié)束,線上電平從ttl電平到rs-232電平再返回ttl電平。接收器典型的工作電平在+3+12v與-3-12v。由于發(fā)送電平與接收電平的差僅為2v至3v左右,所以其共模抑制能力差,再加上雙絞線上的分布電容,其傳送距離最大為約15米,最高速率為20kb/s。rs-232是為點(diǎn)對(duì)點(diǎn)(即只用一對(duì)收、發(fā)設(shè)備)通訊而設(shè)計(jì)的,其驅(qū)動(dòng)器負(fù)載為37k。所以rs-232適合本地設(shè)備之間的通信。2、rs-232的電氣特性eia-rs-232c對(duì)電器特性、邏輯電平和各種信號(hào)線的功能都作了規(guī)定。在txd和rxd上:邏輯1(mark)=-3v-15v、邏輯0(space)=+315v。在rts、cts、dsr、dtr和dcd等控制線上。信號(hào)有效(接通,on狀態(tài),正電壓)+3v+15v、信號(hào)無(wú)效(斷開,off狀態(tài),負(fù)電壓)=-3v-15v。即它的輸入電壓的準(zhǔn)位為正負(fù)12v,邏輯1為-12v,對(duì)應(yīng)單片機(jī)邏輯1為5v;邏輯0為+12v,對(duì)應(yīng)單片機(jī)邏輯1為0v。由于電位的準(zhǔn)位不同,所以用到icl232、max232等來(lái)實(shí)現(xiàn)電壓轉(zhuǎn)換。d型連接器的引腳名稱、功能如下:圖3.8 d型連接器的引腳圖表3.1 d型連接器的各引腳功能引腳名稱db9引腳db25引腳引 腳 功 能數(shù)據(jù)方向/cd18接收線信號(hào)檢測(cè)to pcrxd23接收數(shù)據(jù)線to pctxd32發(fā)送數(shù)據(jù)線from pc/dtr420數(shù)據(jù)終端機(jī)就緒,預(yù)備好將modem連接到線上from pcgnd57信號(hào)地線/dsr66數(shù)據(jù)設(shè)定就緒,表示modem在線上to pc/rts74要求送出,在半雙工時(shí),切換modem的發(fā)送器from pc/cts85清除以便送出,表示modem已準(zhǔn)備好發(fā)送to pcri922to pc本設(shè)計(jì)采用的9針的rs232和max232,不需外加正負(fù)12v的電源,只需5v即可,非常方便。由于考慮到電路板的焊接方法,我選用了9pin的rs232的串口座焊接在電路板上,再用一根串口線把電路板上的串口座和計(jì)算機(jī)的串口相連。這部分具體的電路連接圖見圖3.9。 圖3.9 max232與rs232的連接圖3.7 本章小結(jié) 本章主要介紹了本次設(shè)計(jì)硬件部分的設(shè)計(jì)思路和各部分具體的硬件連接。首先從整體上介紹了本次設(shè)計(jì)的主要思路和方案,然后分別介紹了ds1820與單片機(jī)接口電路部分、復(fù)位電路及振蕩電路部分、顯示電路部分、串口通信部分,這四大部分的具體實(shí)現(xiàn)方案。由于單片機(jī)和溫度傳感器ds1820都在前面有具體的介紹,故在這里只提到它們的應(yīng)用。對(duì)于串口通信部分用到了芯片:max232和rs232,在前面沒(méi)有介紹過(guò),故在本章中對(duì)它們作了簡(jiǎn)單的介紹。第4章 軟件設(shè)計(jì)原理4.1 軟件設(shè)計(jì)的總思想軟件部分設(shè)計(jì)思路也是根據(jù)總的設(shè)計(jì)流程來(lái)設(shè)計(jì)的。該設(shè)計(jì)也主要分為五大部分。按照程序流程分為:讀取ds1820內(nèi)部數(shù)據(jù)、設(shè)置ds1820、數(shù)據(jù)處理和精度提高、數(shù)碼管顯示、串口通信。由于我所要做的是溫度采集系統(tǒng),故每次采集并顯示和發(fā)送完成后,還需要繼續(xù)返回到一開始的采集,循環(huán)的進(jìn)行采集、處理、顯示。具體的流程圖如圖4.1:圖4.1 總的程序流程圖下面的各小結(jié)根據(jù)硬件設(shè)計(jì)的四大部分來(lái)分別介紹他們的軟件設(shè)計(jì),即傳感器部分、單片機(jī)的溫度數(shù)據(jù)處理部分及精度提高部分、數(shù)碼管顯示部分和串口通信部分。4.2 傳感器程序設(shè)計(jì)根據(jù)前面第二章中關(guān)于溫度傳感器ds1820的復(fù)位和讀寫時(shí)序可以看出,ds1820對(duì)時(shí)序要求很嚴(yán)格。因此在對(duì)它進(jìn)行編程時(shí),對(duì)每一個(gè)脈沖都要進(jìn)行嚴(yán)格計(jì)算。在這部分的程序中用到了許多不同的延時(shí)。對(duì)于傳感器這部分的程序設(shè)計(jì)主要可以分為三部分:初始化、傳感器讀操作、傳感器寫操作。因?yàn)閐s1820為單總線的數(shù)字傳感器,必須要人為的對(duì)它串行方式地寫入我們想要進(jìn)行的操作所對(duì)應(yīng)的指令。然而,每次對(duì)rom進(jìn)行操作前,必須先對(duì)其進(jìn)行初始化操作。最終我們是要讀取ds1820內(nèi)部筆記本的值,用來(lái)轉(zhuǎn)換成溫度,對(duì)于這部分也是通過(guò)串行方式讀取數(shù)據(jù)的。傳感器部分的程序流程圖如圖4.2:圖4.2 ds1820部分流程圖在ds1820中,任何命令的發(fā)送必須先由主機(jī)對(duì)其進(jìn)行初始化,初始化成功后才能發(fā)送命令和數(shù)據(jù),故初始化這部分十分重要。其初始化部分的程序流程圖見圖4.3:圖4.3 ds1820初始化部分流程圖4.3 溫度轉(zhuǎn)換和精度提高這部分的程序?qū)崿F(xiàn)了正負(fù)溫度情況下的溫度轉(zhuǎn)換和精度提高。并最終轉(zhuǎn)換成了bcd碼存放在了70h73h中。具體流程圖見圖4.4。以下各小結(jié)詳細(xì)說(shuō)明這部分程序的原理。圖4.4 數(shù)據(jù)轉(zhuǎn)換及精度提高部分流程圖4.3.1 溫度轉(zhuǎn)換根據(jù)第二章中的介紹可以知道,ds1820內(nèi)部寄存器中的第0和第1字節(jié)表示溫度的高字節(jié)和低字節(jié)。并且ds1820中給出的這兩個(gè)字節(jié)溫度是用16位補(bǔ)碼的形式給出,16位的數(shù)據(jù)不僅不利于存儲(chǔ)和傳送,也不能夠顯示。而為了計(jì)算的方便,需要將其轉(zhuǎn)換為8位的二進(jìn)制代碼。所以,在這部分的溫度轉(zhuǎn)換上要考慮溫度的正負(fù)。但是ds1820的高8位為溫度的符號(hào)位,即這16位數(shù)據(jù)中就只有低8位和高字節(jié)中的最低位,共九位為有用的。于是,我先得判斷溫度高字節(jié)的最低位是0還是1,來(lái)判斷溫度為正還是負(fù)。對(duì)于負(fù)數(shù)的情況下,就把低字節(jié)取反,正數(shù)情況下不變。4.3.2 精度提高 1、精度提高的原理ds1820內(nèi)部暫存寄存器的分布如表4.1所示, 表4.1 ds1820內(nèi)部9字節(jié)筆記本內(nèi)容0位1位2位3位4位5位6位7位8位lsbmsbthtlffhffhcount-rmncount-per-ccrc其中第7字節(jié)存放的是當(dāng)溫度寄存器停止增值時(shí)計(jì)數(shù)器1的計(jì)數(shù)剩余值,第8字節(jié)存放的是每度所對(duì)應(yīng)的計(jì)數(shù)值,這樣,我們就可以通過(guò)下面的方法獲得高分辨率的溫度測(cè)量結(jié)果。首先用ds1820提供的讀暫存寄存器指令(beh)讀出以0.5為分辨率的溫度測(cè)量結(jié)果,然后切去測(cè)量結(jié)果中的最低有效位(lsb),得到所測(cè)實(shí)際溫度整數(shù)部分t整數(shù),然后再用beh指令讀取計(jì)數(shù)器1的計(jì)數(shù)剩余值m剩余和每度計(jì)數(shù)值m每度,考慮到ds1820測(cè)量溫度的整數(shù)部分以0.25、0.75為進(jìn)位界限的關(guān)系,實(shí)際溫度t實(shí)際可用下式計(jì)算得到:t實(shí)際=(t整數(shù)0.25)+(m每度m剩余)/m每度 = t整數(shù)+0.75 (m剩余/m每度) = t整數(shù)+0.75(count-rmn/ count-per-c)因此,在讀取ds1820內(nèi)部數(shù)據(jù)時(shí),我把這就字節(jié)內(nèi)容都讀了出來(lái),從低到高依次放到了35h3dh中。在轉(zhuǎn)換時(shí)要用到那個(gè)字節(jié)的溫度就直接在這九個(gè)存儲(chǔ)單元取數(shù)即可。2、實(shí)現(xiàn)方法從上面的公式可以看出,出現(xiàn)了小數(shù)0.75、還有除法。我想把精度提高到0.1度,就必須使得這部分的除法產(chǎn)生的小數(shù)部分保留。然而,單片機(jī)匯編語(yǔ)言中只有一條除法指令:div ab。這條指令無(wú)法除得小數(shù),只能得到余數(shù)。于是,我采用了先把整個(gè)公式中所要用到的數(shù),都擴(kuò)大100倍,這樣,即我做除法后,得到的商也擴(kuò)大了100倍。然后,再把最終的結(jié)果除以10,舍去余數(shù)后再除10就可得到精確到0.1度的小數(shù)位,對(duì)于整數(shù)部分在轉(zhuǎn)化成bcd碼,最后把小數(shù)位到百位分別存放在70h73h中。但是,當(dāng)我把所有的數(shù)據(jù)都放大了100倍后,又出現(xiàn)了新的問(wèn)題。一個(gè)字節(jié)所能存的最大數(shù)是255,而所測(cè)的溫度超過(guò)放大100倍后,自然就會(huì)發(fā)生溢出。當(dāng)然,除法也是,放大了100倍后再進(jìn)行除法,很可能使得最后的商超過(guò)255而發(fā)生溢出。于是,我采取了把單字節(jié)擴(kuò)展成雙字節(jié),進(jìn)行雙字節(jié)的加、減、乘、除和求補(bǔ)運(yùn)算。所以必須用到雙字節(jié)的加、減、乘、除和求補(bǔ)運(yùn)算的子程序。對(duì)于除法,我還用到了雙字節(jié)除單字節(jié)的子程序,這是在最后溫度除10得到小數(shù)位是用到的。因?yàn)檫@時(shí)它的商就是實(shí)際溫度,不可能發(fā)生溢出。在整個(gè)數(shù)據(jù)處理過(guò)程中,我基本上在進(jìn)行無(wú)符號(hào)數(shù)的運(yùn)算。對(duì)于負(fù)數(shù)我都是對(duì)它進(jìn)行求補(bǔ),然后在后面的運(yùn)算過(guò)程中,在對(duì)它有加減運(yùn)算時(shí)采取反運(yùn)算。反正就是始終記得那些數(shù)是負(fù)數(shù),在運(yùn)算過(guò)程中對(duì)它作相應(yīng)的處理。4.4 數(shù)碼管顯示數(shù)碼管顯示部分具體原理在前面硬件介紹時(shí)已經(jīng)有詳細(xì)說(shuō)明了

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論