課程設計(論文)基于單片機的多路溫度采集系統_第1頁
課程設計(論文)基于單片機的多路溫度采集系統_第2頁
課程設計(論文)基于單片機的多路溫度采集系統_第3頁
課程設計(論文)基于單片機的多路溫度采集系統_第4頁
課程設計(論文)基于單片機的多路溫度采集系統_第5頁
已閱讀5頁,還剩15頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、 課程設計說明書 題 目: 基于單片機的多路溫度采集系統 專 業: 班 級: 姓 名: 學 號: 指導老師: 成 績: 18目 錄 第1節 前 言11.1 多路溫度采集系統概述11.2 本設計任務和主要內容1第2節 系統總體設計22.1 系統概述22.2 系統工作原理2第3節 系統的硬件設計3 3.1 cpu的選用33.2 adc08094 3.2.1 adc0809的內部邏輯結構4 3.2.2引腳結構5第4節 軟件編輯思路及流程64.1 軟件編輯思路64.2 具體軟件編程6第5節 結束語18參考文獻19基于單片機的多路溫度采集系統第1節 前 言 本課題要設計一種多路溫度采集檢測系統,采用目前

2、低價位但技術十分成熟的at89c52單片機作為內核,選用電位器代替熱敏電阻為輸入元件,利用adc0809轉換信號,送到顯示器(8個led數碼管)循環顯示所測的四路溫度數值,并根據現場工業需要,設置了一定范圍的報警值,報警優先顯示,利用按鍵消除報警??捎冒存I查看某一路的溫度值,查看時采集不中斷。軟件算法上采用了直接擬合的方法(通過電壓-溫度關系來計算溫度值),符合課題要求。本課題構成的多路溫度系統具有結構簡單、價格低廉、測量精度高、量程寬的特點,在很多場合具有一定的適用性。關鍵詞: at89單片機、溫度采集、顯示、報警1.1 多路溫度采集系統概述 溫度采集在工業中的應用越來越廣泛,而且要求也越來

3、越高,我們結合本學期所學的單片機原理與應用技術課程,利用實驗室已有的at89系列單片機,作一個簡易的可多路檢測溫度并能在超出范圍時報警的系統。該系統用at89s52單片機作為內核,利用adc0809轉換芯片輔助,以八個電位器作為模擬溫度輸入信號,一個5路8位數碼管作為顯示設備??蓡为氀h顯示每一路的溫度值,并且有鍵盤控制顯示每路的溫度值,這樣可以滿足在工業需要。1.2 本設計任務和主要內容設計應解決下列各主要問題:1、8路溫度值(可用05v電壓值模擬0-100)的數據采集,經a/d轉換后送入單片機;2、8個鍵盤、8個led數碼管顯示電路,用于循環顯示每一路的溫度值(顯示精確到小數點后一位),通

4、過按鍵還可以選擇任意一路顯示。3、設溫度值的正常范圍,若當前溫度值超過此范圍,則led閃爍報警;4、通過按鍵解除報警。 第2節 系統總體設計2.1 系統概述根據設計要求的性能指標,本系統不僅要滿足一定精度的溫度采集的基本功能,而且由于測量的路數為8路,還存在多路信號的循環顯示問題,還要考慮溫度超限報警輸出的功能,同時系統還具有顯示當前各路的測量溫度值的功能和鍵盤選擇顯示路數的功能。22 系統工作原理根據本課題的設計目標以及硬件的特點,本系統的結構原理圖如下圖2-1所示: 圖2-1 系統結構原理圖圖2-2 系統原理圖第3節 系統的硬件設計 一個溫度采集系統,包括被采集信息的采集、轉換、顯示等環節

5、,在本多路溫度采集系統中,包括a/d轉換電路的設計,cpu的選型以及包括顯示電路,存儲器、報警電路、電源電路等設計。31 cpu的選用目前,生產單片機的廠商有很多,尤其是近年來微電子技術、計算機技術的飛速發展,比較著名的有intel、philips、microchip、motorola、zilog、atmel等半導體企業。在上述著名的半導體企業產品中,尤其在工業測控場合,運用較多的為intel公司的mcs-51系列,microchip公司的pic系列,如果作單路溫度測量,恐怕要選擇該系列的cpu,但由于本系統涉及的是多路,各路報警的輸出信號需要單獨輸出,而且考慮信號調理電路的切換等還需要不少的

6、控制線,因此該系列的少引腳特點就不適合本設計的需要,因此,本設計還是選用了atmel最新的8位單片機at89s52作為本系統的cpu。下面簡單地介紹一下89s52。功能特性描述:at89s52 是一種低功耗、高性能 cmos8 位微控制器,具有8k 在系統可編程 flash 存儲器。使用 atmel 公司高密度易失性存儲器技術制造,與工業 80s52 產品指令和引腳完全兼容。片上 flash 允許程序存儲器在系統可編程,亦適于常規編程器。在單芯片上,擁有靈巧的 8 位 cpu 和在系統可編程 flash,使得 at89s52 為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。89s52 具

7、有以下標準功能:8k 字節 flash,256 字節 ram,32 位 i/o 口線,看門狗定時器,2 個數據指針,三個 16 位定時器/計數器,一個 6 向量 2 級中斷結構,全雙工串行口,片內晶振及時鐘電路。另外,at89s52 可降至 0hz 靜態邏輯操作,支持 2 種軟件可選擇節電模式??臻e模式下,cpu停止工作,允許 ram、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,ram 內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。 圖3-1 89c52的引腳32 adc0809adc0809是把采集的模擬量轉換成數字量并傳送到89c52中。它是帶有8位a

8、/d轉換器、8路多路開關以及微處理機兼容的控制邏輯的cmos組件并且還是逐次逼近式a/d轉換器,可以和單片機直接接口。3.2.1 adc0809的內部邏輯結構 圖3-2 adc0809的內部邏輯結構由圖3-2可知,adc0809由一個8路模擬開關、一個地址鎖存與譯碼器、一個a/d轉換器和一個三態輸出鎖存器組成。多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用a/d轉換器進行轉換。三態輸出鎖器用于鎖存a/d轉換完的數字量,當oe端為高電平時,才可以從三態輸出鎖存器取走轉換完的數據。3.2.2 引腳結構 圖3-4 adc0809的引腳第4節 軟件編輯思路及流程41 軟件編輯思路 軟件編輯思

9、路:數字顯示-算法-一路采集-一路采集轉換及顯示-八路采集轉換及顯示-鍵盤小子程序-八路循環采集且鍵盤控制-八路循環采集且鍵盤控制和報警。4.2 具體軟件編程 org 0000h ajmp main; buf equ 40h ;顯示緩沖區 motata equ 50h ;ad0809數據存放于此 wh equ 48h ;溫度上限數據存放區 wl equ 58h ;溫度下限數據存放區 buff1s equ 38h; buff1ms equ 39h; buff5s equ 3ah; innal equ 3ch; alarmbuf equ 33h buffh equ 31h ;八路led報警信號 紅

10、燈 buffl equ 32h ;八路led報警信號 綠燈 back equ 34h ;利用與buf地址的重復修改路數 channel equ 35h tempbuf equ 36h read_ad bit 30h ;是否要讀寫ad0809的標志位 dispin bit 31h; setwarn bit 32h solidisp bit 33h enter bit p1.2 seth bit 35h setl bit 36h setin bit p1.3 abytein bit p1.1 org 0003h ajmp int_0; org 000bh ljmp int_t0 org 0100h

11、main: mov sp, #70h ;設置堆棧位置 setb read_ad ;初始化標志位 setb ea ;開總中斷 clr setwarn ;清除溫度設置標志位 setb setin;當其為0時表示要進行通道數采集 lcall initwarn ;初始化溫度上下限 lcall init_2;初始化2#工作寄存器區 ;主循環,啟動adc0809,從第一個通道開始讀取loop:jnb read_ad,dis ;若不讀ad0809,則調顯示,次標志位也表示1s延時結束 ;延時已完畢,則計算要顯示的溫度路數及溫度值送緩沖區 lcall warn;報警 clr read_ad;清楚標志位 lca

12、ll read;讀取一次ad0809 lcall dly1ms;此處加1ms的延時,否則數碼管會因中斷的存在而產生閃動 lcall adjust;調整顯示;在此完成鍵盤檢測及顯示任務dis: lcall display; lcall keychk;調鍵盤檢測子程序 cjne a,#0ffh, akey;若有鍵按下,則跳轉 ljmp loop ;若沒有則循環akey: lcall keyfunc; cjne a,#0ffh,callrpd;驗證按下的鍵是否為數字鍵,若是則處理輸入 ljmp loop;不為數字鍵則返回循環callrpd: lcall keyrpd; sjmp loop;*初始化2

13、#工作寄存器區*init_2: push psw;初始化2號工作寄存器區 setb rs1; clr rs0;選擇2號工作寄存器區 mov r2, #00h;存放要顯示的路數 clr dispin;初始化路顯示標志位; mov r0, #motata;r0充當指向motata的指針 pop psw; ret;*調整指針*padjust:onadjust: djnz r2,inadjust; ret;返回inadjust: inc r0; sjmp onadjust;*計算并調整顯示緩存區的數據*adjust: push psw ;保護 setb rs1; clr rs0;選擇2號工作寄存器區

14、cjne r2,#08h,ne08; ge08: mov r2,#00h; mov r0,#motata; sjmp less08; ne08: jnc ge08;less08: jb setwarn, dispwarn;若在設定溫度,則也不調整顯示jb solidisp, adjend ;若為固定顯示,則跳過調整 jb dispin,dly_5s ;若有鍵盤值輸入,則延時5秒來暫時固定顯示 inc r0;調整r0,使其指向下一個要顯示的溫度值地址 inc r2 ;調整r2 mov channel,r2; sjmp adjend;dly_5s: djnz buff5s,adjend; clr

15、dispin; ljmp adjenddispwarn: jb seth,dishigh;若在調整上限值則跳轉到上限溫度顯示jb setl,dislow ;若在調整下限值則跳轉到下限溫度顯示 sjmp adjend;若不在調整則顯示輸入路數的當前檢測溫度值dislow: mov r0,#wl;將指針調整到溫度上限存放區sjmp adapt;跳轉到指針調整處dishigh:mov r0,#wh;將指針調整到溫度下限存放區adapt: mov r2,channel;調整r2的值為通道數lcall padjust;指針指向r2adjend: lcall loadtemp ;將當前指針指向數據放到緩沖

16、區pop psw; ret;* 將當前指針指向數據放到緩沖區*loadtemp: lcall compute;調用compute得到要顯示的當前溫度值 mov r1,#buf; mov a,channel;mov r1,a;將路數送入顯示緩沖區 inc r1;調整到要顯示溫度值的緩沖區jb seth,disph;若設定溫度上限,則顯示hjb setl,displ;若設定溫度下限,則顯示l mov a,#10h;消隱 sjmp disp2disph: mov a,#11hsjmp disp2displ: mov a,#12hdisp2: mov r1,a; inc r1; mov a,r5; a

17、nl a,#0fh;mov r1,a; 最低位 inc r1; mov a,r5; anl a,#0f0h; swap a;mov r1,a;次低位 ,應當在此處添加小數點 inc r1; mov a,r4; anl a,#0fh;mov r1,a;次高位 inc r1; mov a,r4; anl a,#0f0h; swap a; mov r1,a;最高位ret;*讀取一次0809的內容*read: mov r6,#08h ;用中斷的方式讀取一次ad0809 mov r0,#motata;0號工作寄存器區 mov dptr,#0fffeh;a0作為地址 mov a,#00h ;表示先檢測第一

18、個通道mov innal,a;將檢測的路數保存 movx dptr,a;開啟adc0809setb ex0 ;開外部中斷0 ret;若已讀取完畢,則返回;*顯示子程序*;要顯示的數據入口為buf(6位);1號工作寄存器區display: push psw ;壓棧保護 setb rs0; clr rs1 ;切換工作寄存器區到 1 mov r0,#buf mov r7,#06h mov r1,#01hnextdis: mov a,r0mov dptr,#tablemovc a,a+dptr ;取段碼 cjne r7,#03h,nodip ;顯示小數點anl a,#07fhnodip:mov dpt

19、r,#0ffdchmovx dptr,a ;送段碼mov dptr,#0ffddhmov a,r1movx dptr,a ;送位碼rl amov r1,a lcall dly1msinc r0 ;調整顯示 djnz r7,nextdis;pop psw; ret;*延時1ms*dly1ms: mov buff1ms,#0f9hdjnz buff1ms,$ret;*按鍵檢查子程序*keychk:mov a,#00h ;查看是否有鍵按下 mov dptr,#0ffddhmovx dptr,amov dptr,#0ffdehmovx a,dptrcpl aanl a,#0fhjnz test ;若有

20、鍵按下則檢測,無則返回。mov a,#0ffh rettest: lcallkeytest mov back,alcalldisplaylcallkeytestcjne a,back,nokeydwait:lcall display;mov a,#00h ;等待鍵抬起mov dptr,#0ffddhmovx dptr,amov dptr,#0ffdehmovx a,dptrcpl aanl a,#0fhjnz wait ;若鍵未抬起,則繼續等待mov a,back ;將檢測到的鍵值送給a sjmp chkendnokeyd: mov a,#0ffhchkend: ret;*按鍵檢測子程序*ke

21、ytest: mov r0,#0feh mov r1,#00h mov r2,#08hnextl: mov a,r0mov dptr,#0ffddhmovx dptr,a mov dptr,#0ffdehmovx a,dptr cpl aanl a,#0fhjnz keydwn ;看按下的鍵是否在當前列djnz r2,goscan;看是否掃描完畢,若沒有則調整繼續掃描 sjmp tstend;若掃描完畢,則返回。goscan: mov a,r0rl amov r0,ainc r1sjmp nextlkeydwn: mov r3,#00hll0: rrc ajc ll1inc r3sjmp ll

22、0ll1: mov a,r3mov b,amov a,#8 mul abadd a,r1 ;a中返回的為按下的鍵的代碼rettstend: mov a,#0ffhret;*延時1s*dly_1s: mov tmod,#01h; setb et0; mov th0,#0f0h ;10ms mov tl0,#0d8h; mov buff1s,#100; setb tr0; ret;*定時器t0中斷服務程序*int_t0:clr tr0 ;關計數器 djnz buff1s ;next_10ms;若不到1s繼續setb read_ad;若到了,則置標志位 cpl p1.0; clr et0;sjmp

23、t0_end;next_10ms: mov tmod,#01h mov th0,#0f0h ;定時10ms mov tl0,#0d8h setb tr0t0_end: reti;*計算子程序,完成一路計算*compute: mov a,r0; mov b,#04h ;測得的溫度數乘以4 mul ab; mov r6,b; mov r7,a; lcall hb2 ;調用子程序轉化為壓縮bcd碼,r4,r5為出口 ret;hb2: clr ;bcd碼初始化 mov r4,a mov r5,a mov r3,#10h ;轉換雙字節十六進制整數hb3: mov a,r7 ;從高端移出待轉換數的一位到c

24、y中 rlc a mov r7,a mov a,r6 rlc a mov r6,a mov a,r5 ;bcd碼帶進位自身相加,相當于乘2 addc a,r5 da a ;十進制調整 mov r5,a mov a,r4 addc a,r4 da a mov r4,a djnz r3,hb3 ;處理完16bit ret;*報警子程序*warn: mov r0,#motata ;r0指向motata mov r1,#wh ; r1指向wh mov r7,#08h ;r7為循環次數wloop:mov a,r0 mov alarmbuf,r1 ;與指令相適應的必要中轉 cjne a,alarmbuf,

25、redgehigh: clr c ;紅燈信號 ljmp nextredred : jnc gehigh ;讀入數值比預設大 setb cnextred:mov a,buffh rlc a ;壓入紅燈信號 mov buffh,a mov a,r1 ;調整r1指向wl add a,#10h mov r1,a mov alarmbuf,r1 mov a,r0 cjne a,alarmbuf,greenlslow: clr c ;綠燈信號 ljmp nextgrngreen: jc lslow ;讀入數值比預設小 setb cnextgrn:mov a,buffl rlc a mov buffl,a

26、mov a,r1 subb a,#10h mov r1,a inc r1 inc r0 djnz r7,wloopmov a,buffh ;將紅燈報警信息送出mov dptr,#0fbffh ;紅燈信號對應地址p2.2movx dptr,amov a,buffl ;將綠燈報警信息送出mov dptr,#0f7ffh ;綠燈信號對應地址p2.3movx dptr,aret;*鍵位調整程序*keyfunc: mov dptr,#keytableanl a,#0fh ;消除鍵位干擾movc a,a+dptr ;調整跳轉位置 cjne a,#0ah,k1 mov a,#0ffh setb setin

27、setb seth ;表示要設定溫度報警上限值 clr setlret; k1: cjne a,#04h,k2 mov a,#0ffh setb setinsetb setl ;表示要設定溫度報警下限值 clr sethret k2: cjne a,#0fh,k3 mov a,#0ffhjb setwarn,endispsetb setwarn clr abytein clr seth clr setl clr enterretendisp: clr setwarn; clr seth; clr setl; ret; k3: cjne a,#0eh,k4 mova,#0ffh jb solid

28、isp,ensolid;setb solidisp retensolid: clr solidispret k4: cjne a,#0ch,k5 mov a,#0ffh; clr setin; clr seth;clr setl; ret; k5: cjne a,#0dh,k6 mov a,#0ffhsetb enterret; k6: retkeytable: db 07h,04h,08h,05h,09h,06,0ah; 0, 1 ,2 ,3 ,4 ,5 ,6 db 04h,01h,00h,02h,0fh,03h,0eh,0ch,0dh ; 7 ,8 ,9 ,10 ,11,12, 13, 1

29、4 ,15;*實現對各個設定鍵的響應*keyrpd: jb setwarn,warnset ;根據solidisp的值調顯示 push psw; setb rs1; clr rs0 ;選擇2號工作寄存器區 mov r0,#motata; mov channel,a ;將讀入的值放入通道緩沖 mov r2,a; mov back,a; mov buf,a; lcall padjust ;調整r0,使其指向r2通道的溫度值 setb dispin ;5s計時的標志位mov buff5s,#05h ;初始化5s計時 mov r2,channel; pop psw; ret ;調整完畢,返回warns

30、et:jnbsetin,inset ;若未設定通道,先進行設定ljmp settemp ;若已設定則跳轉到溫度設定處inset: mov channel,aretsettemp:jb seth,highset ;設定溫度警告上限jb setl,lowset ;設定溫度警告下限 rethighset: lcall readtemp mov r0,#wh ;調整r0使其指向溫度上限存儲區 ljmp storesetlowset: lcall readtempmov r0,#wl ; 調整r0使其指向溫度下限存儲區storeset:mov a ,tempbuf; lcall compact ;將輸入

31、的數轉化為16進制數存儲(未改變r0) mov r2,channel ;送入要調整到的位置 lcall padjust ;調用調整子程序mov r0 ,a ; 將溫度值送到相應的位置retreadtemp: jb abytein,readlow;若已經有一位讀入則讀取低位readhigh: swap a; mov tempbuf,a; setb abytein; ret;readlow: orl a,tempbuf; mov tempbuf,a; clr abytein; ret;*將輸入溫度值轉化為16進制數*compact: mov r2,a;anl a,#0fh ;分離出十進制數的低位s

32、wap a;mov r3,a;mov a,r2;anl a,#0f0h ;分離出十進制數的高位swap a;mov r2,a;lcall bh2 ;將雙字節bcd碼轉化為十六進制整數mov a,r2 ;將r2r3中的數除以4clr c;rrc a;mov r2,a;mov a,r3;rrc a;mov r3,amov a,r2;rrc a;mov a,r3rrc a ;轉換完畢a中為要得到的16進制數ret;*雙字節bcd碼整數轉換成雙字節十六進制整數*bh2: mov a,r3 ;將低字節轉換成十六進制lcall bcdhmov r3,amov a,r2 ;將高字節轉換成十六進制lcall bcdhmov b,#100 ;擴大一百倍mul abadd a,r3 ;和低字節按十六進制相加mov r3,aclr aaddc a,bmov r2,aret;*單字節bcd碼整數轉換成單字節十六進制整數bcdh: mov b,#10h ;分離十位和個位div abmov r4,b ;暫存個位mov b,#

溫馨提示

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

評論

0/150

提交評論