MCS51單片機機應用于溫度控制器畢業(yè)論文_第1頁
MCS51單片機機應用于溫度控制器畢業(yè)論文_第2頁
MCS51單片機機應用于溫度控制器畢業(yè)論文_第3頁
MCS51單片機機應用于溫度控制器畢業(yè)論文_第4頁
MCS51單片機機應用于溫度控制器畢業(yè)論文_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、目 錄1 前言12 溫度控制器的技術參數23 系統設計方案的論證33.1 方案比選33.2 方案說明44 控制系統設計54.1 系統的工作原理54.2 硬件電路設計64.3 系統軟件設計165 調試,安裝,運行305.1 系統硬件調試305.2 系統軟件調試306 小結3132 / 33MCS51單片機機應用于溫度控制器摘要: 本文論述了采用單片機控制的智能溫度控制器,使用AT89C4051單片機、ADS7844E A/D轉換芯片、HT1621B液晶顯示驅動芯片與液晶顯示器,實現溫度的測量、輸出控制與顯示功能。關鍵字:單片機、A/D轉換,液晶顯示與其驅動1 前 言模擬電路溫度控制器存在電路復雜

2、、功能簡單和調試不方便的問題,隨著電子技術的快速發(fā)展,超大規(guī)模集成電路的技術越來越成熟,制造成本越來越低,單片機在軍事、工業(yè)、通訊、家用電器、智能儀表等領域的應用越來越廣泛,使產品的功能、精度和質量大幅度提高;同時,電路的設計更簡單、故障率低、可靠性高、成本低;特別是近幾年來Flash技術的發(fā)展,使單片機系統的開發(fā)周期大大縮短,開發(fā)成本大幅降低,使用單片機控制的智能儀表是儀表領域發(fā)展的必然趨勢。本文論述了采用ATMEL公司的AT89C4051單片機和美國Burr-Brown公司的ADS7844E模-數轉換芯片以與HOLTEK公司的HT1621B液晶顯示驅動芯片設計的LCD顯示智能溫度控制器。本

3、系統實現了模擬溫度數據采集、模擬量到數字量轉換、軟件對溫度信號進行非線性校正,單片機數據運算與邏輯處理、LCD顯示、鍵盤處理與繼電器輸出控制功能。本文主要介紹了智能溫度控制器的功能和設計的過程。重點說明電路設計、軟件設計。2 溫度控制器的技術參數本系統采用ATMEL公司的AT89C4051單片機和美國Burr-Brown公司的ADS7844E模-數轉換芯片以與HOLTEK公司的HT1621B液晶顯示驅動芯片設計,實現了模擬溫度數據采集、模擬量到數字量轉換、單片機數據運算與邏輯處理、LCD顯示、鍵盤處理與繼電器輸出控制功能,主要技術參數見表1表1 主要技術參數表測量精度:0.5量程0400顯示分

4、辨率:0.1采樣速度:500毫秒調節(jié)算法:開關調節(jié) (ON/OFF) 輸入:熱電阻:Pt100輸出:繼電器,常開觸點(max.250VAC, 1A)報警:繼電器,常開觸點(max.250VAC,3A)電源:220VAC10% ; 50Hz環(huán)境:工作溫度:0 50,相對濕度85%3 系統設計方案的論證本章主要敘述溫度控制器的設計方案。3.1 方案比選隨著電子技術的發(fā)展,溫度控制器的設計方案經歷了模擬電路溫度控制器、模擬量測量加數字顯示、單片機溫度控制器的發(fā)展過程;在單片機溫度控制器的設計方案中,又發(fā)展出各種智能型的溫度控制器方案,如:高AD轉換的精度,PID調節(jié)控制輸出、PID + 模糊控制等。

5、本次設計著重鍛煉自己的動手能力,熟悉單片機的使用,具體提出如下設計方案:方案一:采用8031單片機作為控制核心,以最普通的器件ADC0809作數/模轉換,以繼電器作為控制輸出。此方案簡單可行,造價低廉,但由于8031沒有片ROM,需要擴展程序存儲器,增加了電路的復雜性,并且由于0809是8位的數/模轉換電路,在溫度測量圍很小時,測量精度還能滿足要求,當測量溫度圍稍寬時,測量的精度就不能實際應用的要求。方案二:采用片帶Flash存儲器MCS51系列單片機作為控制核心,采用12位數/模轉換電路,以繼電器作為控制輸出。由于采用了12位的ADC轉換芯片,轉換圍從0到4096,當溫度圍要求為0-1000

6、時,每一位表示約為0.25,考慮到ADC轉換芯片的轉換精度1LSB與運算放大器的誤差,測量精度理論上可到0.5,可以滿足一般的控制要求。方案三:目前許多單片機生產商推出了自帶ADC轉換,FLASH存儲器、EEPROM的產品,如美國Analog Devices公司AduC812部帶12位的ADC轉換,如果采用AduC812單片機作為控制核心,則系統外圍電路比較簡單且能夠達到控制精度要求,但是成本較高。本系統采用方案二,溫度控制器所需要的I/O數量不多,程序量不是很大(不考慮PID調節(jié)控制輸出),為了節(jié)省單片機的I/O口,選用12位串行口數/模芯片ADS7844E,單片機使用AT89C4051,片

7、程序存儲器空間為4K,15條I/O。3.2 方案說明系統中設計了一個EEPROM存儲器來保存設置參數,目前市面上常用的EEPROM芯片主要有兩種接口類型:I2C接口與SPI接口,主要的代表芯片有AT24C02/04/08/16系列和AT25010/020/040系列,由于ADS7844E轉換芯片采用的是SPI接口,所以選用AT25010存儲器可以節(jié)省I/O端口。顯示器件常用的有LED數碼管顯示器件、LCD顯示器件。LED數碼管顯示器件具有亮度大,壽命長等特點,但需要較大的驅動電流;LCD顯示器件成本低、功耗小,但需要專用的驅動電路以與亮度低;本方案的顯示器件采用6位字符液晶顯示器,驅動芯片采用

8、HOTELK公司的HT1621B。4 控制系統設計控制系統設計主要包括系統工作原理、系統硬件設計和系統軟件設計。系統軟件設計主要包括軟件結構、各子程序流程與具體代碼設計;下面分別介紹各部分的設計過程4.1 系統的工作原理單片機AT89C4051A/D存儲器顯示驅動液晶顯示器鍵盤與控制輸出圖 1 系統功能框圖溫度測量放大電源電路系統功能框圖如圖1所示系統的工作原理是:電橋將溫度傳感器Pt100的溫度信號轉換為與溫度相關的電壓信號,經過兩級運算放大后進入ADC轉換;CPU讀取ADC轉換結果,經過運算轉換為顯示的溫度字符,控制LCD驅動器來顯示溫度值,另外,CPU將測量出的溫度值與系統設定的溫度值相

9、比較,根據不同的控制模式來控制繼電器的輸出,系統中的按鍵用來設定系統工作參數,電源電路主要為各電路提供工作電源。系統中需要保存的參數有:設定溫度值、回程差值(防止溫度到達設定值時輸出振蕩)、加熱或制冷工作模式(0表示加熱模式,1表示制冷工作模式)、溫度測量圍、溫度校正值、溫度校正符號等。由于溫度測量圍、溫度校正值、溫度校正符號用于系統調試校正,此參數不能由用戶隨便修改,所以在修改這些參數前必須先輸入一個密碼(默認為1234)后系統才顯示這些參數,建議用戶不要修改此類參數。本系統采用了四個按鍵,功能分別為:加鍵、移位鍵、功能鍵、保存鍵。按下功能鍵可循環(huán)顯示系統各項參數,通過加鍵和移位鍵組合可對各

10、項參數進行修改,按下保存鍵后,CPU將修改后的參數寫到EEPROM中,系統重新上電后CPU將調用EEPROM中的參數(如果不對數據進行保存時,系統重新上電后將調用以前設置的參數)。4.2 硬件電路設計溫度控制器電路主要包括:CPU電路、溫度信號調理電路、ADC轉換電路、液晶顯示與驅動電路、電源電路與控制輸出電路;4.2.1CPU電路圖2 AT89C4051管腳圖CPU電路主要是CPU、數據存儲器與晶振電路。CPU采用美國ATMEL公司的MCS51系列單片機AT89C4051,管腳圖如圖2所示,它具有以下標準功能:4K字節(jié)FLASH閃速存儲器,128字節(jié)部RAM,15個I/O口,兩個16位定時/

11、計數器,5個中斷向量(兩種優(yōu)先級),一個全雙工串行通信接口,置一個精密模擬比較器,片振蕩器與時鐘電路。AT89C4051的功能框圖如圖3所示。CPU的端口資源分配見表2:圖3 AT89C4051功能框圖表2:CPU的端口資源分配表引腳名稱功能引腳名稱功能P1.0AT25010片選信號P3.0功能鍵P1.1HT1621B片選信號P3.1加鍵P1.2ADS7844E片選信號P3.2保存鍵P1.3HT1621B讀控制信號P3.3移位鍵P1.4HT1621B寫控制信號P3.4P1.5串行口時鐘P3.5繼電器控制輸出P1.6串行數據輸入P3.6P1.7串行數據輸出P3.7看門狗復位注:由于P1.0與P1

12、.1部不帶上拉電阻,使用時在此兩腳上需要接上拉電阻,電阻阻值按10K選取數據存儲器采用美國ATMEL公司AT25010 EEPROM。AT25010通過SPI接口與CPU進行數據交換,端口連接見表1。時鐘采用12M晶體振蕩器,負載電容按22p選取。4.2.2溫度信號調理電路本設計溫度傳感器采用Pt100,溫度信號由電橋電路輸出后,經過兩級放大后進入ADC轉換。1、Pt100傳感器介紹Pt100傳感器是利用鉑電阻的阻值隨溫度變化而變化、并呈一定函數關系的特性來進行測溫,其溫度/阻值對應關系為:0t850時,Rt=R0(1+At+Bt2) 式中,A=3.9080210-3;B=-5.8010-7;

13、R0=100。Pt100溫度傳感器的主要技術參數如下:測量圍:-200+850;熱響應時間30s;允通電流5mA。另外,Pt100溫度傳感器還具有抗振動、穩(wěn)定性好、準確度高、耐高壓等優(yōu)點。2、電橋采集數據的電路圖與原理Pt100電橋電路如圖4、圖5所示。其中,R10R11R14Rt組成電橋,R10=R11= 10R0, R14=R0。電橋采用TL431組成恒流源供電,為了避免流過Pt100傳感器的電流過大使其發(fā)熱進而導致非線性失真增大,取Im=1mA。R10R14R11Rt-+1mA-+Vo圖4 信號調理電路設流過R14的電流為I1,流過Rt的電流為I2,由于恒流源的電流為1mA,所以有:I1

14、+I2 = 1; (1)I1/I2=(10R0+Rt)/11R0 (2)Rt=R0(1+At+Bt2) (3) A=3.9080210-3;B=-5.8010-7;R0=100當溫度較低時,I1/I21,所以有:Vi=I2Rt-I1R00.5(Rt-R0) (4)又因為R= Rt-R0 = R0(At+Bt2),所以:Vi0.5*R0(At+Bt2)0.5*R0*A*t =0.195*t (mV) (5)由公式(5)可知,溫度較低時,Pt100傳感器的線性度良好;當溫度較高時,Pt100傳感器的線性度變差,此時有Vi= 10R0(At+Bt2)/(22+At+Bt2)(mV) (6)軟件校正采

15、用最小二分法分段校正:將整個測量圍按每50為一段,共分為8段,求出每一段的校正函數分別為:(求解方法采用Excel中的SLOPE函數與INTERCEPT函數)050 : T0 = 0.89*T 0.1050100 : T0 = 0.92*T 1.44100150 : T0 = 0.95*T 4.28150200 : T0 = 0.98*T 8.80200250 : T0 = 1.01*T 15.11250300 : T0 = 1.04*T 23.45300350 : T0 = 1.08*T 34.16350400 : T0 = 1.12*T 47.65溫度的計算方法:T=ADC轉換結果*量程/

16、4096,將T的值代入校正函數中,求出校正后的溫度值T0。 圖5 信號調理電路3、誤差分析(1)Pt100傳感器的非線性產生的誤差Pt100的溫度函數為Rt=R0(1+At+Bt2),由此可見Pt100的阻值與溫度的函數不是線性關系,不考慮其它因素帶來的誤差,由于Pt100傳感器的非線性,在0-400的圍,可產生約12的誤差,在實際測量中,用非線性校正程序可以減少由此帶來的誤差。(2)A/D轉換器非線性帶來的誤差在實際應用中會發(fā)現,對同一模擬輸入信號Vi,經A/D轉換得出的數字量會有1位的跳變,這是由A/D轉換器的判斷誤差造成的。A/D轉換器的一位跳變對應的電壓值,即為該12位A/D轉換器的分

17、辨率0.00122V=1.22mV,將會產生溫度誤差。(3)A/D轉換器參考電壓Vref帶來的誤差在比較轉換過程中,Vref的變化會對輸出的二進制代碼有影響。在模擬輸入信號不變的情況下,若Vref變大,會導致輸出的二進制代碼變??;反之,則變大,從而導致了溫度誤差。4、注意事項與結論由上面的分析可得,為了提高溫度測量的準確性, A/D轉換器的5V參考電源要穩(wěn)定在mV級;在價格允許的情況下,Pt100傳感器A/D轉換器和運放的線性度要高。同時,利用軟件矯正其誤差,可以使測得溫度的精度在0.5。4.2.3 ADC轉換電路本方案的ADC轉換采用BurrBrown公司的ADS7844E,它是推出的一種高

18、性能、寬電壓、低功耗的12bit串行模數轉換器。它有8個模擬輸入端,可用軟件編程為8通道單端輸入A/D轉換器或4通道差分輸入A/D轉換器,其轉換率高達200KHz,而線性誤差和差分誤差最大僅為1LSB。ADS7844在電源電壓為2.7V5V之間均能正常工作,最大工作電流為1mA,進入低功耗狀態(tài)后的耗電僅3A。ADS7844通過串行接口與CPU進行通信,而且接口簡單方便。ADS7844E的引腳排列如圖6所示,引腳與其它電路的連接見表3。ADS7844E的引腳功能:CH0CH7:模擬輸入端,當器件被設置為單端輸入時,這些引腳可分別與信號地COM構成通道單端輸入A/D轉換器;當器件被設置為差分輸入時

19、,利用CHCH1、CH2CH3、CH4CH5和CH6CH7可構成4通道差分輸入A/D轉換器COM:信號地VREF:參考電壓輸入端,最大值為電源電壓CS:片選端,低電平有效,該腳為高電平時,其它數字接口線呈三態(tài)DCLK:外部時鐘輸入端,在時鐘作用下,CPU將控制字寫入ADS7844E,并將轉換結果從中讀出DIN:串行數據輸入端,在片選有效時,控制字在DCLK上升沿被逐位鎖入ADS7844EDOUT:串行數據輸出端,在片選有效時,轉換結果在DCLK的下降沿開始被逐位從ADS7844E移出BUSY:“忙”信號輸出端,在接收到控制字的第一位數據后變低,只有在轉換結束且片選有效時,該腳才輸出一個高脈沖S

20、HDN:電源關閉端,低電平有效。當SHDN為低電平時,ADS7844E進入低功耗狀態(tài)VCC,GND:分別為電源端和數字地。圖6 ADS7844引腳圖表3: ADS7844E引腳連接表序號引腳名稱功能與其它電路的連接備注13CH0CH2模擬輸入通道溫度信號放大輸出47CH3CH7模擬輸入通道未連接9COM模擬輸入公共端模擬地11VREF參考電壓端工作電源VCC采用5V的參考電壓12、20VCC工作電源工作電源+5V接10uF和0.1uF的退耦電容13、14GND電源地電源地15DOUT串行數據輸出CPU P1.616BUSY“忙”信號輸出端未連接17DIN串行數據輸入CPU P1.718CSAD

21、S7844E片選信號CPU P1.219DCLK串行口時鐘CPU P1.54.2.4液晶顯示與驅動電路HT1621B是128 點存映象和多功能的LCD驅動器,HT1621B的軟件配置特性使它適用于多種LCD應用場合,包括LCD模塊和顯示子系統,用于連接主控制器和HT1621的管腳只有4 或5 條,HT1621 還有一個節(jié)電命令用于降低系統功耗。HT1621B的引腳功能與與其它電路的連接見表4:表4: HT1621B的引腳功能與與其它電路的連接表序號引腳名稱功能與其它電路的連接備注1CSHt1621B 片選CPU P1.1低電平有效2RD讀控制P1.33WR寫控制P1.44DATA數據線P1.7

22、5Vss電源地電源地6/7OSCI/OSCO時鐘未連接使用片RC振蕩器8VLCDLCD電源+5V選用5VLCD9VDD電源+5V10IRQ看門狗輸出未連接11、12BZ聲音頻率輸出未連接1316COM0COM3LCD 公共輸出口LCD 公共輸出口1748SEG0SEG31LCD 段輸出口LCD 段輸出口只用到其中12位4.2.5 電源電路圖5 電源電路4.3 系統軟件設計4.3.1 軟件結構設計溫控器軟件主要包括主程序模塊、定時器中斷處理模塊、LCD顯示處理模塊、ADC轉換模塊和鍵盤處理模塊。定時器中斷處理模塊主要產生時間事件,其中200ms事件用于讀取鍵盤的健值,500ms為ADC轉換事件。

23、主程序模塊循環(huán)判斷系統是否有事件發(fā)生,當發(fā)生200ms事件時,調用鍵盤處理子程序、LCD顯示刷新子程序。當發(fā)生500ms事件時,調用ADC轉換子程序與LCD顯示刷新子程序。主要模塊調用關系如圖6所示LCD顯示刷新定時器中斷程序讀取鍵值圖6 主要模塊調用關系圖頁面處理保存處理移位處理加鍵處理閃爍處理顯示轉換寫顯示數據啟動ADC轉換讀ADC數據求溫度平均值溫度比較溫度校正二進制轉換BCD碼溫度主程序模塊鍵盤處理系統初始化程序ADC轉換模塊4.3.2 系統程序流程圖設計圖7 主程序流程圖看門狗復位主循環(huán)開始判斷是否有鍵盤事件YN上電或復位,程序開始設置堆棧,清內存調用設備初始化子程序開中斷NNN清鍵

24、盤事件標志判斷上次鍵盤事件處理是否完成判斷鍵盤值是否為0鍵盤處理子程序判斷是否有ADC轉換事件清ADC轉換事件標志ADC處理子程序顯示刷新處理子程序1、主程序流程圖2、鍵盤處理流程功能:顯示相應頁面以與修改系統參數輸入:鍵值輸出:修改顯示緩沖器數據與系統參數寄存器分配:寄存器組1,各子程序具體分配情況見子程序說明。調用子程序:頁面處理子程序(Pagehandle)、加鍵處程序(Uphandle)、保存數據子程序(Savehandle)、移位處理子程序(Shifthandle)父函數:主程序圖8 鍵盤處理程序流程圖壓堆棧,設置寄存器組置鍵盤未處理完標志是否有為功能鍵YN是否為加鍵YN是否為保存鍵

25、YN是否為移位鍵YN調用頁面處理子程序調用加鍵處理子程序調用移位處理子程序調用保存數據處理子程序恢復堆棧3、ADC轉換處理流程功能:啟動ADC轉換、讀取ADC轉換結果、進行溫度校正、比較、繼電器控制輸出輸入:無輸出:溫度值顯示值、繼電器控制輸出寄存器分配:寄存器組3,各子程序具體分配情況見子程序說明。調用子程序:啟動ADC轉換子程序(Start_Adc)、讀轉換結果程序(ReadADC)、求平均值子程序(Average)、二進制溫度轉BCD碼子程序(Bin_Temp_BCD)、溫度校正子程序(TempAdjust)、溫度比較子程序(TempCopmare)父函數:主程序圖9 ADC轉換程序流程

26、圖壓堆棧,設置寄存器組調用ADC啟動子程序延時等待ADC轉換結束調用讀ADC結果子程序調用二進制溫度轉換子程序調用求平均值子程序恢復堆棧調用溫度校正子程序調用溫度比較子程序4、定時器中斷處理程序流程功能:產生定時事件輸入:無輸出:時間事件寄存器分配:寄存器組1。調用子程序:讀取鍵值子程序(Getkeyvalume)、定時器初始化子程序父函數:無YN圖10 定時器中斷處理子程序流程圖判斷是否為200ms判斷是否為500ms置200ms事件標志置500ms事件標志YYNN恢復堆棧清超時標志,恢復正常顯示判斷是否為1000ms判斷鍵盤是否超時NYYN壓堆棧,設置寄存器組重裝定時計數器(調用定時器初始

27、化子程序)ms計數單元加1調用取鍵值子程序判斷是否為100ms鍵盤事件處理是否完成4.3.3 系統程序設計目前許多公司在生產單片機的同時,都會推出自己的編譯系統,并且許多編譯系統都會支持C語言、匯編語言或兩種語言的混合編程;本系統采用匯編語言編程,使用Keil C51編譯。由于程序的篇幅較長,下面主要介紹主程序與二進制溫度轉換為BCD溫度值子程序,其它程序請查閱附錄中的程序清單。1、主程序清單ORG 0000H ; 復位入口JMP PROGRAME_STAR ; 程序開始ORG 0003H ; 外部中斷0入口RETI ;ORG 000BH ; 定時0中斷入口AJMP TIME0_INT ; O

28、RG 0013H ; 外部中斷1入口RETI ;ORG 001BH ; 定時1中斷入口RETI ; ORG 0023H ; 串口中斷入口RETI ; ORG 0060H ; 程序起點PROGRAME_STAR: MOV SP , #STACK ; 設置堆棧 MOV PSW , #(0 SHL 3) ; 使用寄存器組0 MOV R0 , #10H ; 清存的開始地址 MOV R1 , #50H -1 ; 設置清除存計數 MOV A , #00H ;MAIN0: MOV R0 , A ; 存清零 INC R0 ; DJNZ R1 , MAIN0 ; ACALL DEVICE_INIT ; 設備初始

29、化 MOV IE ,#82H ; 開中斷MAINLOOP: ACALL WDRESET ; 看門狗復位 MOV A , TIMEEVENT ; 200ms事件標志, 處理鍵盤事件 ANL A , #EVT_MS200 ; A和#EVT_MS200做與運算,取出200ms事件標志位 JZ MAIN1 ; 200ms事件標志位為0時跳到MAIN1 MOV A , #EVT_MS200 ; CPL A ; ANL TIMEEVENT , A ; 清除200ms事件標志 MOV A , KEYOVER ; 鍵盤處理完標志 JNZ MAIN3 ; * MOV A , KEY_VALUE ; 取鍵值 JZ

30、 MAIN3 ; 鍵盤值為0時跳出* ACALL KEYHANDLE ; 處理鍵盤事件 AJMP MAIN3 ; *MAIN1: MOV A , TIMEEVENT ; 500ms事件標志 處理ADC轉換 ANL A , #EVT_MS500 ; A和#EVT_MS500做與運算,取出500ms事件標志位 JZ MAIN4 ; 500ms事件標志位為0時跳到MAIN4 MOV A , #EVT_MS500 ; CPL A ; ANL TIMEEVENT , A ; 清除500ms事件標志 LCALL ADCCONVERT ; 調用ADC轉換子程序MAIN3: ACALL REFESHLCD ;

31、 刷新LCDMAIN4: SETB CSLCD ; LCD控制芯片片選信號拉高 SETB CSADC ; 置位AD7844E 片選 SETB CSE2ROM ; 置位AT25010 片選 AJMP MAINLOOP ; 主循環(huán)2、二進制溫度轉換為BCD溫度值子程序;二進制溫度轉換為BCD溫度值子程序;輸出:無;輸入:無;寄存器組: 第 3 組; 溫度值=ADC轉換結果(BIN) * 量程值/4096BIN_TEMP_BCD: MOV PSW , #(3 SHL 3) ; 使用寄存器組3 MOV R6 , RANGE ; 將BCD碼量程值轉換為二進制數 MOV R7 , RANGE+1 ; LC

32、ALL BCDTOBIN ; MOV R0 , #TEMP_VALUE ; 溫度轉換后的存儲地址 MOV R6 , TEMP_BINL ; 取二進制溫度低位 MOV R7 , TEMP_BINH ; 取二進制溫度高位 LCALL MUL16 ; 調用16進制乘法;以下程序根據第一次轉換的結果查表取出校正函數 MOV A , TEMP_VALUE+1 ; 取二進制溫度高位 ANL A , #0F0H ; SWAP A ; MOV R6 , A ; MOV A , TEMP_VALUE+2 ; 取二進制溫度高位 ANL A , #0F0H ; SWAP A ; MOV R7 , A ; MOV A

33、 , TEMP_VALUE+2 ; 取二進制溫度高位 ANL A , #0FH ; SWAP A ; ADD A , R6 ; MOV R6 , A ;R6,R7分別存放二進制溫度的低位和高位 LCALL BINTOBCD ; 調用二進制轉換為BCD碼 MOV A , R5 ; 去掉轉換結果的千位 ANL A , #0FH ; TEMP_BCDH 存放結果的百位和十位 SWAP A ; MOV R5 , A ; MOV A , R4 ; ANL A , #0F0H ; SWAP A ; ADD A , R5 ; MOV R6 , A ; MOV R7 , #00H ; LCALL BCDTOB

34、IN ; MOV DPTR , #DIVCODE00 ; 查表地址 MOV A , R4 ; 偏移地址 MOVC A , A+DPTR ; MOV R5 , A ; RL A ; 偏移地址*2 MOV DPTR , #INTERCEPT0 ; 查表地址 MOVC A , A+DPTR ; MOV BINRANGE+1 , A ; 校正值高位 INC DPTR ; MOV A , R5 ; RL A ; MOVC A , A+DPTR ; MOV BINRANGE , A ; 校正值低位 MOV DPTR , #DIVCODE00 ; 查表地址 MOV A , R4 ; 偏移地址 MOVC A

35、, A+DPTR ; MOV DPTR , #SLOPECODE ; 查表地址 MOVC A , A+DPTR ; 斜率值 ;以下是將(ADC轉換結果(BIN) * 量程值 ) *斜率 MOV R4 , A ; MOV B , TEMP_VALUE ; MUL AB ; TEMP_VALUE*斜率 MOV TEMP_VALUE , A ; MOV R3 , B ; R3 乘積的高位暫存 CLR C ; MOV A , R4 ; MOV B , TEMP_VALUE+1 ; MUL AB ; (TEMP_VALUE+1)*斜率 ADD A , R3 ; MOV TEMP_VALUE+1 , A

36、; MOV A , B ; ADDC A , #00H ; MOV R3 , A ; CLR C ; MOV A , R4 ; MOV B , TEMP_VALUE+2 ; MUL AB ; (TEMP_VALUE+2)*斜率 ADD A , R3 ; MOV TEMP_VALUE+2 , A ; MOV A , B ; ADDC A , #00H ; MOV R3 , A ; CLR C ; MOV A , R4 ; MOV B , TEMP_VALUE+3 ; MUL AB ; (TEMP_VALUE+3)*斜率 ADD A , R3 ; MOV TEMP_VALUE+3 , A ; MO

37、V A , B ; ADDC A , #00H ; MOV R3 , A ; 進位標志 ACALL DIV4096 ; MOV R6 , TEMP_VALUE+2 ; 取二進制溫度低位 MOV R7 , TEMP_VALUE+3 ; 取二進制溫度高位 LCALL BINTOBCD ; 調用二進制轉換為BCD碼 MOV A , R3 ; MOV R0 , A ;MOV A , R5 ; MOV R7 , A ;MOV A , R4 ; MOV R6 , A ; MOV R5 , BINRANGE+1 ; MOV R4 , BINRANGE ; ACALL BCDSUBB ; BCD減截距 CLR

38、 C ; MOV A , R0 ; SUBB A , R3 ; MOV R3 , A ; CLR C ; 清標志 MOV A , R6 ; ANL A , #0FH ; CJNE A , #05H , BIN_TEMP_BCD0 ; 四舍五入 BIN_TEMP_BCD0: ;小數點后第二位大于或等于5時需要進行位 JC BIN_TEMP_BCD1 ; MOV A , R6 ; ADD A , #10H ; DA A ; MOV R6 , A ; MOV A , R7 ; ADDC A , #00H ; DA A ; MOV R7 , A ; MOV A , R3 ; ADDC A , #00H

39、 ; DA A ; MOV R3 , A ;BIN_TEMP_BCD1: ;小數點后第二位小于4時需要舍掉 MOV A , R6 ; ANL A , #0F0H ; SWAP A ; MOV TEMP_BCDL , A ; MOV A , R7 ; ANL A , #0FH ; SWAP A ; ADD A , TEMP_BCDL ; MOV TEMP_BCDL , A ; MOV A , R7 ; ANL A , #0F0H ; SWAP A ; MOV TEMP_BCDH , A ; MOV A , R3 ; ANL A , #0FH ; SWAP A ; ADD A , TEMP_BCD

40、H ; MOV TEMP_BCDH , A ; RET DIV4096:;以下程序是將ADC轉換值 * 量程 后的結果除4096;由于除4096 實際上就是將數據右移12位;所以乘法結果的高20位就是除4096后的整數部分;乘法結果的低12位就是除4096后的余數部分 ;將余數*10后再除4096即可得到一位小數 MOV TEMP_VALUE+0 , TEMP_VALUE+1 ; MOV TEMP_VALUE+1 , TEMP_VALUE+2 ; MOV TEMP_VALUE+2 , TEMP_VALUE+3 ; MOV A , TEMP_VALUE+2 ; ANL A ,#0FH ; SWAP A ; MOV

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論