單片機+STC89C52++溫度傳感器.doc_第1頁
單片機+STC89C52++溫度傳感器.doc_第2頁
單片機+STC89C52++溫度傳感器.doc_第3頁
單片機+STC89C52++溫度傳感器.doc_第4頁
單片機+STC89C52++溫度傳感器.doc_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機數(shù)字溫度計摘要:本設(shè)計單片機采用AT89C52芯片,數(shù)字溫度傳感器采用美國DALASS公司的1Wire器件DS18B20,即單總線器件DS18B20,與單片機組成一個測溫系統(tǒng),當系統(tǒng)上電時,溫度傳感器就會讀出當前環(huán)境的溫度,并在三位LED數(shù)模顯示管上顯示出當前的溫度,該測溫儀的測溫范圍為0110,按此要求設(shè)計硬件和軟件以實現(xiàn)這一功能。關(guān)鍵詞:單片機STC89C52 溫度傳感器DS18B20; 溫度 測量電子線路 單片機 匯編語言 溫度1 引言: 單片機又稱單片微控制器,它不是完成某一個邏輯功能的芯片,而是把一個計算機系統(tǒng)集成到一個芯片上。概括的講:一塊芯片就成了一臺計算機。它的體積小、質(zhì)量輕、價格便宜、為學習、應(yīng)用和開發(fā)提供了便利條件。同時,學習使用單片機是了解計算機原理與結(jié)構(gòu)的最佳選擇。目前單片機滲透到我們生活的各個領(lǐng)域,幾乎很難找到哪個領(lǐng)域沒有單片機的蹤跡。單片機在檢測和控制系統(tǒng)中得到廣泛的應(yīng)用, 溫度則是系統(tǒng)常需要測量、控制和保持的一個量。本設(shè)計所介紹的數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便,測溫范圍廣,測溫準確,其輸出溫度采用數(shù)字顯示,該設(shè)計控制器使用單片機STC89C52,測溫傳感器使用DS18B20,用4位共陽極LED數(shù)碼管以串口傳送數(shù)據(jù),實現(xiàn)溫度顯示,能準確達到以上要求。2 總體設(shè)計方案:2.1 設(shè)計思路:(1)本設(shè)計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測溫度變化的電壓或電流采集過來,進行A/D轉(zhuǎn)換后,就可以用單片機進行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設(shè)計需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。(2)從中考慮到用溫度傳感器,在單片機電路設(shè)計中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進行轉(zhuǎn)換,就可以滿足設(shè)計要求。從以上兩種方案,很容易看出,采用方案(2),電路比較簡單,軟件設(shè)計也比較簡單,故采用了方案(2)。時鐘振蕩單片機復(fù)位溫 度 傳 感 器LED顯 示主 控 制 器 圖1總體設(shè)計方框圖2.2設(shè)計方框圖根據(jù)設(shè)計的所需要求分析單片機的工作原理,可得出來溫度計電路設(shè)計總體設(shè)計方框圖如圖1所示,控制器采用單片機STC89S52,溫度傳感器采用DS18B20,用4位LED數(shù)碼管以串口傳送數(shù)據(jù)實現(xiàn)溫度顯示。2.3 設(shè)計主元件電氣性能:1. STC89C52的主要性能:l 與MCS-51單片機產(chǎn)品兼容l 8KFlash字節(jié)閃速存儲器l 1000次擦寫周期l 全靜態(tài)操作:0Hz88Hzl 32個可編程I/O口線l 三個16位定時器/計數(shù)器l 八個中斷源l 全雙工UART串行通道l 低功耗空閑和掉電模式l 掉電后中斷可喚醒l 看門狗定時器l 雙數(shù)據(jù)指針VCC : 電源GND: 地P0 口:P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動8個TTL邏輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。當訪問外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0具有內(nèi)部上拉電阻。在flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。P1 口: 是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P1 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0和P1.2分別作定時器/計數(shù)器2的外部計數(shù)輸入(P1.0/T2)和時器/計數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如下表1所示。在flash編程和校驗時,P1口接收低8位地址字節(jié)。P2 口:P2 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P2 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX DPTR)時,P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強的內(nèi)部上拉發(fā)送1。在使用8位地址(如MOVX RI)訪問外部數(shù)據(jù)存儲器時,P2口輸出P2鎖存器的內(nèi)容。在flash編程和校驗時,P2口也接收高8位地址字節(jié)和一些控制信號。 表1 P1口功能 表2 P3口功能P3 口:P3 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,p2 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P3 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3口亦作為AT89S52特殊功能(第二功能)使用,如上表2所示。在flash編程和校驗時,P3口也接收一些控制信號。RST: 復(fù)位輸入。晶振工作時,RST腳持續(xù)2 個機器周期高電平將使單片機復(fù)位??撮T狗計時完成后,RST 腳輸出96 個晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認狀態(tài)下,復(fù)位高電平有效。ALE/PROG:地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8 位地址的輸出脈沖。在flash編程時,此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調(diào),在每次訪問外部數(shù)據(jù)存儲器時,ALE脈沖將會跳過。如果需要,通過將地址為8EH的SFR的第0位置 “1”,ALE操作將無效。這一位置 “1”,ALE 僅在執(zhí)行MOVX 或MOVC指令時有效。否則,ALE 將被微弱拉高。這個ALE 使能標志位(地址為8EH的SFR的第0位)的設(shè)置對微控制器處于外部執(zhí)行模式下無效。PSEN:外部程序存儲器選通信號(PSEN)是外部程序存儲器選通信號。當STC89C52從外部程序存儲器執(zhí)行外部代碼時,PSEN在每個機器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,PSEN將不被激活。EA/VPP:訪問外部程序存儲器控制信號。為使能從0000H 到FFFFH的外部程序存儲器讀取指令,EA必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。在flash編程期間,EA也接收12伏VPP電壓。XTAL1:振蕩器反相放大器和內(nèi)部時鐘發(fā)生電路的輸入端。XTAL2:振蕩器反相放大器的輸出端。存儲器結(jié)構(gòu)MCS-51器件有單獨的程序存儲器和數(shù)據(jù)存儲器。外部程序存儲器和數(shù)據(jù)存儲器都可以64K尋址。程序存儲器:如果EA引腳接地,程序讀取只從外部存儲器開始。對于89S52,如果EA 接VCC,程序讀寫先從內(nèi)部存儲器(地址為0000H1FFFH)開始,接著從外部尋址,尋址地址為:2000HFFFFH。數(shù)據(jù)存儲器:STC89C52 有256 字節(jié)片內(nèi)數(shù)據(jù)存儲器。高128 字節(jié)與特殊功能寄存器重疊。也就是說高128字節(jié)與特殊功能寄存器有相同的地址,而物理上是分開的。當一條指令訪問高于7FH 的地址時,尋址方式?jīng)Q定CPU 訪問高128 字節(jié)RAM 還是特殊功能寄存器空間。直接尋址方式訪問特殊功能寄存器(SFR)晶振特性如圖2所示,STC89C52 單片機有一個用于構(gòu)成內(nèi)部振蕩器的反相放大器,XTAL1 和XTAL2 分別是放大器的輸入、輸出端。石英晶體和陶瓷諧振器都可以用來一起構(gòu)成自激振蕩器圖2 自激振蕩器原理圖定時器0 和定時器1在STC89C52 中,定時器0 和定時器1 的操作與89C51 一樣。定時器2定時器2是一個16位定時/計數(shù)器,它既可以做定時器,又可以做事件計數(shù)器。其工作方式由特殊寄存器T2CON中的C/T2位選擇(如表2所示)。定時器2有三種工作模式:捕捉方式、自動重載(向下或向上計數(shù))和波特率發(fā)生器。工作模式由T2CON中的相關(guān)位選擇。定時器2 有2 個8位寄存器:TH2和TL2。在定時工作方式中,每個機器周期,TL2 寄存器都會加1。由于一個機器周期由12 個晶振周期構(gòu)成,因此,計數(shù)頻率就是晶振頻率的1/12。中斷STC89C52 有6個中斷源:兩個外部中斷(INT0 和INT1),三個定時中斷(定時器0、1、2)和一個串行中斷每個中斷源都可以通過置位或清除特殊寄存器IE 中的相關(guān)中斷允許控制位分別使得中斷源有效或無效。IE還包括一個中斷允許總控制位EA,它能一次禁止所有中斷。定時器2可以被寄存器T2CON中的TF2和EXF2的或邏輯觸發(fā)。程序進入中斷服務(wù)后,這些標志位都可以由硬件清0。實際上,中斷服務(wù)程序必須判定是否是TF2 或EXF2激活中斷,標志位也必須由軟件清0。下表2為中斷允許控制寄存器功能。表3 中斷允許控制寄存器2. DS18B20的主要性能本次設(shè)計使用到了由dallas半導(dǎo)體公司生產(chǎn)的ds18b20型單線智能溫度傳感器,屬于新一代適配微處理器的智能溫度傳感器,可廣泛用于工業(yè)、民用、軍事等領(lǐng)域的溫度測量及控制儀器、測控系統(tǒng)和大型設(shè)備中。它具有體積小,接口方便,因而設(shè)計中采用了此元器件。DS1820 數(shù)字溫度計提供9 位溫度讀數(shù),指示器件的溫度特性:獨特的單線接口只需1 個接口引腳即可通信多點multidrop 能力使分布式溫度檢測應(yīng)用得以簡化不需要外部元件可用數(shù)據(jù)線供電不需備份電源測量范圍從-55 至+125 增量值為0.5 等效的華氏溫度范圍是-67 F 至257 F增量值為0.9 F以9 位數(shù)字值方式讀出溫度在1 秒典型值內(nèi)把溫度變換為數(shù)字用戶可定義的非易失性的溫度告警設(shè)置告警搜索命令識別和尋址溫度在編定的極限之外的器件溫度告警情況應(yīng)用范圍包括恒溫控制工業(yè)系統(tǒng)消費類產(chǎn)品溫度計或任何熱敏系統(tǒng)圖3的方框圖表示DS1820 的主要部件DS1820 有三個主要的數(shù)據(jù)部件1 64 位激光lasered ROM;2 溫度靈敏元件和3 非易失性溫度告警觸發(fā)器TH 和TLC64 位ROM和單線接口高速緩存存儲器與控制邏輯溫度傳感器高溫觸發(fā)器TH低溫觸發(fā)器TL配置寄存器8位CRC發(fā)生器Vdd 圖3 DS18B20內(nèi)部結(jié)構(gòu) 64位ROM的結(jié)構(gòu)開始位是產(chǎn)品類型的編號,接著是每個器件的惟一的序號,共有48位,最后位是前面56位的CRC檢驗碼,這也是多個DS18B20可以采用一線進行通信的原因。溫度報警觸發(fā)器和,可通過軟件寫入戶報警上下限。 在單線接口情況下在ROM 操作未定建立之前不能使用存貯器和控制操作主機必須首先提供五種ROM 操作命令之一1 Read ROM(讀ROM) 2 Match ROM(符合ROM),3)Search ROM(搜索ROM),4)Skip ROM(跳過ROM),或5 Alarm Search(告警搜索) 這些命令對每一器件的64 位激光ROM 部分進行操作如果在單線上有許多器件那么可以挑選出一個特定的器件并給總線上的主機指示存在多少器件及其類型在成功地執(zhí)行了ROM 操作序列之后可使用存貯器和控制操作然后主機可以提供六種存貯器和控制操作命令之一.一個控制操作命令指示DS1820 完成溫度測量該測量的結(jié)果將放入DS1820 的高速暫存便箋式存貯器Scratchpad memory 通過發(fā)出讀暫存存儲器內(nèi)容的存儲器操作命令可以讀出此結(jié)果每一溫度告警觸發(fā)器TH 和TL 構(gòu)成一個字節(jié)的EEPROM 如果不對DS1820 施加告警搜索命令這些寄存器可用作通用用戶存儲器使用存儲器操作命令可以寫TH 和TL 對這些寄存器的讀訪問通過便箋存儲器所有數(shù)據(jù)均以最低有效位在前的方式被讀寫.DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴展的二進制補碼讀數(shù)形式提供,以0.0625/LSB形式表達,其中S為符號位。 表4 DS18B2012位溫度數(shù)據(jù)表4是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。如下表為18B20的溫度/數(shù)據(jù)關(guān)系 表5 DS18B20的溫度/數(shù)據(jù)關(guān)系每一DS1820 包括一個唯一的64 位長的ROM 編碼開紿的8 位是單線產(chǎn)品系列編碼DS1820 編碼是10h 接著的48 位是唯一的系列號最后的8 位是開始56 位CRC 見表6, 64位ROM 和ROM 操作控制部分允許DS1820 作為一個單線器件工作并遵循單線總線系統(tǒng)一節(jié)中所詳述的單線協(xié)議直到ROM 操作協(xié)議被滿足DS1820 控制部分的功能是不可訪問的此協(xié)議在ROM操作協(xié)議流程圖中敘述單線總線主機必須首先操作五種ROM 操作命令之一1 Read ROM(讀ROM),2)Match ROM(匹配ROM),3)Search ROM(搜索ROM),4)Skip ROM(跳過ROM),或5)Alarm Search告警搜索在成功地執(zhí)行了ROM 操作序列之后DS1820 特定的功能便可訪問然后總線上主機可提供六個存貯器和控制功能命令之一. 表6 64 位激光ROM暫存存儲器包含了8個連續(xù)字節(jié),前兩個字節(jié)是測得的溫度信息,第一個字節(jié)的內(nèi)容是溫度的低八位,第二個字節(jié)是溫度的高八位。第三個和第四個字節(jié)是TH、TL的易失性拷貝,第五個字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個字節(jié)的內(nèi)容在每一次上電復(fù)位時被刷新。第六、七、八個字節(jié)用于內(nèi)部計算。第九個字節(jié)是冗余檢驗字節(jié)。 表7 DS18B20暫存寄存器分布該字節(jié)各位的意義如下: TM R1 R0 1 1 1 1 1 R1R0分辨率溫度最大轉(zhuǎn)換時間009位93.75ms 0110位187.5ms 1011位375ms 1112位750ms 表8 分辨率設(shè)置表低五位一直都是1 ,TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動。R1和R0用來設(shè)置分辨率,如上表8所示:(DS18B20出廠時被設(shè)置為12位)由表9可見,DS18B20溫度轉(zhuǎn)換的時間比較長,而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時間越長。因此,在實際應(yīng)用中要將分辨率和轉(zhuǎn)換時間權(quán)衡考慮。高速暫存的第、字節(jié)保留未用,表現(xiàn)為全邏輯。第字節(jié)讀出前面所有字節(jié)的CRC碼,可用來檢驗數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。當DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存儲器的第、字節(jié)。單片機可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時低位在先,高位在后,數(shù)據(jù)格式以0.0625LSB形式表示。當符號位時,表示測得的溫度值為正值,可以直接將二進制位轉(zhuǎn)換為十進制;當符號位時,表示測得的溫度值為負值,要先將補碼變成原碼,再計算十進制數(shù)值。 表9 DS18B20溫度轉(zhuǎn)換時間表DS18B20完成溫度轉(zhuǎn)換后,就把測得的溫度值與RAM中的TH、T字節(jié)內(nèi)容作比較。若TH或TTL,則將該器件內(nèi)的報警標志位置位,并對主機發(fā)出的報警搜索命令作出響應(yīng)。因此,可用多只DS18B20同時測量溫度并進行報警搜索。在64位ROM的最高有效字節(jié)中存儲有循環(huán)冗余檢驗碼(CRC)。主機ROM的前56位來計算CRC值,并和存入DS18B20的CRC值作比較,以判斷主機收到的ROM數(shù)據(jù)是否正確。ROM 操作命令一旦總線主機檢測到從屬器件的存在它便可以發(fā)出器件ROM 操作命令之一所有ROM 操作命令均為8 位長這些命令列表如下參見圖6 的流程圖Read ROM(讀ROM) 33h此命令允許總線主機讀DS1820 的8 位產(chǎn)品系列編碼唯一的48 位序列號以及8 位的CRC此命令只能在總線上僅有一個DS1820 的情況下可以使用如果總線上存在多于一個的從屬器件那么當所有從片企圖同時發(fā)送時將發(fā)生數(shù)據(jù)沖突的現(xiàn)象漏極開路會產(chǎn)生線與的結(jié)果Match ROM( 符合 ROM) 55h符合ROM 命令后繼以64 位的ROM 數(shù)據(jù)序列允許總線主機對多點總線上特定的DS1820尋址只有與64 位ROM 序列嚴格相符的DS1820 才能對后繼的存貯器操作命令作出響應(yīng)所有與64位ROM 序列不符的從片將等待復(fù)位脈沖此命令在總線上有單個或多個器件的情況下均可使用Skip ROM( 跳過ROM ) CCh在單點總線系統(tǒng)中此命令通過允許總線主機不提供64 位ROM 編碼而訪問存儲器操作來節(jié)省時間如果在總線上存在多于一個的從屬器件而且在Skip ROM 命令之后發(fā)出讀命令那么由于多個從片同時發(fā)送數(shù)據(jù)會在總線上發(fā)生數(shù)據(jù)沖突漏極開路下拉會產(chǎn)生線與的效果earch ROM( 搜索ROM) F0h當系統(tǒng)開始工作時總線主機可能不知道單線總線上的器件個數(shù)或者不知道其64 位ROM 編碼搜索ROM 命令允許總線主機使用一種消去elimination 處理來識別總線上所有從片的64 位 表10 DS1820 命令集Alarm Search(告警搜索) ECh此命令的流程與搜索ROM 命令相同但是僅在最近一次溫度測量出現(xiàn)告警的情況下DS1820才對此命令作出響應(yīng)告警的條件定義為溫度高于TH 或低于TL 只要DS1820 一上電告警條件DS1820就保持在設(shè)置狀態(tài)直到另一次溫度測量顯示出非告警值或者改變TH 或TL 的設(shè)置使得測量值再一次位于允許的范圍之內(nèi)貯存在EEPROM 內(nèi)的觸發(fā)器值用于告警表10為DS1820 命令集:3 系統(tǒng)整體硬件電路系統(tǒng)整體硬件電路包括,傳感器數(shù)據(jù)采集電路,溫度顯示電路,單片機主板電路等,通過利用電路CAD工具pretel DXP可畫出如圖4 所示的電路圖。 圖4 電路原理圖因為此次制作的電路為自制的PCB板,再經(jīng)過電路CAD工具Protel DXP的電路板PCB繪出電路所需PCB版圖制作出自制的PCB板. 3 設(shè)計原理分析:3.1 時鐘電路的設(shè)計:通過設(shè)置T2CON(見表2)中的TCLK或RCLK可選擇定時器2 作為波特率發(fā)生器。如果定時器2作為發(fā)送或接收波特率發(fā)生器,定時器1可用作它用,發(fā)送和接收的波特率可以不同。設(shè)置RCLK 和(或)TCLK 可以使定時器2 工作于波特率產(chǎn)生模式。波特率產(chǎn)生工作模式與自動重載模式相似,因此,TH2 的翻轉(zhuǎn)使得定時器2 寄存器重載被軟件預(yù)置16位值的RCAP2H和RCAP2L中的值。模式1和模式3的波特率由定時器2溢出速率決定,定時器可設(shè)置成定時器,也可為計數(shù)器。在多數(shù)應(yīng)用情況下,一般配置成定時方式(CP/T2=0)。定時器2 用于定時器操作與波特率發(fā)生器有所不同,它在每一機器周期(1/12晶振周期)都會增加;然而,作為波特率發(fā)生器,它在每一機器狀態(tài)(1/2晶振周期)都會增加。波特率計算公式如下:模式1和模式3的波特率晶振頻率/3265536 - (RCAP2H,RCAP2L)3.2 控制電路的設(shè)計:主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度值,溫度測量每1s進行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見圖5所示。Y發(fā)DS18B20復(fù)位命令發(fā)跳過ROM命令發(fā)讀取溫度命令讀取操作,CRC校驗9字節(jié)完?CRC校驗正?確?移入溫度暫存器結(jié)束NNY初始化調(diào)用顯示子程序1S到?初次上電讀出溫度值溫度計算處理顯示數(shù)據(jù)刷新發(fā)溫度轉(zhuǎn)換開始命令NYNY 圖5 主程序流程圖 圖6讀溫度流程圖發(fā)DS18B20復(fù)位命令發(fā)跳過ROM命令發(fā)溫度轉(zhuǎn)換開始命令 結(jié)束 讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進行CRC校驗,校驗有錯時不進行溫度數(shù)據(jù)的改寫。 圖7 溫度轉(zhuǎn)換流程圖 3.4 計算溫度子程序計算溫度子程序?qū)AM中讀取值進行BCD碼的轉(zhuǎn)換運算,并進行溫度值正負的判定,其程序流程圖如圖8所示。溫度數(shù)據(jù)移入顯示寄存器十位數(shù)0?百位數(shù)0?十位數(shù)顯示符號百位數(shù)不顯示百位數(shù)顯示數(shù)據(jù)(不顯示符號) 結(jié)束NNYY 開始溫度零下?溫度值取補碼置“”標志計算小數(shù)位溫度BCD值 計算整數(shù)位溫度BCD值 結(jié)束置“+”標志NY 圖8計算溫度流程圖 圖9顯示數(shù)據(jù)刷新流程圖 所編寫的程序如下:;*;說明:程序預(yù)定義;*LED7A_CTRLEQUP1.7;數(shù)碼管第一位控制引腳(0為有效,1為無效)LED7B_CTRLEQUP1.6;數(shù)碼管第二位控制引腳LED7C_CTRLEQUP1.5;數(shù)碼管第三位控制引腳LED7D_CTRLEQUP1.4;數(shù)碼管第四位控制引腳LED7_STATUSEQUP0;數(shù)碼管狀態(tài)引腳(0為有效,1為無效)LED7A_DATA EQU70H;數(shù)碼管第一位顯示值(千位)LED7B_DATA EQU71H;數(shù)碼管第二位顯示值(百位)LED7C_DATA EQU72H;數(shù)碼管第三位顯示值(十位)LED7D_DATA EQU73H;數(shù)碼管第四位顯示值(個位)LED7_NUMEQU74H;數(shù)碼管動態(tài)掃描值(值為從0到3)DQEQUP3.2;溫度芯片數(shù)據(jù)端TEMLEQU76H;溫度數(shù)據(jù)低位TEMHEQU77H;溫度數(shù)據(jù)高位;*;說明:程序開始;*ORG0000H;程序首地址 PC=0000HJMPSTART;程序跳轉(zhuǎn)到START PC=0030H ORG000BH;T0中斷程序入口JMPLED7SCAN;跳到數(shù)碼管動態(tài)掃描處理程序ORG0030H;程序開始START:MOVDPTR, #LED7TAB;數(shù)碼管顯示碼表地址送DPTRMOVLED7_NUM, #0;數(shù)碼管動態(tài)掃描值至0,掃描第一位;T0中斷設(shè)定MOVTMOD, #00000001B;使用T0:GATE=0,C/T=0(定時),M1 M0=01(工作方式1)MOVTH0, #0ECH;中斷時間為5毫秒 MOVTL0, #078HSETBET0 ;允許T0中斷SETB TR0;使T0工作SETBEA;總中斷開啟L1:MOVLED7A_DATA, #16;數(shù)碼管第一位初始值MOVLED7B_DATA, #16;數(shù)碼管第二位初始值MOVLED7C_DATA, #0 ;數(shù)碼管第三位初始值MOVLED7D_DATA, #0 ;數(shù)碼管第四位初始值L2:CLRTR0SETBDQCALLINIT ;初始化MOVA,#0CCH;跳過ROM匹配CALLWRITEMOVA,#44H;發(fā)出溫度轉(zhuǎn)換命令CALLWRITESETBTR0MOVR7,#50H;延時750ms轉(zhuǎn)換時間CALLDELAYCLRTR0CALLINIT ;準備讀溫度前先復(fù)位MOVA,#0CCH;跳過ROM匹配CALLWRITEMOVA,#0BEH;發(fā)出讀溫度命令CALLWRITECALLREAD ;讀出溫度MOVTEML,ACALLREADMOVTEMH,ASETBTR0MOVA,TEML;溫度轉(zhuǎn)換ANLA,#0F0HSWAPAMOVTEML,AMOVA,TEMHANLA,#0FHSWAPAORLA,TEMLMOVR3,ACLRACLRCL3:ADDA,#01HDAADJNZR3,L3MOVTEML,AANLA,#0FH;顯示數(shù)據(jù)MOVLED7D_DATA,AMOVA,TEMLSWAPAANLA,#0FHMOVLED7C_DATA,AMOVR7,#0FFH;延時CALLDELAY MOVR7,#0FFH;延時CALLDELAYMOVR7,#0FFH;延時CALLDELAYMOVR7,#0FFH;延時CALLDELAYMOVR7,#0FFH;延時CALLDELAYMOVR7,#0FFH;延時CALLDELAYJMPL2;循環(huán);*;函數(shù):INIT;說明: 初始化子程序;*INIT: SETB DQ NOP CLR DQ MOV R7,#34 ;延時510ms CALL DELAY SETB DQ MOV R7,#04 ;延時60ms CALL DELAY MOV R7,#28 ;延時420ms CALL DELAY SETB DQ ;然后拉高數(shù)據(jù)線BACK:RET;*;函數(shù):WRITE;說明: DS18B20寫字節(jié)操作;*WRITE: CLR C MOV R2,#8 ;一共8位數(shù)據(jù)WR1: CLR DQ MOV R7,#1 CALL DELAY RRC A MOV DQ,C MOV R7,#1 CALL DELAY SETB DQ NOP DJNZ R2,WR1 SETB DQ RET;*;函數(shù):READ;說明: DS18B20讀字節(jié)操作;*READ: MOV R2,#8 ;數(shù)據(jù)一共有8位WIN01: CLR C SETB DQ NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R7,#01 CALL DELAY MOV C,DQ MOV R7,#03 CALL DELAY RRC A DJNZ R2,WIN01 RET;*;函數(shù):LEDSCAN;說明: 數(shù)碼管動態(tài)掃描處理程序;*LED7SCAN:PUSHACC;ACC入棧PUSHPSW;PSW入棧MOVA, LED7_NUM;數(shù)碼管動態(tài)掃描值送ACJNEA, #0, LED7SCAN_1;若數(shù)碼管動態(tài)掃描值為0,則處理數(shù)碼管的第一位,否則跳轉(zhuǎn)到LED7SCAN_1SETBLED7D_CTRL;設(shè)置數(shù)碼管第四位無效MOVA, LED7A_DATA;將千位值送AMOVCA, A+DPTR;將顯示碼送ACLRLED7A_CTRL;設(shè)置數(shù)碼管第一位有效JMPLED7SCAN_4;跳轉(zhuǎn)到LED7SCAN_4LED7SCAN_1:CJNEA, #1, LE

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論