版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第10章單片機應(yīng)用設(shè)計與實例10.1課程設(shè)計——電腦鐘的設(shè)計與制作10.2應(yīng)用系統(tǒng)實例——單片機溫度控制系統(tǒng)10.3單片機應(yīng)用系統(tǒng)開發(fā)的一般方法10.4單片機應(yīng)用系統(tǒng)實用技術(shù)本章小結(jié)習(xí)題1010.1課程設(shè)計——電腦鐘的設(shè)計與制作10.1.1設(shè)計要求設(shè)計并制作出具有如下功能的電腦鐘:
(1)自動計時,由6位LED顯示器顯示時、分、秒。
(2)具備校準功能,可以直接由0~9數(shù)字鍵設(shè)置當(dāng)前時間。
(3)具備定時啟鬧功能。
(4)一天時差不超過1s。10.1.2總體方案
1.計時方案方案一:采用實時時鐘芯片。針對計算機系統(tǒng)對實時時鐘功能的普遍需求,各大芯片生產(chǎn)廠家陸續(xù)推出了一系列的實時時鐘集成電路,如DS1287、DS12887、DS1302、PCF8563等。這些實時時鐘芯片具備年、月、日、時、分、秒計時功能和多點定時功能,計時數(shù)據(jù)的更新每秒自動進行一次,不需程序干預(yù)。計算機可通過中斷或查詢方式讀取計時數(shù)據(jù)并進行顯示,因此計時功能的實現(xiàn)無需占用CPU的時間,程序簡單。此外,實時時鐘芯片多數(shù)帶有鋰電池作后備電源,具備永不停止的計時功能;具有可編程方波輸出功能,可用作實時測控系統(tǒng)的采樣信號等;有的實時時鐘芯片內(nèi)部還帶有非易失性RAM,可用來存放需長期保存但有時也需變更的數(shù)據(jù)。由于功能完善,精度高,軟件程序設(shè)計相對簡單,且計時不占用CPU時間,因此,這一類專用芯片在工業(yè)實時測控系統(tǒng)中多被采用。方案二:軟件控制。利用MCS-51內(nèi)部的定時/計數(shù)器進行中斷定時,配合軟件延時實現(xiàn)時、分、秒的計時。該方案節(jié)省硬件成本,且能夠使讀者在定時/計數(shù)器的使用、中斷及程序設(shè)計方面得到鍛煉與提高,因此本系統(tǒng)將采用軟件方法實現(xiàn)計時。方案一:串口擴展,LED靜態(tài)顯示。如圖10.1(a)所示,該方案占用口資源少,利用串口擴展并口,實現(xiàn)靜態(tài)顯示,顯示亮度有保證,但硬件開銷大,電路復(fù)雜,信息刷新速度慢,比較適用于并行口資源較少的場合。方案二:直接接口,LED動態(tài)顯示。如圖10.1(b)所示,直接使用單片機的并行口作為顯示接口,無需外擴接口芯片,但占用口資源較多,且動態(tài)掃描的顯示方式需占用CPU較多的時間,在單片機沒有太多外圍接口及實時測控任務(wù)的情況下可以采用。圖10.1顯示方式框圖(a)靜態(tài)顯示框圖;(b)動態(tài)顯示框圖10.1.3硬件設(shè)計
1.電路原理圖電腦鐘硬件原理圖見圖10.2。電腦鐘電路的核心是AT89S51單片機,其內(nèi)部帶有4KB的FlashROM,無需外擴程序存儲器;電腦時鐘沒有大量的運算和暫存數(shù)據(jù),現(xiàn)有的128B片內(nèi)RAM已能滿足要求,也不必外擴片外RAM。系統(tǒng)配備6位LED顯示和4×3鍵盤,采用單片機的并行口作為鍵盤/顯示器接口電路。利用P0口作為6位LED顯示的位選口,其中,P0.0~P0.5分別對應(yīng)位LED0~LED5,P1口則作為段選口,P2口的低3位為鍵盤輸入口,對應(yīng)0~2行,P0口同時用作鍵盤的列掃描口。由于采用共陰極數(shù)碼管,因此P0口輸出低電平選中相應(yīng)的位,而P1口輸出高電平點亮相應(yīng)的段。P2.7接蜂鳴器,低電平驅(qū)動蜂鳴器鳴叫啟鬧。圖10.2電腦鐘硬件原理圖
2.系統(tǒng)工作流程本電腦鐘具備以下功能:
(1)時鐘顯示:6位LED從左到右依次顯示時、分、秒,采用24小時計時。
(2)鍵盤功能:采用4×3鍵盤,包括:
0~9:數(shù)字鍵,鍵號為00H~09H。
C/R鍵:時間設(shè)定/啟動計時鍵,鍵號為0AH。
ALM鍵:鬧鐘設(shè)置/啟鬧/停鬧鍵,鍵號為0BH。其工作流程如下:
(1)時間顯示:上電后,系統(tǒng)自動進入時鐘顯示,從00:00:00開始計時,此時可以設(shè)定當(dāng)前時間。
(2)時間調(diào)整:按下C/R鍵,系統(tǒng)停止計時,進入時間設(shè)定狀態(tài),系統(tǒng)保持原有顯示,等待鍵入當(dāng)前時間。按下0~9數(shù)字鍵可以順序設(shè)置時、分、秒,并在相應(yīng)LED管上顯示設(shè)置值,直至6位設(shè)置完畢。系統(tǒng)將自動由設(shè)定后的時間開始計時顯示。
(3)鬧鐘設(shè)置/啟鬧/停鬧:按下ALM鍵,系統(tǒng)繼續(xù)計時,顯示00:00:00,進入鬧鐘設(shè)置狀態(tài),等待鍵入啟鬧時間。按下0~9數(shù)字鍵可以順序進行相應(yīng)的時間設(shè)置,并在相應(yīng)的LED管上顯示設(shè)置值,直至6位設(shè)置完畢。這將啟動定時啟鬧功能,并恢復(fù)時間顯示。定時時間到,則蜂鳴器鳴叫,直至重新按下ALM鍵停鬧,并取消鬧鐘設(shè)置。10.1.4軟件設(shè)計
1.系統(tǒng)資源分配為方便閱讀程序,先對系統(tǒng)的資源分配加以說明。
(1)定時器:定時器0用作時鐘定時,按方式1工作,每隔100ms溢出中斷一次。
(2)片內(nèi)RAM及標志位的分配與定義見表10.1。表10.1電子鐘控制軟件片內(nèi)RAM及標志位分配表
2.軟件流程根據(jù)上述工作流程,軟件設(shè)計可分為以下幾個功能模塊:
(1)主程序:初始化與鍵盤監(jiān)控。
(2)計時:為定時器0中斷服務(wù)子程序,完成刷新計時緩沖區(qū)的功能。
(3)時間設(shè)置與鬧鐘設(shè)置:由鍵盤輸入設(shè)置當(dāng)前時間與定時啟鬧時間。
(4)顯示:完成6位動態(tài)顯示。
(5)鍵盤掃描:判斷是否有鍵按下,并求取鍵號。
(6)定時比較:判斷啟鬧時間到否,如時間到,則啟動蜂鳴器鳴叫。
(7)其它輔助功能子程序,如鍵盤設(shè)置、拆字、合字、時間合法性檢測等。下面分模塊進行軟件設(shè)計:
(1)主程序模塊MAIN:流程圖如圖10.3所示。
(2)計時程序模塊CLOCK:流程圖如圖10.4所示。如前所述,系統(tǒng)定時采用定時器與軟件循環(huán)相結(jié)合的方法。定時器0每隔100ms溢出中斷一次,則循環(huán)中斷10次延時時間為1s,上述過程重復(fù)60次為1分,分計時60次為1小時,小時計時24次則時間重新回到00:00:00。設(shè)系統(tǒng)使用6MHz的晶振,定時器0工作在方式1,則100ms定時對應(yīng)的定時器初值可由下式計算得到:定時時間=(216-定時器0初值)×(12/fosc)因此,定時器0初值=3CB0H,即TH0=3CH,TL0=0B0H當(dāng)系統(tǒng)使用其它頻率的晶振時,可以由上式計算相應(yīng)的定時器0初值,也可以改變定時時間。例如當(dāng)系統(tǒng)晶振為12MHz時,同樣的初值對應(yīng)的定時時間為50ms,則循環(huán)中斷次數(shù)為20次時,延時時間為1s。圖10.3主程序流程圖圖10.4計時程序流程圖這里有兩個問題需要特別重視:第一,定時器溢出產(chǎn)生中斷請求,CPU并不一定立即響應(yīng)中斷,而可能需要延遲一個中斷響應(yīng)時間之后才能響應(yīng)中斷,中斷響應(yīng)時間大約為3~8個機器周期。顯然,這將在定時時間中加入額外的延時時間,導(dǎo)致計時誤差。為了保證計時精度,必須采取措施進行補償。我們采用增大重裝的定時器0初值的方法來減少定時器0的定時時間。具體應(yīng)調(diào)整為多大,一般需要通過調(diào)試來確定。經(jīng)測試,定時器0重裝初值設(shè)為3CB7H~3CBFH就可以滿足精度要求。第二,時間是按十進制遞增的,而MCS-51單片機只有二進制加法指令,因此用加法指令計時必須進行二—十進制轉(zhuǎn)換。
(3)時間設(shè)置程序和鬧鐘定時程序模塊MODIFY:流程圖如圖10.5所示。將鍵盤輸入的6位時間值合并為3位壓縮BCD碼(時、分、秒)并送入計時緩沖區(qū)和鬧鐘值寄存區(qū),作為當(dāng)前計時起始時間或鬧鐘定時時間。該模塊的入口為計時緩沖區(qū)或鬧鐘值寄存區(qū)的首地址,將其置入R1中。程序調(diào)用一個鍵盤設(shè)置子程序KEYIN(其流程圖如圖10.6所示)來將鍵入的6位時間值送入鍵盤設(shè)置緩沖區(qū),然后用合字子程序COMB將鍵盤設(shè)置緩沖區(qū)中的6位BCD碼合并為3位壓縮BCD碼,并送入計時緩沖區(qū)或鬧鐘值寄存區(qū)。該程序同時作為時間值合法性檢測程序,可完成檢測功能:若鍵盤輸入的小時值大于23,分和秒值大于59,則不合法,將取消本次設(shè)置,清0重新開始計時。圖10.5時間設(shè)置/鬧鐘定時流程圖圖10.6鍵盤設(shè)置子程序流程圖
(4)鍵盤掃描程序模塊KEYSCAN:流程圖如圖10.7所示。判斷是否有鍵按下:無鍵按下則循環(huán)等待;有鍵按下則求取鍵號并將鍵號送A累加器返回。程序中的去抖延時和循環(huán)等待延時都用DISPLAY子程序來代替,從而保證隨時刷新顯示。鍵盤掃描程序在第6章中有詳細的敘述,在此不再贅述。
(5)顯示程序模塊DISPLAY:流程圖如圖10.8所示。圖10.7鍵盤掃描流程圖圖10.8鍵盤掃描流程圖將顯示緩沖區(qū)中的6位BCD碼用動態(tài)掃描方式顯示。為此,必須首先將3字節(jié)計時緩沖區(qū)中的時、分、秒壓縮BCD碼拆分為6字節(jié)(時、分、秒的十位、個位分別占用1字節(jié))BCD碼,這一功能由拆字子程序SEPA來實現(xiàn)。需要注意的是,當(dāng)按下時間或鬧鐘設(shè)置鍵后,在6位設(shè)置完成之前,應(yīng)顯示鍵入的數(shù)據(jù),而不顯示當(dāng)前時間。為此,我們設(shè)置了一個計時顯示允許標志位F0,在時間/鬧鐘設(shè)置期間F0=1,不調(diào)用SEPA,即調(diào)用SEPA刷新顯示緩沖區(qū)的前提條件是F0=0。動態(tài)顯示程序在第6章中已給出,在此不再贅述。
(6)定時比較程序模塊ALARM:流程圖如圖10.9所示。圖10.9定時比較流程圖
(7)拆字程序SEPA與合字程序COMB:如前所述,拆字程序的功能是將3字節(jié)計時緩沖區(qū)中的時、分、秒壓縮BCD碼拆分為6字節(jié)(時、分、秒的十位、個位分別占用1字節(jié))BCD碼并刷新顯示緩沖區(qū);合字程序的功能是將鍵盤設(shè)置緩沖區(qū)中的6位BCD碼合并為3位壓縮BCD碼,送入計時緩沖區(qū)或鬧鐘值寄存區(qū),同時檢測時間值的合法性。下面給出各模塊的源程序。;*****************主程序MAIN******************
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP CLOCK
ORG 0030H
DISP0 EQU30H
DISP1 EQU31H
DISP2 EQU32H
DISP3 EQU33H
DISP4 EQU34H
DISP5 EQU35H
HOUR EQU3CH
MIN EQU 3DH
SEC EQU3EH
MSEC EQU3FH
AHOUREQU 40H
AMIN EQU41H
ASEC EQU42H
F1 BIT PSW.1
MAIN: MOV SP,#50H ;設(shè)置堆棧區(qū)
CLR F1 ;清0鬧鐘標志位
CLR F0 ;允許計時顯示
MOV AHOUR,#0FFH
MOV AMIN,#0FFH
MOV ASEC,#0FFH
MOV R7,#10H
MOV R0,#DISP0
CLR A
LOOP: MOV @R0,A
INC R0
DJNZR7,LOOP ;設(shè)置初值
MOV TMOD,#01H MOV TL0,#0B0H
MOV TH0,#3CH ;定時器0初始化,定時;時間100ms
SETB TR0 ;啟動定時器
SETB EA
SETB ET0 ;開中斷
BEGIN:ACALL ALARM ;調(diào)用定時比較
ACALL KEYSCAN ;調(diào)用鍵盤掃描
CJNE A,#0AH,NEXT1;是CLR/RST鍵否?
CLR TR0 ;是則暫時停止計時
MOV R1,#HOUR ;地址指針指向計時緩沖;區(qū)首地址
AJMP MOD
NEXT1: CJNE A,#0BH,BEGIN;是ALARM鍵否?
JB F1,NEXT2 ;鬧鐘正在鬧響否?
MOV R1,#AHOUR ;地址指針指向鬧鐘值寄;存區(qū)首地址
MOD: SETB F0 ;置位時間設(shè)置/鬧鐘定時標志,;禁止顯示計時時間
ACALL MODIFY;調(diào)用時間設(shè)置/鬧鐘定時程序
SETB TR0 ;重新開始計時
CLR F0 ;清0時間設(shè)置/鬧鐘定時標志,恢復(fù);顯示計時時間
AJMP BEGIN
NEXT2:SETB P2.7 ;鬧鐘正在鬧響,停鬧
CLR F1 ;清0鬧鐘標志
AJMP BEGIN;**************時間設(shè)置/鬧鐘定時模塊MODIFY************
MODIFY:ACALL KEYIN ;調(diào)用鍵盤設(shè)置子程序
ACALL COMB ;調(diào)用合字子程序
RET;**************鍵盤設(shè)置子程序KEYIN************
KEYIN: PUSH PSW PUSH ACC
SETB RS1 ;保護現(xiàn)場
MOV R0,#DISP0 ;R0指向顯示緩沖區(qū)首地址
MOV R7,#06H ;設(shè)置鍵盤輸入次數(shù)
L1: CLR RS1
ACALL KEYSCAN ;調(diào)用鍵盤掃描程序取按下鍵;的鍵號
SETB RS1 CJNE A,#0AH,L2 ;鍵入數(shù)合法性檢測(是否大于9)
L2:JNC L1 ;大于9,重新鍵入
MOV @R0,A ;鍵號送顯示緩沖區(qū)
INC R0
DJNZ R7,L1 ;6位時間輸入完否?未完繼續(xù),;否則返回
POP ACC
POP PSW
CLR RS1 ;恢復(fù)現(xiàn)場
RET;**********鍵盤掃描子程序KEYSCAN***********
KEYSCAN:
ACALL
TEST ;調(diào)用判斷按鍵是否按下子;程序TEST
JNZ
REMOV;有鍵按下則調(diào)消抖延時
ACALL
DISPLAY
ACALL
ALARM
AJMP
KEYSCAN ;無鍵按下則繼續(xù)判是否按鍵
REMOV: ACALL
DISPLAY ;調(diào)用顯示子程序延時消抖
ACALL
TEST ;再判是否有鍵按下
JNZ
LIST ;有鍵按下則轉(zhuǎn)逐列掃描
ACALL
DISPLAY
ACALL
ALARM
AJMP
KEYSCAN ;無鍵按下則繼續(xù)判斷是否有;鍵按下
LIST: MOV R2,#0FEH ;首列掃描字送R2 MOV R3,#00H ;首列鍵號送R3
LINE0: MOV A,R2 ;首列掃描字送R2 MOV P2,A ;首列掃描字送P2口
MOV A,P0 ;讀入P0口的行狀態(tài)
JB ACC.0,LINE1 ;第0行無鍵按下轉(zhuǎn)第1行
MOV A,#00H ;第0行有鍵按下,行首鍵號送A AJMP TRYK ;求鍵號
LINE1: JB ACC.1,LINE2 ;第1行無鍵按下,轉(zhuǎn)第2行
MOV A,#04H ;第1行有鍵按下,行首鍵號送A AJMP TRYK ;求鍵號
LINE2: JB ACC.2,NEXT ;第2行無鍵按下,轉(zhuǎn)第3行
MOV A,#08H ;第2行有鍵按下,行首鍵號送A AJMP TRYK ;求鍵號
NEXT: INC R3 ;掃描下一列
MOV A,R2 ;列掃描字送A JNB ACC.3,EXIT ;4列掃描完,重新進行下一輪;掃描
RL A ;4列未掃描完,掃描字左移掃;描下一列
MOV R2,A ;掃描字送A AJMP LINE0 ;轉(zhuǎn)向掃描下一列
EXIT: AJMP KEYSCAN ;等待下一次按鍵
TRYK: ADD A,R3 ;按公式計算鍵碼,求得鍵號
PUSH ACC ;鍵號入棧保護
LETK: ACALL TEST ;等待按鍵釋放
JNZ LETK ;按鍵未釋放,繼續(xù)等待
POP ACC ;按鍵釋放,鍵號出棧
RET ;鍵盤掃描結(jié)束,返回
TEST: MOV A,#00H MOVX P2,A ;全掃描字00H送P2口
MOVX A,P0 ;讀入P0口行狀態(tài)
CPL A ;A取反,以高電平表示有鍵;按下
ANL A,#07H ;屏蔽高5位
RET;**************顯示子程序DISPLAY*************
DISPLAY: JB F0,DISP ;允許時間顯示標志F0=1轉(zhuǎn);DISP ACALL SEPA ;否則調(diào)用SEPA刷新顯示緩;沖區(qū)
DISP:PUSH PSW ;動態(tài)掃描顯示子程序
PUSH ACC
SETB RS0
MOV A,#0FFH
MOV P2,A ;關(guān)顯示
MOV R0,#DISP0
MOV R7,#00H
MOV R6,#06H
MOV R5,#0FEH
DIS1:
MOV DPTR,#TAB
MOV A,@R0 ;取顯示緩沖區(qū)數(shù)據(jù)
MOVC A,@A+DPTR ;查表得字型碼
MOV P1,A ;字型碼送P1口
MOV A,R5
MOVX P0,A ;位選碼送P0口
HERE:DJNZ R7,HERE ;延時
INC R0 ;更新顯示緩沖區(qū)地址
MOV A,R5
RL A ;位碼左移
MOV R5,A
DJNZ R6,DIS1 ;判斷6位顯示完否
CLR RS0
POP ACC
POP PSW
RET
TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
;共陰極字型碼表;*****************合字子程序COMB******************
COMB: MOV R0,#DISP1 ;R0指向顯示緩沖區(qū)小時低位
ACALL COMB1 ;合字
CJNE A,#24H,CHK ;小時大于24否?
CHK: JNC EXIT1 ;大于24則取消本次設(shè)置,退出
MOV @R1,A;否則,小時送計時緩沖區(qū)/鬧鐘;值寄存區(qū)小時單元
INC R1 MOV R0,#DISP3 ;R0指向顯示緩沖區(qū)分低位
ACALL COMB1 CJNE A,#60H,CHK1
CHK1: JNC EXIT1 MOV @R1,A INC R1 MOV R0,#DISP5 ;R0指向顯示緩沖區(qū)秒低位
ACALL COMB1 CJNE A,#60H,CHK2
CHK2: JNC EXIT1 MOV @R1,A RET
EXIT1: AJMP MAIN ;輸入不合法退出,重新清;0計時
COMB1: MOV A,@R0 ANL A,#0FH ;取出低位
MOV 43H,A ;暫存于43H單元
DEC R0 ;指向高位
MOV A,@R0 ANL A,#0FH
SWAP A ;高位送高4位
ORL A,43H ;高低位合并
RET;***************拆字子程序SEPA***************
SEPA:PUSH PSW
PUSH ACC
SETB RS0
MOV R0,#DISP5 ;指向顯示緩沖區(qū)秒低位
MOV A,SEC
ACALL SEPA1
MOV A,MIN
ACALL SEPA1
MOV A,HOUR
ACALL SEPA1
POP ACC POP PSW CLR RS0 RET
SEPA1: MOV 44H,A ;暫存44H ANL A,#0FH ;取出低位
MOV @R0,A ;送顯示緩沖區(qū)低位
DEC R0 ;指向顯示緩沖區(qū)高位
MOV A,44H ANL A,#0F0H ;取出高位
SWAP A ;高位送往低4位形成高位數(shù)據(jù)
MOV @R0,A ;高位數(shù)據(jù)送顯示緩沖區(qū)高位
RET;************定時比較模塊ALARM***************
ALARM: MOV A,ASEC CJNE A,SEC,BACK ;秒單元相同則繼續(xù);比較,否則返回
MOV A,AMIN CJNE A,MIN,BACK ;分單元相同則繼續(xù);比較,否則返回
MOV A,AHOUR CJNE A,HOUR,BACK ;小時單元相同,定;時時間到
CLR P2.7 ;啟動鬧鐘鳴叫
SETB F1 ;置位鬧鐘標志
BACK: RET;*************定時器0中斷服務(wù)子程序CLOCK*************
CLOCK: MOV TL0,#0B7H MOV TH0,#3CH ;重裝初值,時間校正
PUSH PSW PUSH ACC ;保護現(xiàn)場
INC MSEC MOV A,MSEC CJNE A,#0AH,DONE MOV MSEC,#00H MOV A,SEC INC A DA A ;二—十進制轉(zhuǎn)換
MOV SEC,A CJNE A,#60H,DONE MOV SEC,#00H MOV A,MIN INC A DA A MOV MIN,A CJNE A,#60H,DONE MOV MIN,#00H MOV A,HOUR INC A DA A MOV HOUR,A CJNE A,#24H,DONE MOV HOUR,#00H
DONE: POP ACC POP PSW ;恢復(fù)現(xiàn)場
RETI10.1.5系統(tǒng)調(diào)試與脫機運行
1.硬件調(diào)試硬件調(diào)試的主要任務(wù)是排除硬件故障,其中包括設(shè)計錯誤和工藝性故障。
(1)脫機檢查。用萬用表逐步按照電路原理圖檢查印制電路板中所有器件的各引腳,尤其是電源的連接是否正確;檢查數(shù)據(jù)總線、地址總線和控制總線是否有短路等故障,順序是否正確;檢查各開關(guān)按鍵是否能正常開關(guān),是否連接正確;各限流電阻是否短路等。為了保護芯片,應(yīng)先對各IC座(尤其是電源端)電位進行檢查,確定其無誤后再插入芯片檢查。
(2)聯(lián)機調(diào)試。暫時拔掉AT89S51芯片,將仿真器的40芯仿真插頭插入AT89S51的芯片插座進行調(diào)試,檢驗鍵盤/顯示接口電路是否滿足設(shè)計要求??梢酝ㄟ^一些簡單的測試軟件來查看接口工作是否正常。例如,我們可以設(shè)計一個軟件,使P1、P2口輸出55H或AAH,同時讀P0口,運行后用萬用表檢查相應(yīng)端口電平是否一高一低,在仿真器中檢查讀入的P0口低3位是否為1,如果正常則說明8155工作正常。還可設(shè)計一個使所有LED全顯示“8.”的靜態(tài)顯示程序來檢驗LED的好壞。如果運行測試結(jié)果與預(yù)期不符,則很容易根據(jù)故障現(xiàn)象判斷故障原因并采取針對性措施排除故障。
2.軟件調(diào)試軟件調(diào)試的任務(wù)是利用開發(fā)工具進行在線仿真調(diào)試,發(fā)現(xiàn)和糾正程序錯誤,同時也能發(fā)現(xiàn)硬件故障。程序的調(diào)試應(yīng)一個模塊一個模塊地進行,首先單獨調(diào)試各功能子程序,檢驗程序是否能夠?qū)崿F(xiàn)預(yù)期的功能,接口電路的控制是否正常等;最后逐步將各子程序連接起來總調(diào)。聯(lián)調(diào)需要注意的是,各程序模塊間能否正確傳遞參數(shù),特別要注意各子程序的現(xiàn)場保護與恢復(fù)。調(diào)試的基本步驟如下:
(1)用仿真器修改顯示緩沖區(qū)內(nèi)容,屏蔽拆字程序,調(diào)試動態(tài)掃描顯示功能。例如將DISP0~DISP5單元置為“012345”,應(yīng)能在LED上從左到右顯示“012345”。若顯示不正確,可在DISP子程序相應(yīng)位置設(shè)置斷點,調(diào)試檢查。然后用仿真器修改計時緩沖區(qū)內(nèi)容,調(diào)用拆字程序,調(diào)試顯示模塊DISPLAY。例如,將HOUR、MIN、SEC單元置為“123456”,檢查是否能正確顯示“12:34:56”。若顯示不正確,應(yīng)在SEPA子程序相應(yīng)位置設(shè)置斷點,調(diào)試檢查。
(2)運行主程序調(diào)試計時模塊,不按下任何鍵,檢查是否能從由00:00:00開始正確計時。若不能正確計時,則應(yīng)在定時器中斷服務(wù)子程序中設(shè)置斷點,檢查HOUR、MIN、SEC、MSEC單元是否隨斷點運行而變化。然后屏蔽緩沖區(qū)初始化部分,用仿真器修改計時緩沖區(qū)內(nèi)容為23:58:48,運行主程序(不按下任何鍵),檢驗?zāi)芊裾_進位。
(3)調(diào)試鍵盤掃描模塊KEYSCAN,先用延時10ms子程序代替顯示子程序延時消抖,在求取鍵號后設(shè)置斷點,中斷后觀察A累加器中的鍵號是否正確;然后恢復(fù)用顯示子程序延時消抖,檢驗與DISPLAY模塊能否正確連接。
(4)調(diào)試時間設(shè)置/鬧鐘定時模塊MODIFY。首先屏蔽COMB子程序,單獨調(diào)試鍵盤設(shè)置模塊KEYIN,觀察顯示緩沖區(qū)DISP0~DISP5單元的內(nèi)容是否隨鍵入的鍵號改變,以及鍵號能否在LED上顯示。然后屏蔽KEYIN子程序,單獨調(diào)試合字模塊COMB,分別將R1設(shè)置為時間設(shè)置緩沖區(qū)和鬧鐘值寄存區(qū)的首地址,修改顯示緩沖區(qū)內(nèi)容,運行程序后查看時間設(shè)置緩沖區(qū)HOUR、MIN、SEC單元和鬧鐘值寄存區(qū)AHOUR、AMIN、ASEC單元的內(nèi)容是否正確。最后聯(lián)調(diào)MODIFY模塊。
(5)運行主程序聯(lián)調(diào),檢查能否用鍵盤修改當(dāng)前時間以及設(shè)置鬧鐘,能否正確計時、啟鬧、停鬧。
3.脫機運行軟、硬件調(diào)試成功之后,可以將程序固化到AT89S51的FlashROM中,插入AT89S51芯片,接上電源脫機運行。既然軟、硬件都已調(diào)試成功,那么脫機運行似乎肯定成功,然而事實往往并非如此,仍有可能出現(xiàn)以下故障:
(1)系統(tǒng)不工作。其原因主要有晶振不起振(晶振損壞、晶振電路不正常導(dǎo)致晶振信號太弱等),或EA腳沒有接高電平(接地或懸空)等。
(2)系統(tǒng)工作時好時壞。這主要是由干擾引起的。由于本系統(tǒng)沒有傳感輸入通道和控制輸出通道,干擾源相對較少且簡單,因此,在電源、總線處對地接濾波電容一般可以解決問題。10.2應(yīng)用系統(tǒng)實例——單片機溫度控制系統(tǒng)10.2.1技術(shù)指標烘干箱的具體指標如下:
(1)烘干箱由2kW電爐加熱,最高溫度為500℃。
(2)烘干箱溫度可預(yù)置,烘干過程恒溫控制,溫度控制誤差不大于±2℃。
(3)預(yù)置時顯示設(shè)定溫度,烘干時顯示實時溫度,顯示精確到1℃。
(4)溫度超出預(yù)置溫度±5℃時發(fā)聲報警。
(5)對升/降溫過程的線性沒有要求。10.2.2控制方案產(chǎn)品的工藝不同,控制溫度的精度也不同,因而所采用的控制算法也不同。就溫度控制系統(tǒng)的動態(tài)特性來講,溫度控制系統(tǒng)基本上都是具有純滯后的一階環(huán)節(jié),當(dāng)系統(tǒng)精度及溫控的線性性能要求較高時,多采用PID算法或達林頓算法來實現(xiàn)溫度控制。本系統(tǒng)是一個典型的閉環(huán)控制系統(tǒng)。從技術(shù)指標可以看出,系統(tǒng)對控制精度的要求不高,對升/降溫過程的線性也沒有要求,因此,系統(tǒng)采用最簡單的通斷控制方式,即當(dāng)烘干箱溫度達到設(shè)定值時斷開加熱電爐,當(dāng)溫度降到低于某值時接通電爐開始加熱,從而保持恒溫控制。10.2.3硬件設(shè)計系統(tǒng)的硬件電路包括主機、溫度檢測、溫度控制、人機對話(鍵盤/顯示/報警)4個主要部分。圖10.10為系統(tǒng)的結(jié)構(gòu)框圖,圖10.11為系統(tǒng)的硬件電路原理圖。圖10.10電烤箱控制系統(tǒng)結(jié)構(gòu)框圖圖10.11電烤箱控制系統(tǒng)硬件電路原理圖
1.主機本系統(tǒng)控制方案簡單,數(shù)據(jù)量也不大,但考慮到系統(tǒng)的可擴展性,因此選用AT89S52作為控制系統(tǒng)的核心。AT89S52是Atmel公司推出的一種低功耗、高性能的CMOS單片機,它采用8051內(nèi)核,引腳與MCS-51系列單片機全兼容,內(nèi)帶8KB可編程Flash存儲器、256B內(nèi)部RAM、3個16位定時/計數(shù)器、WDT,并具備ISP端口,便于程序的在系統(tǒng)修改和調(diào)試,可大大縮短系統(tǒng)的開發(fā)周期。
AT89S52單片機采用靜態(tài)時鐘方式,時鐘頻率為0~33MHz。本系統(tǒng)采用6MHz的工作頻率。
2.溫度檢測這部分包括溫度傳感器、變送器和A/D轉(zhuǎn)換三部分。溫度傳感器和變送器的類型選擇與被控溫度的范圍及精度等級有關(guān)。型號為WZB-003、分度號為BA2的鉑熱電阻適用于0~500℃的溫度測量范圍,可以滿足本系統(tǒng)的要求。變送器將電阻信號轉(zhuǎn)換成與溫度成正比的電壓,當(dāng)溫度在0~500℃時,變送器輸出0~4.9V的電壓。
A/D轉(zhuǎn)換器件的選擇主要取決于溫度的控制精度。本系統(tǒng)要求溫度控制誤差不大于±2℃,采用8位A/D轉(zhuǎn)換器,其最大量化誤差為=℃±1℃,完全能夠滿足精度要求。這里我們采用ADC0809作為A/D轉(zhuǎn)換器。電路設(shè)計好后,調(diào)整變送器的輸出,使0~500℃的溫度變化對應(yīng)于0~4.9V的輸出,則A/D轉(zhuǎn)換對應(yīng)的數(shù)字量為00H~FAH,即0~250,則轉(zhuǎn)換結(jié)果乘以2正好是溫度值。用這種方法一方面可以減少標度轉(zhuǎn)換的工作量,另一方面還可以避免標度轉(zhuǎn)換帶來的計算誤差。
3.溫度控制電爐溫度控制采用可控硅來實現(xiàn)。雙向可控硅和電爐電阻絲串接在交流220V市電回路中。單片機的P1.7口經(jīng)光電隔離器和驅(qū)動電路連接可控硅的控制端,其電平的高低控制著可控硅的導(dǎo)通與斷開,從而控制電阻絲的通電加熱時間。
4.人機對話這部分包括鍵盤、顯示和報警三部分電路。本系統(tǒng)設(shè)有3位LED數(shù)碼顯示器,停止加熱時顯示設(shè)定溫度,啟動加熱時顯示當(dāng)前烤箱溫度。采用串行口擴展的靜態(tài)顯示電路作為顯示接口電路。為使系統(tǒng)簡單緊湊,鍵盤只設(shè)置5個功能鍵,分別是“復(fù)位”、“啟動”、“+100”、“+10”和“+1”鍵。其中,后4個鍵由P1口低4位作為鍵盤接口。利用后3個按鍵可以分別對預(yù)置溫度的百位、十位和個位進行加1設(shè)置,并在LED上顯示當(dāng)前設(shè)置值。連續(xù)按動這3個鍵,即可實現(xiàn)0~500℃的溫度設(shè)置。
5.其它可擴展電路對于要求更高的系統(tǒng),在現(xiàn)有電路的基礎(chǔ)上,讀者還可以視需要自行擴展實時時鐘電路。連接實時時鐘芯片DS12887可以獲得長的采樣周期,顯示年、月、日、時、分、秒,而其片內(nèi)帶有的114B非易失性RAM,可用來存入需長期保存但有時也需變更的數(shù)據(jù),如采樣周期,PID控制算法的系數(shù)KP、KI、KD等。10.2.4軟件設(shè)計
1.工作流程烤箱在上電復(fù)位后先處于停止加熱狀態(tài),這時可以用“+1”鍵設(shè)定預(yù)置溫度,顯示器將顯示預(yù)定溫度。溫度設(shè)定好后就可以按啟動鍵啟動系統(tǒng)工作了。溫度檢測系統(tǒng)不斷定時檢測當(dāng)前溫度,并送往顯示器顯示,達到預(yù)定值后停止加熱并顯示當(dāng)前溫度;當(dāng)溫度下降到下限(比預(yù)定值低2℃)時再啟動加熱。這樣不斷重復(fù)上述過程,使溫度保持在預(yù)定溫度范圍之內(nèi)。啟動后不能再修改預(yù)置溫度,必須按復(fù)位/停止鍵回到停止加熱狀態(tài)再重新設(shè)定預(yù)置溫度。
2.功能模塊根據(jù)上面對工作流程的分析,系統(tǒng)軟件可以分為以下幾個功能模塊:
(1)鍵盤管理:監(jiān)測鍵盤輸入,接收溫度預(yù)置,啟動系統(tǒng)工作。
(2)顯示:顯示設(shè)置溫度及當(dāng)前溫度。
(3)溫度檢測及溫度值變換:完成A/D轉(zhuǎn)換及數(shù)字濾波。
(4)溫度控制:根據(jù)檢測到的溫度控制電爐工作。
(5)報警:當(dāng)預(yù)置溫度或當(dāng)前爐溫越限時報警。
3.資源分配為了便于閱讀程序,首先給出單片機資源分配情況。數(shù)據(jù)存儲器的分配與定義見表10.2。表10.2溫度控制軟件數(shù)據(jù)存儲器分配表
程序存儲器:EPROM2764的地址范圍為0000H~1FFFH。
I/O口:P1.0~P1.3為鍵盤輸入,P1.6、P1.7為報警控制和電爐控制。
A/D轉(zhuǎn)換器0809:通道0~通道7的地址為7FF8H~7FFFH,使用通道0。
4.功能軟件設(shè)計
1)鍵盤管理模塊上電或復(fù)位后系統(tǒng)處于鍵盤管理狀態(tài),其功能是監(jiān)測鍵盤輸入,接收溫度預(yù)置和啟動鍵。程序設(shè)有預(yù)置溫度合法檢測報警,當(dāng)預(yù)置溫度超過500℃時會報警并將溫度設(shè)定在500℃。鍵盤管理子程序流程圖如圖10.12所示。圖10.12鍵盤管理子程序流程圖鍵盤管理子程序KIN:
KIN:ACALL CHK ;預(yù)置溫度合法性檢測
MOV BT1,ST1
MOV BT0,ST0 ;預(yù)置溫度送顯示緩沖區(qū)
LCALL DISP ;顯示預(yù)置溫度
KIN0:ACALL KEY ;讀鍵值
JZ
KIN0 ;無鍵閉合和重新檢測
ACALL DISP
ACALL DISP ;二次調(diào)用顯示子程序延時去抖
ACALL KEY ;再檢測有無鍵按下
JZ KIN0 ;無鍵按下重新檢測
JB ACC.1,S10
MOV A,#100 ;百位鍵按下
AJMP SUM
S10:JB ACC.2,S1
MOV A,#10 ;十位鍵按下
AJMP SUM
S1:JB ACC.3,S0
MOV A,#01 ;個位鍵按下
SUM:ADD A,ST0 ;預(yù)置溫度按鍵+1
MOV ST0,A
MOV A,#00H
ADDC A,ST1
MOV ST1,A
KIN1:ACALL KEY ;判斷閉合鍵釋放
JNZ KIN1 ;未釋放繼續(xù)判斷
AJMP KIN ;閉合鍵釋放繼續(xù)掃描鍵盤
S0: JNB ACC.0,KIN ;無鍵按下重新掃描鍵盤
RET ;啟動鍵按下返回
KEY: MOV A,P1 ;讀鍵值子程序
CPL A ANL A,#0FH RET 預(yù)置溫度合法性檢測子程序CHK(用雙字節(jié)減法比較預(yù)置溫度是否大于500℃(01F4H)):
CHK: MOV A,#0F4H ;預(yù)置溫度上限低8位送A CLR C SUBB A,ST0 ;低8位減,借位送CY MOV A,#01H ;預(yù)置溫度上限高8位送A SUBB A,ST1 ;高8位帶借位減 JC OUTA ;預(yù)置溫度越界,轉(zhuǎn)報警
MOV A,#00H ;預(yù)置溫度合法標志
RET
OUTA: MOV ST1,#01H ;將500寫入預(yù)置溫度數(shù)據(jù)區(qū)
MOV ST0,#0F4H CLR P1.6 ;發(fā)報警信號0.6s ACALL D0.6s SETB P1.6 ;停止報警
RET
2)顯示模塊顯示子程序的功能是將顯示緩沖區(qū)57H和58H的二進制數(shù)據(jù)先轉(zhuǎn)換成三個BCD碼,分別存入百位、十位和個位顯示緩沖區(qū)(54H、55H和56H單元),然后通過串口送出顯示。顯示子程序DISP:
DISP: ACALL HTB ;將顯示數(shù)據(jù)轉(zhuǎn)換為BCD碼
MOV SCON,#00H ;置串行口為方式0 MOV R2,#03H ;顯示位數(shù)送R2 MOV R0,#T100 ;顯示緩沖區(qū)首地址送R0
LD: MOV DPTR,#TAB ;指向字型碼表首地址
MOV A,@R0 ;取顯示數(shù)據(jù)
MOVC A,@A+DPTR ;查表
MOV SBUF,A ;字型碼送串行口
WAIT: JBC TI,NEXT ;發(fā)送結(jié)束轉(zhuǎn)下一個數(shù)據(jù)并;清中斷標志
SJMP WAIT ;發(fā)送未完等待
NEXT: INC R0 ;修改顯示緩沖區(qū)指針
DJNZ R2,LD ;判3位顯示完否,未完繼續(xù)
RET
TAB: ;字型碼表(略)
BCD碼轉(zhuǎn)換子程序HTB:
HTB: MOV A,BT0 ;取二進制顯示數(shù)據(jù)低8位
MOV B,#100 ;除100,確定百位數(shù)
DIV AB MOV T100,A ;百位數(shù)送54H單元
MOV A,#10 ;除10,確定十位數(shù)
XCH
A,B
DIV
A,B
MOV
T10,A ;十位數(shù)送55H單元
MOV
T,B ;個位數(shù)送56H單元
MOV
A,BT1 ;取二進制顯示數(shù)據(jù)高8位
JNZ
LH1 ;高位不為0轉(zhuǎn)LH1繼續(xù)高8位轉(zhuǎn)換
RET ;高位為0結(jié)束,返回
LH1:MOV
A,#06H ;高位不為0,低位轉(zhuǎn)換結(jié)果加256;(因為溫度數(shù)據(jù)不會大于500,;所以高8位最多為01H,即256)
ADD
A,T
DA
A ;個位加6(十進制加)
MOV
T,A ;結(jié)果送回個位
MOV
A,#05H
ADDC A,T10
DA A ;十位加5(十進制加)
MOV T10,A ;結(jié)果送回十位
MOV A,#02H
ADDC A,T100
DA A ;百位加2(十進制加)
MOV T100,A ;結(jié)果送回百位
RET
3)溫度檢測模塊
A/D轉(zhuǎn)換采用查詢方式。為提高數(shù)據(jù)采樣的可靠性,對采樣溫度進行數(shù)字濾波。數(shù)字濾波的算法很多,這里采用4次采樣取平均值的方法。如前所述,本系統(tǒng)的A/D轉(zhuǎn)換結(jié)果乘2正好是溫度值,因此,4次采樣的數(shù)字量之和除以2就是檢測的當(dāng)前溫度。檢測結(jié)果高位存入50H,低位存入51H。溫度檢測子程序流程圖如圖10.13所示。圖10.13溫度檢測子程序流程圖
溫度檢測子程序TIN:
TIN: MOV TEMP1,#00H ;清檢測溫度緩沖區(qū)
MOV TEMP0,#00H MOV R2,#04H ;取樣次數(shù)送R2 MOV DPTR,#7FF8H ;指向A/D轉(zhuǎn)換器0通道
LTIN1: MOVX @DPTR,A ;啟動轉(zhuǎn)換
HERE: JNB IE1,HERE ;等待轉(zhuǎn)換結(jié)束
MOVX A,@DPTR ;讀轉(zhuǎn)換結(jié)果
ADD A,TEMP0 ;累加(雙字節(jié)加法) MOV TEMP0,A MOV A,#00H ADDC A,TEMP1 MOV TEMP1,A DJNZ R2,LTIN1 ;4次采樣完否,未完繼續(xù)
CLR C ;累加結(jié)果除2(雙字節(jié)除法) MOV A,TEMP1 RRC A MOV TEMP1,A MOV A,TEMP0 RRC A MOV TEMP0,A RET
4)溫度控制模塊將當(dāng)前溫度與預(yù)置溫度比較,當(dāng)前溫度小于預(yù)置溫度時,繼電器閉合,接通電阻絲加熱;當(dāng)前溫度大于預(yù)置溫度時,繼電器斷開,停止加熱;當(dāng)二者相等時電爐保持原來狀態(tài);當(dāng)前溫度降低到比預(yù)置溫度低2℃時,再重新啟動加熱;當(dāng)前溫度超出報警上下限時將啟動報警,并停止加熱。由于電爐開始加熱時,當(dāng)前溫度可能低于報警下限,為了防止誤報,在未達到預(yù)置溫度時,不允許報警,為此設(shè)置了報警允許標志F0。模塊流程見圖10.14。圖10.14溫度控制流程圖溫度控制子程序CONT:
CONT: MOV A,TEMP0 ;當(dāng)前溫度-預(yù)置溫度(雙字節(jié)減) CLR C SUBB A,ST0 MOV B,A ;低8位相減的差值暫存B MOV A,TEMP1 SUBB A,ST1 JNC LOFF ;無借位,表示當(dāng)前溫度≥預(yù);置溫度,轉(zhuǎn)LOFF JNB F0,LON ;當(dāng)前溫度<預(yù)置溫度,判是否;達到過預(yù)置溫度
MOV A,B ;若達到過預(yù)置溫度,則判二;者差值是否大于2
CLR C SUBB A,#02H JNC ACC.7,LOFF ;差值不大于2,轉(zhuǎn)LOFF
LON: CLR P1.7 ;開電爐
SJMP EXIT ;返回
LOFF: SETB F0 ;設(shè)置允許報警標志
SETB P1.7 ;關(guān)電爐
EXIT: RET在此,讀者也可自行加入PID算法程序來實現(xiàn)PID控制。
5)溫度越限報警模塊報警上限溫度值為預(yù)置溫度+5℃,即當(dāng)前溫度上升到高于預(yù)置溫度+5℃時報警,并停止加熱;報警下限溫度值為預(yù)置溫度-5℃,即在當(dāng)前溫度下降到低于預(yù)置溫度-5℃,且報警允許時報警,這是為了防止開始從較低溫度加溫時誤報警。報警的同時也關(guān)閉電爐。圖10.15為報警子程序流程圖。圖10.15報警子程序流程圖Z報警子程序ALARM:
ALARM: MOV A,TEMP0 ;當(dāng)前溫度低字節(jié)→A CLR C SUBB A,ST0 ;(當(dāng)前溫度低字節(jié)-預(yù)置溫度;低字節(jié))→A MOV B,A ;低字節(jié)相減結(jié)果送B暫存
MOV A,TEMP1 ;當(dāng)前溫度高字節(jié)→A SUBB A,ST1 ;(當(dāng)前溫度高字節(jié)-預(yù)置溫度;高字節(jié))→A JC LA0 ;有借位,當(dāng)前溫度小于預(yù)置;溫度,轉(zhuǎn)LA0 SETB F0 ;當(dāng)前溫度≥預(yù)置溫度,允許;報警
AJMP LA1
LA0: MOV A,ST0 ;預(yù)置溫度低字節(jié)→A CLR C SUBB A,TEMP0 ;(預(yù)置溫度低字節(jié)-當(dāng)前溫度;低字節(jié))→A MOV B,A ;低字節(jié)相減結(jié)果送B暫存
MOV A,ST1 ;預(yù)置溫度高字節(jié)→A SUBB A,TEMP1 ;(預(yù)置溫度高字節(jié)-當(dāng)前溫度;高字節(jié))→A
LA1: XCH A,B ;高低字節(jié)互換,判斷相減結(jié);果是否大于5 CLR C SUBB A,#05H ;(低字節(jié)差-5)→A XCH A,B ;(低字節(jié)差-5)→B,高字節(jié)差;→A SUBB A,#00H ;(高字節(jié)差-0)→A(因為5的;高字節(jié)為0) JC LA2 ;相減結(jié)果小于5,不報警返回
JNB F0,LA2 ;相減結(jié)果≥5,判是否允許報;警,不允許則返回
CLR P1.6 ;啟動報警
SETB P1.7 ;關(guān)電爐
LCALL D0.6s ;報警延時0.6s SETB P1.6 ;關(guān)報警
LA2: RET
D0.6s: (略) ;延時0.6s子程序
6)主程序和中斷服務(wù)子程序主程序采用中斷嵌套方式設(shè)計,各功能模塊可直接調(diào)用。主程序完成系統(tǒng)的初始化、溫度預(yù)置及其合法性檢測、預(yù)置溫度的顯示及定時器0設(shè)置。定時器0中斷服務(wù)子程序是溫度控制體系的主體,用于溫度檢測、控制和報警(包括啟動A/D轉(zhuǎn)換、讀入采樣數(shù)據(jù)、數(shù)字濾波、越限溫度報警和越限處理、輸出可控硅的控制脈沖等)。中斷由定時器0產(chǎn)生,根據(jù)需要每隔15s中斷一次,即每15s采樣控制一次。但系統(tǒng)采用6MHz晶振,最大定時為130ms,為實現(xiàn)15s定時,這里另行設(shè)了一個軟件計數(shù)器。主程序和中斷服務(wù)子程序的流程圖如圖10.16所示。圖10.16主程序和中斷服務(wù)子程序的流程圖主程序MAIN(數(shù)據(jù)緩沖區(qū)的定義和初始化部分從略):
ORG 0000H AJMP MAIN ORG 000BH AJMP PT0 ORG 0030H
MAIN: MOV SP,#59H ;設(shè)定堆棧指針
MOV TMOD,#01H ;定時器0初始化
MOV TL0,#0B0H ;定時器定時時間100ms MOV TH0,#3CH MOV R7,#150 ;置15s軟計數(shù)器初值
ACALL KIN ;調(diào)鍵盤管理子程序
SETB ET0 ;允許定時器0中斷
SETB EA ;開中斷
SETB TR0 ;啟動定時器0 SJMP $定時器0中斷服務(wù)子程序PT0:
PT0: MOV TL0,#0B0H MOV TH0,#3CH ;重置定時器0初值
DJNZ R7,BACK ;15s到否,不到返回
MOV R7,#150 ;重置軟計數(shù)器初值
ACALL TIN ;溫度檢測
MOV BT1,TEMP1 ;當(dāng)前溫度送顯示緩沖區(qū)
MOV BT0,TEMP0
ACALL DISP ;顯示當(dāng)前溫度
ACALL CONT ;溫度控制
LCALL ALARM ;溫度越限報警
BACK: RETI10.3單片機應(yīng)用系統(tǒng)開發(fā)的一般方法10.3.1確定任務(wù)單片機應(yīng)用系統(tǒng)的開發(fā)過程由確定系統(tǒng)的功能與性能指標開始。首先要細致分析、研究實際問題,明確各項任務(wù)與要求,綜合考慮系統(tǒng)的先進性、可靠性、可維護性以及成本、經(jīng)濟效益,擬訂出合理可行的技術(shù)性能指標。10.3.2總體設(shè)計
1.機型選擇根據(jù)系統(tǒng)的功能目標、復(fù)雜程度、可靠性要求、精度和速度要求來選擇性能/價格比合理的單片機機型。目前單片機種類、機型極多,有8位、16位、32位機等,片內(nèi)的集成度各不相同,有的機型在片內(nèi)集成了WDT、PWM、串行EEPROM、A/D、比較器等多種功能并提供UART、I2C、SPI協(xié)議的串行接口,最大工作頻率也從早期的0~12MHz增至33~40MHz。在進行機型選擇時應(yīng)考慮:
(1)所選機型性能應(yīng)符合系統(tǒng)總體要求,且留有余地,以備后期更新。
(2)開發(fā)方便,具有良好的開發(fā)工具和開發(fā)環(huán)境。
(3)市場貨源(包括外部擴展器件)在較長時間內(nèi)充分。
(4)設(shè)計人員對機型的開發(fā)技術(shù)熟悉,以利縮短研制周期。
2.系統(tǒng)配置選定機型后,再選擇系統(tǒng)中要用到的其他外圍元器件,如傳感器、執(zhí)行器件、人機接口、存儲器等。整個系統(tǒng)中的相關(guān)器件要盡可能做到性能匹配,例如,選用晶振頻率較高時,存儲器的存取時間就短,應(yīng)選擇存取速度較快的芯片;選擇CMOS型單片機構(gòu)成低功耗系統(tǒng)時,系統(tǒng)中的所有芯片都應(yīng)該選擇低功耗產(chǎn)品。如果系統(tǒng)中相關(guān)器件性能差異很大,則系統(tǒng)的綜合性能將降低,甚至不能正常工作。
3.軟/硬件分工在總體方案設(shè)計過程中,對軟件和硬件進行分工是一個首要的環(huán)節(jié)。原則上,能夠由軟件來完成的任務(wù)就盡可能用軟件來實現(xiàn),以降低硬件成本,簡化硬件結(jié)構(gòu),提高可靠性,但是它可能會降低系統(tǒng)的工作速度。因此,在進行系統(tǒng)的軟、硬件分工時,應(yīng)綜合考慮系統(tǒng)的響應(yīng)速度、實時性等相關(guān)的技術(shù)指標。總體設(shè)計還要求大致規(guī)定各接口電路的地址、軟件的結(jié)構(gòu)和功能、上下位機的通信協(xié)議、程序的駐留區(qū)域及工作緩沖區(qū)、系統(tǒng)的加密方案等。總體方案一旦確定,系統(tǒng)的大致規(guī)模及軟件的基本框架就確定了。10.3.3硬件設(shè)計
1.程序存儲器隨著單片機集成度的提高,目前片內(nèi)程序存儲器有2KB、4KB、8KB、12KB、16KB、32KB、64KB等多種選擇,通常盡可能選擇滿足系統(tǒng)程序容量要求的機型,而不再進行程序存儲器的擴展。必須擴展時一般可選用容量較大的EPROM芯片,如2764(8KB)、27128(16KB)或27256(32KB)等。盡量避免用小容量的芯片組合擴充成大容量的存儲器。程序存儲器容量大些,則編程空間寬裕些,價格相差也不會太多。
2.數(shù)據(jù)存儲器根據(jù)系統(tǒng)功能的要求,如果需要擴展外部RAM或I/O口,那么RAM芯片可選用6116(2KB)、6264(8KB)或62256(32KB),原則上應(yīng)盡量減少芯片數(shù)量,使譯碼電路簡單。I/O接口芯片一般選用8155(帶有256KB靜態(tài)RAM)或8255。這類芯片具有口線多、硬件邏輯簡單等特點。若口線要求很少,且僅需要簡單的輸入或輸出功能,則可用不可編程的TTL電路或CMOS電路。
3.?I/O接口
I/O接口大致可歸類為并行接口、串行接口、模擬采集通道(接口)、模擬輸出通道(接口)等。應(yīng)盡可能選擇集成了所需接口的單片機,以簡化I/O口設(shè)計,提高系統(tǒng)可靠性。
4.?A/D和D/A電路芯片
A/D和D/A電路芯片主要根據(jù)精度、速度和價格等來選用,同時還要考慮與系統(tǒng)的連接是否方便。
5.地址譯碼電路通常采用全譯碼、部分譯碼或線選法,應(yīng)考慮充分利用存儲空間和簡化硬件邏輯等方面的問題。MCS-51系統(tǒng)有充分的存儲空間,包括64KB程序存儲器和64KB數(shù)據(jù)存儲器,所以在一般的控制應(yīng)用系統(tǒng)中,主要要考慮簡化硬件邏輯問題。當(dāng)存儲器和I/O芯片較多時,可選用專用譯碼器74S138或74LS139等。
6.總線驅(qū)動能力
MCS-51系列單片機的外部擴展功能很強,但4個8位并行口的負載能力是有限的。P0口能驅(qū)動8個TTL電路,P1~P3口只能驅(qū)動3個TTL電路。在實際應(yīng)用中,這些端口的負載不應(yīng)超過總負載能力的70%,以保證留有一定的余量。如果滿載,會降低系統(tǒng)的抗干擾能力。在外接負載較多的情況下,如果負載是MOS芯片,則因負載消耗電流很小,所以影響不大。如果驅(qū)動較多的TTL電路,則應(yīng)采用總線驅(qū)動電路,以提高端口的驅(qū)動能力和系統(tǒng)的抗干擾能力。數(shù)據(jù)總線宜采用雙向8路三態(tài)緩沖器74LS245作為總線驅(qū)動器,地址和控制總線可采用單向8路三態(tài)緩沖區(qū)74LS244作為單向總線驅(qū)動器。
7.系統(tǒng)速度匹配
MCS-51系列單片機的時鐘頻率可在2~12MHz之間任選。在不影響系統(tǒng)技術(shù)性能的前提下,時鐘頻率選擇低一些為好,這樣可降低系統(tǒng)中對元器件工作速度的要求,從而提高系統(tǒng)的可靠性。
8.抗干擾措施單片機應(yīng)用系統(tǒng)的工作環(huán)境往往都是具有多種干擾源的現(xiàn)場,抗干擾措施在硬件電路設(shè)計中顯得尤為重要。根據(jù)干擾源引入的途徑,抗干擾措施可以從以下兩個方面考慮。
1)電源供電系統(tǒng)為了克服電網(wǎng)以及來自系統(tǒng)內(nèi)部其它部件的干擾,可采用隔離變壓器、交流穩(wěn)壓、線濾波器、穩(wěn)壓電路各級濾波等抗干擾措施。
2)電路上的考慮為了進一步提高系統(tǒng)的可靠性,在硬件電路設(shè)計時,應(yīng)采取一系列抗干擾措施:
(1)大規(guī)模IC芯片電源供電端VCC都應(yīng)加高頻濾波電容,根據(jù)負載電流的情況,在各級供電節(jié)點處還應(yīng)加足夠容量的退耦電容。
(2)開關(guān)量I/O通道與外界的隔離可采用光電耦合器件,特別是與繼電器、可控硅等連接的通道,一定要采用隔離措施。
(3)可采用CMOS器件提高工作電壓(+15V),這樣干擾門限也會相應(yīng)提高。
(4)傳感器后級的變送器盡量采用電流型傳輸方式,因電流型比電壓型抗干擾能力強。
(5)電路應(yīng)有合理的布線及接地方式。
(6)與環(huán)境干擾的隔離可采用屏蔽措施。10.3.4軟件設(shè)計整個單片機應(yīng)用系統(tǒng)是一個整體,當(dāng)系統(tǒng)的硬件電路設(shè)計定型后,軟件的任務(wù)也就明確了。單片機應(yīng)用系統(tǒng)的軟件主要包括兩大部分:用于管理單片機微機系統(tǒng)工作的監(jiān)控程序和用于執(zhí)行實際具體任務(wù)的功能程序。對于前者,應(yīng)盡可能利用現(xiàn)成微機系統(tǒng)的監(jiān)控程序。為了適應(yīng)各種應(yīng)用的需要,現(xiàn)代的單片機開發(fā)系統(tǒng)的監(jiān)控軟件功能相當(dāng)強,并附有豐富的實用子程序,可供用戶直接調(diào)用,例如鍵盤管理程序、顯示程序等。因此,在設(shè)計系統(tǒng)硬件邏輯和確定應(yīng)用系統(tǒng)的操作方式時,應(yīng)充分考慮這一點。這樣可大大減少軟件設(shè)計的工作量,提高編程效率。對于后者,要根據(jù)應(yīng)用系統(tǒng)的功能要求來編程序,例如外部數(shù)據(jù)采集、控制算法的實現(xiàn)、外設(shè)驅(qū)動、故障處理及報警程序等。單片機應(yīng)用系統(tǒng)的軟件設(shè)計千差萬別,不存在統(tǒng)一模式。開發(fā)一個軟件的明智方法是盡可能采用模塊化結(jié)構(gòu)。根據(jù)系統(tǒng)軟件的總體構(gòu)思,按照先粗后細的方法,把整個系統(tǒng)軟件劃分成多個功能獨立、大小適當(dāng)?shù)哪K。應(yīng)明確規(guī)定各模塊的功能,盡量使每個模塊功能單一,各模塊間的接口信息簡單、完備,接口關(guān)系統(tǒng)一,盡可能使各模塊間的聯(lián)系減少到最低限度。這樣,各個模塊可以分別獨立設(shè)計、編制和調(diào)試,最后再將各個程序模塊連接成一個完整的程序進行總調(diào)試。10.3.5系統(tǒng)調(diào)試系統(tǒng)調(diào)試包括硬件調(diào)試和軟件調(diào)試。硬件調(diào)試的任務(wù)是排除系統(tǒng)的硬件電路故障,包括設(shè)計性錯誤和工藝性故障。軟件調(diào)試是利用開發(fā)工具進行在線仿真調(diào)試,除發(fā)現(xiàn)和解決程序錯誤外,也可以發(fā)現(xiàn)硬件故障。程序調(diào)試一般是一個模塊一個模塊地進行,一個子程序一個子程序地調(diào)試,最后聯(lián)合起來統(tǒng)調(diào)。利用開發(fā)工具的單步和斷點運行方式,通過檢查應(yīng)用系統(tǒng)的CPU現(xiàn)場、RAM和SFR的內(nèi)容以及I/O口的狀態(tài),來檢查程序的執(zhí)行結(jié)果和系統(tǒng)I/O設(shè)備的狀態(tài)變化是否正常,從中發(fā)現(xiàn)程序的邏輯錯誤、轉(zhuǎn)移地址錯誤以及隨機的錄入錯誤等。也可以發(fā)現(xiàn)硬件設(shè)計與工藝錯誤和軟件算法錯誤。在調(diào)試過程中,要不斷調(diào)整、修改系統(tǒng)的硬件和軟件,直到其正確為止。程序聯(lián)調(diào)運行正常后,還需在模擬的各種現(xiàn)場條件和惡劣環(huán)境下調(diào)試、運行,以檢查系統(tǒng)是否滿足原設(shè)計要求。10.4單片機應(yīng)用系統(tǒng)實用技術(shù)10.4.1低功耗設(shè)計
1.單片機系統(tǒng)的低功耗設(shè)計策略
(1)選用盡量簡單的CPU內(nèi)核。在選擇CPU內(nèi)核時切忌一味追求性能,選擇的原則應(yīng)該是“夠用就好”。現(xiàn)在單片機的運行速度越來越快,但性能的提升往往帶來功耗的增加。一個復(fù)雜的CPU雖然集成度高、功能強,但片內(nèi)晶體管多,總漏電流大,即使進入STOP狀態(tài),漏電流也變得不可忽視;而簡單的CPU內(nèi)核不僅功耗低,成本也低。
(2)選擇低電壓供電的系統(tǒng)。單片機已經(jīng)從與TTL兼容的5V供電,降低到3.3V、3V、2V乃至1.8V供電。低電壓供電可以大大降低系統(tǒng)的工作電流,但是由于晶體管的尺寸不斷減小,因此管子的漏電流有增大的趨勢,這也是對降低功耗不利的一個方面。
(3)選擇帶有低功耗模式的系統(tǒng)。低功耗模式通常包含等待和停止兩種模式。等待模式下,CPU停止工作,但系統(tǒng)時鐘并不停止,單片機的外圍I/O模塊也不停止工作。此時系統(tǒng)功耗一般降低有限,相當(dāng)于工作模式的50%~70%,可由外部事件觸發(fā),快速啟動到運行模式。停止模式下,系統(tǒng)時鐘也將停止,可由內(nèi)部實時時鐘中斷重新啟動時鐘系統(tǒng)時鐘,進而喚醒CPU繼續(xù)工作,CPU消耗的電流可降到微安級。
(4)選擇合適的時鐘方案。有兩方面的問題需考慮:第一是系統(tǒng)總線頻率應(yīng)當(dāng)盡量低。運行電流幾乎是和單片機的時鐘頻率成正比的,因此盡量降低系統(tǒng)時鐘的運行頻率可以有效地降低系統(tǒng)功耗。第二是時鐘方案,也就是是否使用鎖相環(huán),使用外部晶振還是內(nèi)部晶振等問題。單就時鐘方案來講,使用外部晶振且不使用鎖相環(huán)是功率消耗最小的一種。
(5)用中斷代替查詢。使用中斷方式,CPU可以什么都不做,甚至可以進入等待模式或停止模式;而在查詢方式下,CPU必須不停地訪問I/O寄存器,這會帶來很多額外的功耗。
(6)用“宏”代替“子程序”。因為CPU進入子程序時,會首先將當(dāng)
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年己二酸二甲酯項目建議書
- 全程融資合同范本
- 商鋪轉(zhuǎn)租賃合同
- 超市柜臺租賃協(xié)議
- 佳木斯市個人車位租賃合同
- 2025年海洋潛標系統(tǒng)項目合作計劃書
- 2025年碳纖維正交三向織物項目合作計劃書
- 2025年X射線管項目發(fā)展計劃
- 2025個人承包土地合同書
- 2024年零星建筑工程施工合作合同范本版B版
- 小學(xué)數(shù)學(xué)北師大四年級上冊四運算律四上運算律復(fù)習(xí)課PPT
- 廣西建設(shè)工程造價咨詢服務(wù)行業(yè)收費參考標準
- 對于成立產(chǎn)科安全管理辦公室通知
- 醫(yī)院突發(fā)呼吸心跳驟停搶救演練腳本
- 深基坑支護專項施工方案(咬合樁)
- 勞務(wù)派遣服務(wù)外包技術(shù)方案
- 極致物業(yè)管理系統(tǒng)收費管理業(yè)務(wù)操作
- GB∕T 29639-2020 生產(chǎn)經(jīng)營單位生產(chǎn)安全事故應(yīng)急預(yù)案編制導(dǎo)則
- 貴州省工傷保險待遇申領(lǐng)授權(quán)委托書
- 媒介融合(ppt)課件
- 液壓系統(tǒng)中油管尺寸的選擇
評論
0/150
提交評論