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