版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第2章MCS-51單片機的硬件組成
2.1MCS-51單片機的外部特性2.2AT89S52單片機的內(nèi)部組成2.3CPU及復位電路
2.4I/O端口2.5存儲器2.6專用功能寄存器2.7中斷系統(tǒng)2.8定時器/計數(shù)器2.9串行接口2.10看門狗定時器(WDT)2.11掉電模式和空閑模式習題與思考題2.1
MCS-51單片機的外部特性
MCS-51系列單片機產(chǎn)品有8051、8031、8075、80C51、80C31等型號。它們的結(jié)構(gòu)基本相同,其主要差別反映在存儲器的配置上。8051內(nèi)部設有4KB的掩模ROM程序存儲器,8031片內(nèi)沒有程序存儲器,而8751是將8051片內(nèi)的ROM換成EPROM。本章將介紹Atmel公司的AT89S52單片機的硬件組成。
AT89S52單片機是Atmel公司推出的一款在線可編程單片機,通過相應的ISP軟件,用戶可對單片機程序存儲器Flash中的代碼進行方便的改變。它與AT89C52單片機引腳完全兼容。
AT89S52的外型封裝有兩種方式:雙列直插式40腳封裝(DIP)和方形44腳封裝(PLCC)。圖2-1(a)為兩種封裝方式的引腳排列圖。圖2-1
MCS-51單片機引腳及總線結(jié)構(gòu)
(a)引腳排列;(b)外部總線結(jié)構(gòu)2.1.1引腳說明及特性
1.AT89S52的功能特性
AT89S52具有如下的功能特性:(1)兼容MCS-
51系列產(chǎn)品。(2)片內(nèi)有8KB的、具有ISP功能的Flash存儲器。(3)工作電壓范圍為4~5.5V。(4)工作頻率范圍為0~33MHz。(5)具有三級編程保護功能。(6)具有256×8位的內(nèi)部RAM。(7)具有32個可編程I/O口。(8)具有三個16位定時器或計數(shù)器。(9)具有八個中斷源。(10)含全雙工異步串口。(11)具有低功耗模式。(12)具備看門狗功能。(13)具備在線可編程功能。
2.引腳功能
AT89S52的40條引腳功能說明如下:(1)主電源引腳VSS和VCC。VSS為電源地。VCC正常工作電壓為+5V。AT89S系列單片機的工作電壓范圍為4~5.5V。(2)時鐘電路引腳XTAL1、XTAL2。
·XTAL1:片內(nèi)振蕩電路的輸入端,是外接晶體的一個引腳。當采用外部振蕩器時,此引腳接地。
·XTAL2:片內(nèi)振蕩電路的輸出端,是外接晶體的另一端。當采用外部振蕩器時,此引腳接外部振蕩源。(3)控制信號引腳RST、
·RST:復位引腳。當振蕩器運行時,在此引腳上出現(xiàn)兩個機器周期的高電平(由低到高跳變),使單片機復位。當看門狗計數(shù)滿時,單片機復位,RST引腳會有98個時鐘周期的高電平輸出??梢酝ㄟ^設置特殊功能寄存器AUXR(地址:8EH)的DISRTO位來屏蔽或使能該功能,單片機默認狀態(tài)是使能該功能。
·:允許地址鎖存輸出/編程脈沖輸入引腳。正常工作時為ALE(允許地址鎖存)功能,提供把低字節(jié)地址鎖存到外部鎖存器的信號。ALE引腳以不變的頻率(時鐘頻率的1/6)周期性地發(fā)出正脈沖信號,因此,它還可對外部總線結(jié)構(gòu)輸出時鐘信號,或用于定時目的。但要注意,每當訪問外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。ALE端輸出可以驅(qū)動八個TTL電路。對于EPROM型單片機,在用編程器對Flash編程時,此引腳接收編程脈沖(功能)。ALE可以通過設置特殊功能寄存器8EH,使能或禁止ALE信號輸出,在禁止時,只有MOVX和MOVC指令才能使ALE有脈沖輸出,平時ALE引腳有個弱上拉。:片外程序存儲器讀選通信號輸出引腳。從外部程序存儲器中取指令(或數(shù)據(jù))期間,在每個機器周期內(nèi)兩次有效。同樣可以驅(qū)動八個TTL電路。
·
/VPP:片內(nèi)、片外程序存儲器選擇輸出/編程電壓輸入引腳。當為高電平時,訪問片內(nèi)程序存儲器(程序計數(shù)器PC值小于4KB);當為低電平時,訪問外部程序存儲器。對EPROM型單片機,在EPROM編程期間,此引腳上加12VEPROM編程電源(VPP)。(4)P0口。P0口是8位集電極開路的雙向口。P0口作為輸出口時可以驅(qū)動八個TTL電平。P0口同時可以配置成低8位的地址總線或數(shù)據(jù)總線,用于訪問外部程序或數(shù)據(jù),作為總線時P0口有內(nèi)部上拉。在對內(nèi)部Flash編程時,P0口可以用于接收數(shù)據(jù),但必須要加上拉電阻。(5)P1口。P1口是8位有內(nèi)部上拉的雙向口。P1口可以驅(qū)動四個TTL電平。另外,P1.0和P1.1可以配置成定時器/計數(shù)器2的外部計數(shù)輸入(P1.0/T2)和定時器/計數(shù)器2的觸發(fā)輸入(P1.1/T2EX),詳見表2-1。P1口也可以作為編程和驗證多功能口,詳見表2-1。表2-1
P1口的特殊功能
(6)P2口。P2口是8位有內(nèi)部上拉的雙向口。P2口可以驅(qū)動四個TTL電平。在對外部16位地址尋址(MOVX@DPTR)時,P2口可作為高8位地址。當單片機對外部8位地址尋址時(MOV@RI),P2口的輸出作為I/O口的值。P2口在對單片機內(nèi)部Flash編程時可用于接收高位地址和一些控制信號。(7)P3口。P3口是8位有內(nèi)部上拉的雙向口。P3口可以驅(qū)動四個TTL電平。在對Flash編程時,P3口可以作為控制線。當作第二功能使用時,每一個功能的定義如表2-2所示。表2-2
P3口的第二功能
2.1.2外部總線
由于單片機本身硬件資源有限,因此在比較復雜的應用場合,其內(nèi)部資源(如存儲器、I/O口或中斷源等)往往顯得不足,甚至相差很遠,這就需要進行外部擴展。為滿足系統(tǒng)擴展要求,MCS-51單片機系統(tǒng)采用三總線結(jié)構(gòu),通過三總線和外部設備相連。三總線分別為地址總線、數(shù)據(jù)總線和控制總線。(1)地址總線(AB):寬度為16位,對外接存儲器可直接尋址范圍為64KB。16位地址的高8位由P2口直接輸出(A15~A8),P0口輸出低8位地址(A7~A0),在允許地址鎖存信號ALE作用下,將該低8位地址鎖存到外部地址鎖存器中,從而讓P0口為接收數(shù)據(jù)做準備。P0口是地址/數(shù)據(jù)共用端口。(2)數(shù)據(jù)總線(DB):寬度為8位,由P0口提供(D7~D0)。(3)控制總線(CB):由上述四條控制線、ALE、、RESET和P3口的第二功能狀態(tài)組成。
MCS-51單片機系統(tǒng)的三總線結(jié)構(gòu)框圖如圖2-1(b)所示。可見,MCS-51單片機產(chǎn)生的地址、數(shù)據(jù)和控制信號通過三總線與外部存儲器和并行I/O接口芯片的連接簡單、方便。2.2
AT89S52單片機的內(nèi)部組成2.2.1基本組成模塊
AT89S52單片機在一塊芯片中集成了CPU、RAM、ROM、定時器/計數(shù)器、看門狗和多種功能的I/O口設備等,相當于一臺計算機所需要的基本功能部件。AT89S52單片機內(nèi)包含的具體部件如下:
(1)一個8位CPU。
(2)一個片內(nèi)振蕩器及時鐘電路。
(3)8KBFlash程序存儲器。
(4)256BRAM數(shù)據(jù)存儲器。
(5)三個16位定時器/計數(shù)器。
(6)可尋址64KB的外部數(shù)據(jù)存儲器和64KB的外部程序存儲器空間的控制電路。
(7)32條可編程的I/O線(4組8位并行I/O端口)。
(8)一個可編程全雙工串行接口。
(9)八個中斷源、兩個優(yōu)先級嵌套中斷結(jié)構(gòu)。
AT89S52單片機的框圖如圖2-2所示,各功能部件由內(nèi)部總線連接在一起。圖2-2AT89S52單片機框圖2.2.2內(nèi)部原理圖圖2-3是AT89S52內(nèi)部原理圖。下面各節(jié)將對原理圖中各個部分分別作一介紹。圖2-3AT89S52內(nèi)部結(jié)構(gòu)框圖2.3
CPU及復位電路2.3.1CPU
CPU是單片機的核心部件,它由運算器和控制器等部件組成。1.運算器運算器的功能是進行算術(shù)運算和邏輯運算。它可以對半字節(jié)(4位)、單字節(jié)等數(shù)據(jù)進行操作。例如能完成加、減、乘、除、加1、減1、BCD碼和十進制轉(zhuǎn)換、比較等算術(shù)運算以及與、或、異或、求補、循環(huán)等邏輯操作,操作結(jié)果的狀態(tài)信息送至狀態(tài)寄存器。運算器還包含一個布爾處理器,用來處理位操作。它是以進位標志位C為累加器的,可執(zhí)行置位、復位、取反、等于1轉(zhuǎn)移、等于0轉(zhuǎn)移、清0以及進位標志位與其他可尋址的位之間進行數(shù)據(jù)傳送等位操作。它還能使進位標志位與其他可位尋址的位之間進行邏輯與、或操作。
2.程序計數(shù)器(PC)程序計數(shù)器用來存放即將要執(zhí)行的指令的地址,共16位,可對64KB程序存儲器直接尋址。執(zhí)行指令時,PC的低8位經(jīng)P0口輸出,高8位經(jīng)P2口輸出。
3.指令寄存器指令寄存器中存放指令代碼。CPU執(zhí)行指令時,由程序存儲器中讀取的指令代碼被送入指令寄存器,經(jīng)譯碼器譯碼后由時鐘和控制電路產(chǎn)生相應的控制信號,完成指令功能。
4.時鐘和控制電路
1)時鐘電路
8051片內(nèi)有一個由反相放大器所構(gòu)成的振蕩電路,XTAL1和XTAL2分別為振蕩電路的輸入端和輸出端。時鐘可以由內(nèi)部方式產(chǎn)生或外部方式產(chǎn)生。內(nèi)部方式時鐘電路如圖2-4(a)所示。在XTAL1和XTAL2引腳上外接定時元件,內(nèi)部振蕩電路就產(chǎn)生自激振蕩。定時元件通常采用石英晶體和電容組成的并聯(lián)諧振回路。晶振頻率可以在0~33MHz之間選擇,電容值在15~30pF之間選擇。電容可起頻率微調(diào)作用。外部方式的時鐘電路如圖2-4(b)所示,XTAL1接地,XTAL2接外部振蕩器。一般要求輸入方波信號的頻率低于33MHz。圖2-4時鐘電路(a)內(nèi)部方式時鐘電路;(b)外部方式時鐘電路
2)時序
MCS-51典型的指令周期(執(zhí)行一條指令的時間稱為指令周期)為一個機器周期,一個機器周期由6個狀態(tài)(12個振蕩周期)組成。每個狀態(tài)又被分成兩個時相P1和P2。所以,一個機器周期可以依次表示為S1P1
,S1P2……S6P1
,S6P2
。通常,算術(shù)邏輯操作在P1時相進行,而內(nèi)部寄存器傳送在P2時相進行。圖2-5給出了8051系列單片機的取指和執(zhí)行指令的定時關系。這些內(nèi)部時鐘信號不能從外部觀察到,所以用XTAL2振蕩信號作參考。由圖中可看出,低8位地址的鎖存信號ALE在每個機器周期中兩次有效:一次在S1P2與S2P1期間,另一次在S4P2與S5P1期間。對于單周期指令,當操作碼被送入指令寄存器時,便從S1P2開始執(zhí)行指令。如果是雙字節(jié)單機器周期指令,則在同一機器周期的S4期間讀入第二個字節(jié);若是單字節(jié)單機器周期指令,則在S4期間仍進行讀,但所讀的這個字節(jié)操作碼被忽略,程序計數(shù)器也不加1。在S6P2結(jié)束時完成指令操作。圖2-5(a)和(b)給出了單字節(jié)單機器周期和雙字節(jié)單機器周期指令的時序。
8051的指令大部分能在一個機器周期內(nèi)執(zhí)行完。乘(MUL)和除(DIV)指令是僅有的需要兩個以上機器周期的指令,它們占用四個機器周期。對于雙字節(jié)單機器周期指令,通常是在一個機器周期內(nèi)從程序存儲器中讀入兩個字節(jié),惟有MOVX指令例外。MOVX是訪問外部數(shù)據(jù)存儲器的單字節(jié)雙機器周期指令。在執(zhí)行MOVX指令期間,外部數(shù)據(jù)存儲器被訪問且被選通時跳過兩次取指操作。圖2-5中(c)和(d)給出了一般單字節(jié)雙機器周期指令的時序。圖2-58051的取指/執(zhí)行時序
(a)單字節(jié)單機器周期指令(例:INCA);
(b)雙字節(jié)單機器周期指令(例:ADDA*DATA);
(c)單字節(jié)雙機器周期指令(例:INCDPTR);
(d)MOVX指令(單字節(jié)雙機器周期)
2.3.2復位和復位電路
MCS-51單片機的復位電路如圖2-6所示。在RESET(圖中表示為RST)輸入端出現(xiàn)高電平時實現(xiàn)復位和初始化。在振蕩器運行的情況下,要實現(xiàn)復位操作,必須使RST引腳至少保持兩個機器周期(24個振蕩器周期)的高電平。CPU在第二個機器周期內(nèi)執(zhí)行內(nèi)部復位操作,以后每一個機器周期重復一次,直至RST端電平變低。復位期間不產(chǎn)生ALE及信號。內(nèi)部復位操作使堆棧指示器SP為07H,各端口都為1(P0~P3口的內(nèi)容均為0FFH),特殊功能寄存器都復位為0,但不影響RAM的狀態(tài)。當RST引腳返回低電平以后,CPU從0地址開始執(zhí)行程序。復位后,各內(nèi)部寄存器狀態(tài)見表2-3。圖2-6(a)所示為上電自動復位電路。上電瞬間,RST端的電位與VCC相同,隨著RC電路充電電流的減小,RST端的電位逐漸下降。只要RST端保持10ms以上的高電平就能使MCS-51單片機有效的復位。復位電路中的RC參數(shù)通常由實驗調(diào)整。當振蕩頻率選用6MHz時,電容C選22μF、電阻R選1kΩ便能可靠地實現(xiàn)自動復位。若采用RC電路接施密特電路的輸入端,施密特電路輸出接MCS-51復位電路和外圍電路的復位端,即可實現(xiàn)系統(tǒng)同步復位。圖2-6(b)中,開關S通常是輕觸開關,可實現(xiàn)手動復位。圖2-6復位電路a)上電自動復位電路;(b)開關復位電路表2-3內(nèi)部寄存器初始狀態(tài)
2.4
I/O端口
MCS-51單片機設有四組8位雙向I/O端口(P0、P1、P2、P3),每一條I/O線都能獨立地用做輸入或輸出。P0口為三態(tài)雙向口,能驅(qū)動八個TTL電路。P1、P2、P3口為準雙向口(在用做輸入線時,口鎖存器必須先寫入“1”,故稱為準雙向口),負載能力為四個TTL電路。2.4.1端口功能
1.P0口
P0口可以作為輸入/輸出口,但在實際應用中通常作為地址/數(shù)據(jù)總線口,即低8位地址線與數(shù)據(jù)線分時使用P0口。低8位地址由ALE信號的下降沿使它鎖存到外部地址鎖存器中,而高8位地址由P2口輸出。
2.P1口
P1口每一位都能作為可編程的輸入或輸出線。
3.P2口
P2口可以作為輸入口或輸出口使用。外接I/O設備時,又可作為擴展系統(tǒng)的地址總線,輸出高8位地址,與P0口一起組成16位地址總線。
4.P3口
P3口為雙功能口。作為第一功能使用時,其功能同P1口,為普通I/O口。當作為第二功能使用時,每一個功能的定義如表2-2所示。2.4.2端口操作
在討論端口的操作前,先要了解一下端口的結(jié)構(gòu),因為四個端口的功能有所不同,它們的電路結(jié)構(gòu)也不完全一樣,但工作原理基本相似。圖2-7所示為四個端口每一個典型位的功能圖解。圖2-7端口鎖存器和緩沖器(a)P0口位結(jié)構(gòu);(b)P1口位結(jié)構(gòu);(c)P2口位結(jié)構(gòu);(d)P3口位結(jié)構(gòu)1.P0口
P0口是一個8位漏極開路型雙向I/O口。圖2-7(a)是P0口中的1位結(jié)構(gòu)圖,其中包含一個輸出鎖存器、兩個三態(tài)緩沖器、一個輸出驅(qū)動電路和一個輸出控制電路。輸出驅(qū)動電路由兩個場效應管V1和V2組成,其工作狀態(tài)受輸出控制電路的控制??刂齐娐钒ㄒ粋€與門、一個反相器和模擬轉(zhuǎn)換開關MUX。模擬開關的位置由來自CPU的控制信號決定,當控制信號為低電平時,它把輸出級與鎖存器的端接通。同時,因為與門輸出為低電平,輸出級中的場效應管V1處于截止狀態(tài),所以輸出級是漏極開路的開漏電路。這種情況時,P0口可用做一般的I/O線。其輸出和輸入操作如下:
·當CPU向端口輸出數(shù)據(jù)時,寫脈沖加在觸發(fā)器的時鐘端CLR上,此時與內(nèi)部總線相連的D端的數(shù)據(jù)經(jīng)反相后出現(xiàn)在端上,再經(jīng)V2管反相,于是在P0口這一位引腳上出現(xiàn)的數(shù)據(jù)正好是內(nèi)部總線上的數(shù)據(jù)(當P0口作輸出口使用時,輸出級屬開漏電路,在驅(qū)動NMOS電路時應外接上拉電阻)。
·當輸入操作時,端口中的兩個三態(tài)緩沖器用于讀操作。圖2-7(a)中,緩沖器N2用于讀端口引腳的數(shù)據(jù)。當執(zhí)行一般的端口輸入指令時,讀脈沖把三態(tài)緩沖器打開,于是端口上的數(shù)據(jù)將經(jīng)過緩沖器輸送到內(nèi)部總線。緩沖器N1用于讀取鎖存器中Q端的數(shù)據(jù)。輸入操作時,Q端的數(shù)據(jù)實際上與引腳處的數(shù)據(jù)是一致的,結(jié)構(gòu)上的這種安排是為了適應“讀—修改—寫”這類指令的需要。這類指令的特點是:先讀端口,隨之可以對讀入的數(shù)據(jù)進行修改,然后再寫到端口上。例如,邏輯與指令(ANLP0,A),此指令的功能是先把P0口數(shù)據(jù)讀入CPU,隨后同累加器A中的數(shù)據(jù)按位進行邏輯與操作(即對讀入的數(shù)據(jù)做修改),最后再把結(jié)果寫回P0口。對于“讀—修改—寫”這類指令,不直接讀引腳上的數(shù)據(jù)而讀鎖存器Q端上的數(shù)據(jù)是為了避免錯讀引腳上的電平信號。例如,用一條口線去驅(qū)動一個晶體管的基極,當向此口線寫1時,晶體管導通并把引腳上的電平拉低。這時,若從引腳讀取數(shù)據(jù),就把該數(shù)錯讀為0(實際上應是1),而從鎖存器Q端輸入,則能得到正確的結(jié)果。由圖2-7(a)可知,當讀引腳操作(輸入)時,引腳上的外部信號既加在三態(tài)緩沖器N2的輸入端上,又加在輸出級場效應管(V2)的漏極上,若此時V2是導通的(例如曾輸出數(shù)據(jù)0),因而引腳上的電位被鉗在0電平上。為使引腳上輸入的邏輯電平能正確地讀入,在輸入數(shù)據(jù)時,要先向鎖存器寫1,使其端為0,使輸出級V1和V2兩個管子均被截止,引腳處于懸浮狀態(tài),為高阻抗輸入。因此,作為一般的I/O口使用時,P0口也是一個準雙向口。當P0口作為地址/數(shù)據(jù)總線分時使用時,這時控制信號為高電平,轉(zhuǎn)換開關MUX把反相器輸出端與V2接通,同時把與門開鎖。輸出的地址或數(shù)據(jù)信號通過與門驅(qū)動V1管,同時通過反相器驅(qū)動V2管,完成信息傳送。
2.P1口
P1口是一個帶有內(nèi)部上拉電阻的8位準雙向口,做通用的I/O口使用。P1口的結(jié)構(gòu)如圖2-7(b)所示,在輸出驅(qū)動部分接有內(nèi)部上拉電阻。當用做輸出線時,將1寫入鎖存器,使輸出驅(qū)動器V管截止,輸出線由內(nèi)部上拉電阻拉成高電平(輸出1)。將0寫入鎖存器時,V導通,輸出為0。P1口作為輸入線時,必須先將1寫入鎖存器,使V截止,把該口線由內(nèi)部上拉電阻拉成高電平。于是,當內(nèi)部總線輸入為高電平信號時,該口線為1,當內(nèi)部總線輸入為低電平信號時,該口線為0,從而使輸入端的電平隨輸入信號而變,讀入正確的數(shù)據(jù)信息。P1口作為輸入時,可被任何TTL電路和MOS電路所驅(qū)動。由于具有內(nèi)部上拉電阻,因此也可以直接被集電極開路或漏極開路的電路驅(qū)動而不必外加上拉電阻。
CPU讀P1口有兩種情況:讀引腳和讀鎖存器狀態(tài)。讀引腳時,打開三態(tài)門N2,讀入引腳上的輸入狀態(tài)(如MOVA,P1指令);讀鎖存器狀態(tài)時,打開三態(tài)門N1,與P0口的I/O功能一樣,P1口可以進行“讀—修改—寫”操作。
3.P2口
P2口為一個帶有內(nèi)部上拉電阻的8位準雙向口,每位的結(jié)構(gòu)如圖2-7(c)所示。P2口可以作為通用的I/O口使用,外接I/O設備。P2口也可以作為擴展系統(tǒng)時的地址總線口(輸出高8位地址)使用,這由控制信號控制轉(zhuǎn)換開關來實現(xiàn)。當轉(zhuǎn)換開關(MUX)倒向左邊時,P2口作通用的I/O口使用,作用和P1口相同。當作為地址總線口使用時,MUX在CPU的控制下將地址線與反相器接通,從而在P2口的引腳上輸出地址(A15~A8)。P2口的地址信息來源于PCH和DPH。
4.P3口
P3口是一個帶有內(nèi)部上拉電阻的8位準雙向I/O口,且是一個雙功能口。P3口的每一位的結(jié)構(gòu)如圖2-7(d)所示。當它作為第一功能口(通用的I/O口)使用時,工作原理與P1口和P2口類似,但第二輸出功能線保持為高電平,使與非門N3對鎖存器輸出(Q端)暢通(與非門N3的輸出只取決于Q狀態(tài))。當P3口作為第二功能使用時,相應位的鎖存器必須為“1”狀態(tài),使與非門N3的輸出電平由第二輸出功能線的狀態(tài)來確定,或使此口線允許輸入第二功能信號。對于P3口,不管是作通用輸入口還是作第二功能輸入口,相應位的鎖存器和第二輸出功能端都必須為1。在P3口的引腳信號輸入通道中有兩個緩沖器N2和N4,第二輸入功能信號取自緩沖器N4的輸出端,通用輸入信號取自緩沖器N2的輸出端。
P3口的第二功能定義見表2-2。2.5存儲器
MCS-51的存儲器結(jié)構(gòu)與常見的微型計算機不同,它把程序存儲器和數(shù)據(jù)存儲器分開,各有自己的尋址系統(tǒng)、控制信號和功能。程序存儲器用來存放程序和始終要保留的常數(shù)。數(shù)據(jù)存儲器通常用來存放程序運行中所需要的常數(shù)或變量。從物理地址空間看,MCS-51有四個存儲器地址空間,即片內(nèi)程序存儲器、片外程序存儲器、片內(nèi)數(shù)據(jù)存儲器和片外數(shù)據(jù)存儲器。MCS-51的存儲器結(jié)構(gòu)如圖2-8所示。圖2-8
8051存儲器
2.5.1程序存儲器程序存儲器是用來存放已調(diào)試好的固定程序和表格常數(shù)的。單片機中內(nèi)含的程序存儲器主要有只讀存儲器(ROM)、紫外線擦除電可編程只讀存儲器(EPROM)和閃速存儲器(FlashROM)。Flash存儲器是一種電擦寫的程序存儲器,寫入的內(nèi)容不易丟失,編程和擦除的速度快,可在線編程,也可通過常規(guī)的編程器編程,與MCS-51單片機系列完全兼容,且具有容量大、功耗低、價格便宜的特點,還具有超強的加密功能。AT89S52內(nèi)部有8KB的Flash存儲器。程序存儲器是以程序計數(shù)器(PC)作地址指針的,MCS-
51系列單片機有16位地址總線,故可尋址的地址空間為64KB。AT89S52中駐留有地址空間的8KBFlash程序存儲器(內(nèi)部程序存儲器),而在8031片內(nèi),則無內(nèi)部程序存儲器,需外部擴展EPROM。
MCS-51單片機中,64KB程序存儲器的地址空間是統(tǒng)一的。對于有內(nèi)部ROM的單片機,在正常運行時,應把引腳接高電平,使程序從內(nèi)部ROM開始執(zhí)行,當PC值超出內(nèi)部ROM的容量時,會自動轉(zhuǎn)向外部程序存儲器空間。因此,始終接低電平時,則系統(tǒng)只從外部程序存儲器中取指令。注意:MCS-51單片機復位后程序計數(shù)器(PC)的內(nèi)容為0000H,因此系統(tǒng)從0000H單元開始取指并執(zhí)行程序,它是系統(tǒng)執(zhí)行程序的起始地址。通常在該單元中存放一條跳轉(zhuǎn)指令,而用戶程序從跳轉(zhuǎn)地址開始存放。2.5.2內(nèi)部數(shù)據(jù)存儲器
MCS-51單片機的數(shù)據(jù)存儲器無論在物理上或邏輯上都分為兩個地址空間:一個為內(nèi)部數(shù)據(jù)存儲器,訪問內(nèi)部數(shù)據(jù)存儲器用MOV指令;另一個為外部數(shù)據(jù)存儲器,訪問外部數(shù)據(jù)存儲器用MOVX指令。內(nèi)部數(shù)據(jù)存儲器是最靈活的地址空間,它分成物理上獨立的且性質(zhì)不同的幾個區(qū):
·00H~7FH(0~127)單元組成的低128B地址空間的RAM區(qū);
·80H~FFH(128~255)單元組成的高128B的RAM區(qū)(僅在8032/8052單片機中有這一區(qū),AT89S52屬于這個區(qū));
·128B地址空間的專用功能寄存器(又稱特殊功能寄存器)區(qū)。在8051單片機中,只有低128B的RAM區(qū)和128B的專用功能寄存器區(qū)。兩區(qū)地址空間是相連的。專用功能寄存器(SFR)地址空間為80H~FFH。注意:128B的SFR區(qū)中只有26B是有定義的,若訪問的是這一區(qū)中沒有定義的單元,則得到的是一個隨機數(shù)。內(nèi)部RAM區(qū)中不同的地址區(qū)域的功能結(jié)構(gòu)如圖2-9所示。其中,00H~1FH(0~31)共32個單元是四個通用工作寄存器區(qū),每一個區(qū)有八個工作寄存器,編號為R0~R7,如表2-4所示。每一區(qū)中的R0~R7地址見表2-5。圖2-9MCS-51內(nèi)部RAM存儲器結(jié)構(gòu)表2-4寄存器和RAM地址對照表
表2-5
工作寄存器區(qū)選擇
當前程序使用的工作寄存器區(qū)是由程序狀態(tài)字PSW(特殊功能寄存器,字節(jié)地址為D0H)中的D4、D3位(RS1和RS0)來指示的,PSW的狀態(tài)和工作寄存器區(qū)對應關系見表2-4。
CPU通過對PSW中的D4、D3位內(nèi)容的修改,就能任選一個工作寄存器區(qū)。這個特點使MCS-51具有快速現(xiàn)場保護功能。如果用戶程序不需要4個工作寄存器區(qū),則不用的工作寄存器區(qū)單元可以作一般的RAM使用。在一個實際的程序中,往往需要一個后進先出的RAM區(qū),以保持CPU的現(xiàn)場,這種后進先出的緩沖器區(qū)稱為堆棧(堆棧的用途詳見指令系統(tǒng)分析和中斷的內(nèi)容)。MCS-51的堆棧原則上可以設在內(nèi)部RAM的任意區(qū)域內(nèi),但一般設在30H~7FH的范圍內(nèi)。棧頂?shù)奈恢糜蓷V羔楽P指出。
2.5.3外部數(shù)據(jù)存儲器
MCS-51具有擴展64KB的外部數(shù)據(jù)存儲器和I/O口的能力,這對很多應用領域已足夠使用。對外部數(shù)據(jù)存儲器的訪問采用MOVX指令,用間接尋址方式,R0、R1和DPTR都可作為間址寄存器使用。2.6專用功能寄存器
MCS-51單片機內(nèi)的鎖存器、定時器、串行接口數(shù)據(jù)緩沖器以及各種控制寄存器和狀態(tài)寄存器都是以專用功能寄存器(或稱特殊功能寄存器)的形式出現(xiàn)的,它們分散地分布在內(nèi)部RAM地址空間范圍(80H~FFH)內(nèi)。表2-6列出了這些專用功能寄存器(SFR)的助記標識符和地址,其中大部分寄存器的應用將在后面詳述,這里僅作簡單介紹。表2-
7是其功能的簡要說明。表2-6專用功能寄存器(除PC外)和復位
表2-7
專用功能寄存器(除PC外)
2.6.1累加器(ACC)
累加器是一個最常用的專用寄存器。大部分單操作數(shù)指令的操作取自累加器,很多雙操作數(shù)指令的一個操作數(shù)也取自累加器。加、減、乘、除算術(shù)運算指令的運算結(jié)果都存放在累加器A或A、B寄存器對中。指令系統(tǒng)中用A作為累加器的助記符。
2.6.2B寄存器(B)
在乘、除指令中,用到了B寄存器,乘法指令的兩個操作數(shù)分別取自A寄存器和B寄存器,其結(jié)果存放在A、B寄存器對中;除法指令中,被除數(shù)取自A寄存器,除數(shù)取自B寄存器,商數(shù)存放于A寄存器,余數(shù)存放于B寄存器。在其他指令中,B寄存器可作為RAM中的一個單元來使用。2.6.3程序狀態(tài)字(PSW)
程序狀態(tài)字是一個8位寄存器,它包含了程序狀態(tài)信息。此寄存器的結(jié)構(gòu)如下:其中PSW.1未用。其他各位說明如下:
·CY(PSW.7):進位標志。此位在執(zhí)行某些算術(shù)和邏輯指令時,可以被硬件或軟件置位或清0。在布爾處理機中它被認為是位累加器,其重要性相當于一般中央處理機中的累加器A。
·AC(PSW.6):輔助進位標志。當進行加法或減法操作而產(chǎn)生由低4位數(shù)(一位十進制)向高4位數(shù)進位或借位時,AC位將被硬件置位,否則就被清0。AC被用于十進制轉(zhuǎn)換,詳見DAA指令。
F0(PSW.5):用戶定義的一個狀態(tài)標志位。此標志位可以用軟件來置位或清0,也可以用軟件測試F0以控制程序的流向。
·RS1、RS0(PSW.4,PSW.3):寄存器區(qū)選擇控制位。此兩位可以用軟件來置位或清0,以確定工作寄存器區(qū)。RS1、RS0與寄存器區(qū)的對應關系如下:
RS1
RS0
區(qū)域
0
0區(qū)0(00H~07H)
0
1區(qū)1(08H~0FH)
1
0區(qū)2(10H~17H)
1
1區(qū)3(18H~1FH)
·OV(PSW.2):溢出標志。當執(zhí)行算術(shù)指令時,此位由硬件置位或清0,以指示溢出狀態(tài)。當執(zhí)行加法指令ADD時,若用C6表示d6位向d7位有進位而用C7表示d7位向CY位有進位,則有:
OV=C6
C7
即當d6向d7進位而d7不向CY進位時,或d6不向d7進位而d7向CY進位時,溢出標志OV置位,否則清0。同樣,在執(zhí)行減法指令SUBB時,C6和C7表示有借位。因此,溢出標志在硬件上可以用一個異或門實現(xiàn)。溢出標志常用于用ADD和SUBB指令對帶符號數(shù)做加、減運算時,OV=1表示加、減運算的結(jié)果超出了目的寄存器A所能表示的帶符號數(shù)(2的補碼)的范圍(-128~+127),具體參見第3章中關于ADD和SUBB指令的說明。在MCS-51中,無符號數(shù)乘法指令MUL的執(zhí)行結(jié)果也會影響溢出標志。若置于累加器A和寄存器B的兩個數(shù)的乘積超過255,則OV=1,否則OV=0。乘積的高8位放在B內(nèi),低8位放在A內(nèi)。因此,OV=0意味著從A中取得乘積即可,否則要從A、B寄存器對中取得乘積。除法指令DIV也會影響溢出標志。當除數(shù)為0時,OV=1,否則OV=0。
·P(PSW.0):奇偶標志。此標志每個指令周期都由硬件來置位或清0,表示累加器A中為1的位數(shù)的奇偶數(shù),若1的位數(shù)為奇數(shù),則P置位,否則清0。
此標志位對串行通信中的數(shù)據(jù)傳輸有重要的意義。在串行通信中常用奇偶校驗的辦法來檢驗數(shù)據(jù)傳輸?shù)目煽啃?。在發(fā)送端可根據(jù)P的值對數(shù)據(jù)的奇偶位置位或清0。若通信協(xié)議中規(guī)定采用奇校驗的辦法,則P=0時,應對數(shù)據(jù)(假定由A取得)的奇偶位置位,否則就清0。2.6.4堆棧指針(SP)堆棧指針SP是一個8位專用寄存器。它指示出堆棧頂部在內(nèi)部RAM中的位置。系統(tǒng)復位后,SP初始化為07H,使得堆棧事實上由08H單元開始。考慮到08H~1FH單元分別屬于工作寄存器區(qū)1~3,若程序設計中要用到這些區(qū),則最好把SP值設置為1FH或更大的值。SP的初始值越小,堆棧深度就可以越深。堆棧指針的值可以由軟件改變,因此堆棧在內(nèi)部RAM中的位置比較靈活。除用軟件直接改變SP值外,在執(zhí)行PUSH和POP指令、各種子程序調(diào)用、中斷響應、子程序返回(RET)和中斷返回(RETI)等指令時,SP值將自動增量或減量。2.6.5數(shù)據(jù)指針(DPTR)數(shù)據(jù)指針DPTR是一個16位專用寄存器,其高位字節(jié)寄存器用DPH表示,低位字節(jié)寄存器用DPL表示,既可以作為一個16位寄存器DPTR來處理,也可以作為兩個獨立的8位寄存器DPH和DPL來處理。
DPTR主要用來存放16位地址,當對64KB外部數(shù)據(jù)存儲器空間尋址時,可以作為間接地址寄存器用,相關的指令有:
MOVXA,@DPTR
MOVX@DPTR,A在訪問程序存儲器時,DPTR可以用作基址寄存器,有一條采用基址+變址尋址方式的指令:
MOVXA,@A+DPTR此指令常用于讀取存放在程序寄存器內(nèi)的表格常數(shù)。為了方便地同時訪問內(nèi)部和外部數(shù)據(jù),在AT89S52中,DPTR由兩個寄存器組成:DPTR0和DPTR1,通過設置AUXR1寄存器選擇數(shù)據(jù)指針0或數(shù)字指針1為當前數(shù)據(jù)指針。見2.6.9節(jié)AUXR1寄存器說明。2.6.6端口P0~P3專用寄存器P0、P1、P2和P3分別是I/O端口P0~P3的鎖存器。P0~P3作為專用寄存器還可以以直接尋址方式用于其他操作指令。關于端口的詳細操作見2.4.2節(jié)。2.6.7串行數(shù)據(jù)緩沖器(SBUF)
串行數(shù)據(jù)緩沖器SBUF用于存放發(fā)送或已接收的數(shù)據(jù),它實際上由兩個獨立的寄存器組成,一個是發(fā)送緩沖器,另一個是接收緩沖器。當要發(fā)送的數(shù)據(jù)傳送到SBUF時,用的是發(fā)送緩沖區(qū);當要從SBUF讀數(shù)據(jù)時,則取自接收緩沖器,取走的是剛接收到的數(shù)據(jù)。(關于串口詳細操作詳見2.9節(jié))2.6.8定時器/計數(shù)器(T0、T1、T2)
AT89S52系統(tǒng)中有三個16位定時器/計數(shù)器,分別為T0、T1和T2。它們各由兩個獨立的8位寄存器組成,共有六個獨立的寄存器:TH0、TL0、TH1、TL1、TH2、TL2??梢詫@六個寄存器尋址,但不能把T0、T1當作一個16位寄存器來尋址。2.6.9輔助寄存器輔助寄存器由兩個寄存器組成:AUXR和AUXR1。AUXR地址為8EH,對應結(jié)構(gòu)如下:其中,“-”表示為保留位。
AUXR寄存器各位的含義如下:
·DISALE:禁止/使能ALE信號。為0時,ALE引腳輸出時鐘信號,頻率為1/6時鐘信號頻率;為1時,ALE引腳被屏蔽,只有當執(zhí)行指令MOVX或MOVC時才有輸出。
·DISRTO:禁止/使能復位(RESET)信號輸出。為0時,復位引腳在復位時輸出高電平;為1時,復位引腳只作為輸入引腳使用。
·WDIDLE:在空閑模式下禁止/使能看門狗定時器(WDT)。為0時,WDT在空閑模式下繼續(xù)計數(shù);為1時,WDT在空閑模式下停止計數(shù)。
AUXR1地址為A2H,對應結(jié)構(gòu)如下:其中,DPS為數(shù)據(jù)指針寄存器選擇位,為0時,選擇DP0L和DP0H為數(shù)據(jù)指針;為1時,選擇DP1L和DP1H為數(shù)據(jù)指針。2.6.10其他控制寄存器
IP、IE、TMOD、TCON、T2CON、T2MOD、RCAP2H、RCAP2L、WDTRST和PCON等寄存器分別包含有中斷系統(tǒng)、定時器/計數(shù)器、串行接口和供電方式的控制位和狀態(tài)位,這些寄存器將在本章的有關節(jié)中敘述。2.7中斷系統(tǒng)在CPU與外設交換信息時,存在著一個快速的CPU與慢速的外設間的矛盾。為解決這個問題,提出了中斷的概念。良好的中斷系統(tǒng)能提高計算機實時處理能力,實現(xiàn)CPU與外設分時操作和自動處理故障,從而擴大計算機的應用范圍。當CPU正在處理某項事務的時候,如果外界或內(nèi)部發(fā)生了緊急事件,要求CPU暫停正在處理的工作而轉(zhuǎn)去處理這個緊急事件,待處理完以后再回到原來被中斷的地方,繼續(xù)執(zhí)行原來被中斷的程序,這樣的過程稱為中斷。向CPU提出中斷請求的源為中斷源。微型計算機一般允許有多個中斷源。當幾個中斷源同時向CPU發(fā)出請求時,CPU應優(yōu)先響應最需要緊急處理的中斷請求。為此,需要規(guī)定各個中斷源的優(yōu)先級,使CPU在多個中斷源同時發(fā)出中斷請求時能找到優(yōu)先級高的中斷源,響應它的中斷請求。在CPU正在處理一個優(yōu)先級低的中斷請求的時候,如果發(fā)生另一個優(yōu)先級比它高的中斷請求,CPU能暫停正在處理的中斷源的處理程序,轉(zhuǎn)去處理優(yōu)先級高的中斷請求,待處理完以后,再回到原來正在處理的低優(yōu)先級中斷程序,這種高級中斷源能中斷低中斷源的處理稱為中斷嵌套。
MCS-52系列單片機允許有6個中斷源,提供兩個中斷優(yōu)先級(能實現(xiàn)二級中斷嵌套)。每個中斷源的優(yōu)先級的高低都可以通過編程來設定。中斷源的中斷請求是否能得到響應,受中斷寄存器IE控制;各個中斷源的優(yōu)先級可以由中斷優(yōu)先級寄存器IP中的各位來確定;同一優(yōu)先級中的各中斷源同時請求中斷時,由內(nèi)部的查詢邏輯來確定響應的次序。2.7.1中斷請求源
1.中斷源AT89S52中斷系統(tǒng)可用圖2-10來表示。6個中斷源分別為:
·:來自P3.2引腳上的外部中斷請求(外部中斷0)。
·:來自P3.3引腳上的外部中斷請求(外部中斷1)。
T0:片內(nèi)定時器/計數(shù)器0溢出(TF0)中斷請求。
T1:片內(nèi)定時器/計數(shù)器1溢出(TF1)中斷請求。串行接口:片內(nèi)串行接口完成一幀發(fā)送或接收中斷請求源TI或RI。圖2-10AT89S52中斷系統(tǒng)
·定時器T2:片內(nèi)定時器/計數(shù)器1溢出(TF2)中斷請求。每個中斷源都有一個對應中斷請求標志位,它們設置在特殊功能寄存器TCON和SCON中。當這些中斷源請求中斷時,分別由TCON和SCON中的相應位來鎖存。2.TCON寄存器
TCON是定時器/計數(shù)器0和1(T0和T1)的控制寄存器,它同時也用來鎖存T0、T1的溢出中斷請求源和外部中斷請求源。TCON寄存器中與中斷有關的位結(jié)構(gòu)如下所示:
TCON寄存器各位的具體含義如下:
TF1:定時器/計數(shù)器1(T1)的溢出中斷標志。當T1從初值開始加1計數(shù)到產(chǎn)生溢出時,由硬件使TF1置1,直到CPU響應中斷時由硬件復位。
TF0:定時器/計數(shù)器0(T0)的溢出中斷標志。其作用同TF1。
IE1:外部中斷1中斷請求標志。如果IT1=1,則當上的電平由1變0時,IE由硬件置位,外部中斷1請求中斷。在CPU響應該中斷時由硬件清0。IT1:外部中斷1()觸發(fā)方式控制位。如果IT1為1,則外部中斷1為跳變觸發(fā)方式(CPU在每個機器周期的S5P2采樣(P3.3)的電平,如果在前一個周期中采樣到高電平,在下一個周期中采樣到低電平,則硬件使IE1置1,向CPU請求中斷);如果IT1為0,則外中斷1為電平觸發(fā)方式,此時外部中斷是通過檢測端的輸入電平(低電平)來觸發(fā)的。采用電平觸發(fā)方式時,輸入到的外部中斷源必須保持低電平有效,直到該中斷得到響應,同時在中斷返回前必須使電平變高,否則將會再次產(chǎn)生中斷。
·IE0:外部中斷0中斷請求標志。如果IT0=1,則當上的電平由1變0時,IE0由硬件置位,外部中斷0請求中斷。在CPU把控制轉(zhuǎn)到中斷服務程序時由硬件使IE0復位。
·IT0:外部中斷0觸發(fā)方式控制位。其含義同IT1。關于定時器2的內(nèi)容請詳見2.8.2。
3.SCON寄存器串行接口控制寄存器SCON中的低2位用做串行中斷標志。SCON寄存器的結(jié)構(gòu)如下:
SCON寄存器各位的含義如下:
·RI:串行接口接收中斷標志。在串行接口方式0中,每當接收到第8位數(shù)據(jù)時,就硬件置位RI;在其他方式中,當接收到停止位的中間位時置位RI。注意:當CPU轉(zhuǎn)入串行接口中斷服務程序入口時不復位RI,必須由用戶用軟件來使RI清0。
·TI:串行接口發(fā)送中斷標志。在方式0中,每當發(fā)送完8位數(shù)據(jù)時由硬件置位TI;在其他方式中,在停止位開始時置位。TI也必須由軟件來復位。2.7.2中斷控制
1.中斷允許和禁止
在MCS-51中斷系統(tǒng)中,中斷允許或禁止是由片內(nèi)的中斷允許寄存器IE(IE為特殊功能寄存器)控制的。IE寄存器的結(jié)構(gòu)如下:
IE寄存器各位的含義如下:
·EA:CPU中斷允許標志。EA=0時,CPU禁止所有中斷,即CPU屏蔽所有中斷請求;EA=1時,CPU開放中斷。每個中斷源在中斷時被允許還是禁止,還需由各自的允許位確定(見D2~D0位的說明)。
·ET2:定時器/計數(shù)器2(T2)的溢出中斷允許位。
·ET2=1時,允許T2中斷;ET2=0時,禁止中斷。
·ES:串行接口中斷允許位。ES=1時,允許串行接口中斷;ES=0時,禁止串行接口中斷。
·ET1:定時器/計數(shù)器1(T1)的溢出中斷允許位。ET1=1時,允許T1中斷;ET1=0時,禁止中斷。
EX1:外部中斷1中斷允許位。EX=1時,允許外部中斷1中斷;EX1=0時,禁止外部中斷1中斷。
ET0:定時器/計數(shù)器0(T0)的溢出中斷允許位。ET0=1時,允許T0中斷;ET0=0時,禁止T0中斷。
EX0:外部中斷0中斷允許位。EX0=1時,允許外部中斷0中斷;EX0=0時,禁止外部中斷0中斷。中斷允許寄存器中各相應位的狀態(tài)可根據(jù)要求用指令置位或清0,從而實現(xiàn)該中斷源允許中斷或禁止中斷,復位時IE存儲器被清0。
2.中斷優(yōu)先級控制
MCS-51中斷系統(tǒng)提供兩個中斷優(yōu)先級,對于每個中斷源請求都可以編程為高優(yōu)先級中斷源或低優(yōu)先級中斷源,以便實現(xiàn)二級中斷嵌套。中斷優(yōu)先級是由片內(nèi)的中斷優(yōu)先級寄存器IP(特殊功能寄存器)控制的。IP寄存器的結(jié)構(gòu)如下:
IP寄存器各位的含義如下:
·PT2:TI中斷優(yōu)先級控制位。PT2=1時,定時器/計數(shù)器2定義為高優(yōu)先級中斷源;PT2=0時,定時器/計數(shù)器2定義為低優(yōu)先級中斷源。
·PS:串行接口中斷優(yōu)先級控制位。PS=1時,串行接口定義為高優(yōu)先級中斷源;PS=0時,串行接口定義為低優(yōu)先級中斷源。
·PT1:TI中斷優(yōu)先級控制位。PT1=1時,定時器/計數(shù)器1定義為高優(yōu)先級中斷源;PT1=0時,定時器/計數(shù)器1定義為低優(yōu)先級中斷源。
·PX1:外部中斷中斷優(yōu)先級控制位。PX1=1時,外部中斷1定義為高優(yōu)先級中斷源;PX1=0時,外部中斷1定義為低優(yōu)先級中斷源。
·PT0:定時器/計數(shù)器0(T0)中斷優(yōu)先級控制位。功能同PT1。
·PX0:外部中斷0中斷控制位。功能同PX1。2.7.3中斷優(yōu)先級機構(gòu)
MCS-51中斷系統(tǒng)具有兩級優(yōu)先級(由IP寄存器把各中斷源的優(yōu)先級分為高優(yōu)先級和低優(yōu)先級),它們遵循下列兩條基本規(guī)則:(1)低優(yōu)先級中斷源可被高優(yōu)先級中斷源中斷,而高優(yōu)先級中斷源不能被任何中斷源中斷。(2)一種中斷源(不管是高優(yōu)先級還是低優(yōu)先級)一旦得到響應,與它同級的中斷源就不能再中斷它。為了實現(xiàn)上述兩條規(guī)則,中斷系統(tǒng)內(nèi)部包含兩個不可尋址的優(yōu)先級狀態(tài)觸發(fā)器。其中一個用來指示某個高優(yōu)先級的中斷源正在得到服務,并阻止所有其他中斷的響應;另一個觸發(fā)器則指出某個低優(yōu)先級的中斷源正得到服務,所有同級的中斷都被阻止,但不阻止高優(yōu)先級中斷源。當CPU同時收到幾個同一優(yōu)先級的中斷請求時,響應哪一個中斷源取決于內(nèi)部查詢順序。同級內(nèi)的中斷優(yōu)先級排列如下:2.7.4中斷響應過程
CPU在每個機器周期的S5P2時刻采樣中斷標志,而在下一個機器周期對采樣到的中斷進行查詢。如果前一個機器周期的S5P2有中斷標志,則在查詢周期內(nèi)便會查詢到并按優(yōu)先級高低進行中斷處理,中斷系統(tǒng)將控制程序轉(zhuǎn)入相應的中斷服務程序。下三個條件中的任何一個都能封鎖CPU對中斷的響應:(1)CPU正在處理同級的或高一級的中斷。(2)現(xiàn)行的機器周期不是當前所執(zhí)行指令的最后一個機器周期。(3)當前正在執(zhí)行的指令是返回(RETI)指令或是對IE或IP寄存器進行讀/寫的指令。上述三個條件中,第(2)條保證把當前指令執(zhí)行完,第(3)條保證如果在當前執(zhí)行的是RETI指令或是對IE、IP進行訪問的指令,則必須至少在執(zhí)行完一條指令之后才會響應中斷。中斷查詢在每個機器周期中重復執(zhí)行,所查詢到的狀態(tài)為前一個機器周期的S5P2時刻采樣到的中斷標志。這里要注意的是:如果中斷標志被置位,但因上述條件之一的原因而未被響應,或上述封鎖條件已撤銷,但中斷標志已不再存在(已不再是置位狀態(tài))時,被拖延的中斷就不再響應,CPU將丟棄中斷查詢的結(jié)果。也就是說,CPU對中斷標志置位后,對未能及時響應而轉(zhuǎn)入中斷服務程序的中斷標志不作記憶。
CPU響應中斷時,先置相應的優(yōu)先級以激活觸發(fā)器,同時封鎖同級和低級的中斷,然后根據(jù)中斷源的類別,在硬件的控制下,程序轉(zhuǎn)向相應的向量入口單元,執(zhí)行中斷服務程序。硬件調(diào)用中斷服務程序時,把程序計數(shù)器PC的內(nèi)容壓入堆棧(但不能自動保存程序狀態(tài)字PSW的內(nèi)容),同時把響應的中斷服務程序的入口地址裝入PC中,7個中斷服務程序(包括復位中斷)的入口地址見表2-8。表2-9是中斷標志位在各標志寄存器的位置。表2-8各中斷服務程序入口地址表
表2-9中斷標志位
通常,在中斷入口地址處安排一條跳轉(zhuǎn)指令,以跳轉(zhuǎn)到用戶的服務程序入口。中斷服務程序的最后一條指令必須是中斷返回指令RETI。CPU執(zhí)行完這條指令后,把響應中斷時所置位的優(yōu)先級激活觸發(fā)器清0,然后從堆棧中彈出兩個字節(jié)內(nèi)容(斷點地址)裝入程序計數(shù)器PC中,CPU就從原來被中斷處重新執(zhí)行被中斷的程序。2.7.5外部中斷觸發(fā)方式
MCS-51的外部中斷(和)可以用程序控制為電平觸發(fā)或跳變觸發(fā)(通過編程對定時器/計數(shù)器控制寄存器TCON中的IT0和IT1位進行清0或置1)。 若ITx(x=0,1)為0,則外部中斷為電平觸發(fā),由引腳上所檢測到的低電平(必須保持到CPU響應中斷時為止,并且還應在中斷返回前變?yōu)楦唠娖剑┯|發(fā)。若ITx=1,則外部中斷為跳變觸發(fā)。即在相續(xù)的兩個機器周期中,前一個周期從引腳上檢測到高電平,而在后一個周期間檢測到低電平,則置位TCON寄存器中的中斷請求標志IEx(IE0和IE1),由IEx發(fā)出中斷請求。 由于外部中斷引腳在每個機器周期內(nèi)都被采樣一次,因此中斷引腳上的電平應至少保持12個振蕩周期,以保證電平信號能被采樣到。對于跳變觸發(fā)方式的外部中斷,要求輸入的負脈沖寬度至少保持12個振蕩周期(若晶體頻率為6MHz,則寬度為2μs),以確保檢測到引腳上的電平跳變,而使中斷請求標志IEx置位。對于電平觸發(fā)的外部中斷源,要求在中斷返回前撤消中斷請求(使引腳上的電平變高),這是為了避免在中斷返回后又再次響應中斷而出錯。電平觸發(fā)方式適合用于外部中斷輸入為低電平,而且能在中斷服務程序中撤消外部中斷請求源的情況。2.7.6中斷響應時間
外部中斷和的電平在每個機器周期的S4P2時被采樣并鎖存在IE0和IE1中,這個置入到IE0和IE1的狀態(tài)在下一個機器周期才被查詢電路查詢。如果產(chǎn)生了一個中斷請求而且滿足響應條件,則CPU響應中斷,由硬件生成一條長調(diào)用指令轉(zhuǎn)到相應的服務程序入口。這條指令是雙機器周期指令。因此,從中斷請求有效到執(zhí)行中斷服務程序的第一條指令的時間間隔至少需要三個完整的機器周期,圖2-11給出了中斷響應的時序。圖2-11中斷響應時序如果中斷請求被前面所述的三個條件之一所封鎖,將需要更長的響應時間。若一個同級的或更高優(yōu)先級的中斷已經(jīng)在進行,則延長的等待時間顯然取決于正在處理的中斷服務程序的長度;如果正在執(zhí)行的一條指令還沒有執(zhí)行到最后一個周期,則所延長的等待時間不會超過三個機器周期,這是因為MCS-51指令系統(tǒng)中最長的指令(MUL和DIV)也只有四個機器周期;假若正在執(zhí)行的是RETI指令或者是訪問IE或IP指令,則延長的等待時間不會超過五個機器周期(為完成正在執(zhí)行的指令還需要一個周期,加上為完成下一個指令還需要的最長時間——四個周期,如MUL和DIV指令)。 因此,在只有一個中斷源的情況下,響應時間總是在三個機器周期到八個機器周期之間。2.7.7中斷的單步操作在MCS-51中斷系統(tǒng)中,允許用戶單步運行用戶程序,這樣可以使用戶很方便地調(diào)試程序。單步操作的原理是利用了中斷系統(tǒng)的特點:單片機在執(zhí)行中斷返回指令RETI后至少還要執(zhí)行一條指令才響應新的中斷。因此,一旦進入了某個中斷服務程序,在中斷返回后,至少還需要再執(zhí)行一條被中斷的程序,在這以前是不會重新進入中斷服務程序的。利用這一特點,可實現(xiàn)單步操作,方法之一是利用外部中斷引腳(例如)上的低電平實現(xiàn)單步運行。例如,設置為電平觸發(fā)方式,其中服務中斷程序由下列指令結(jié)束:
WAIT1:JNBP3.2,WAIT1;若P3.2引腳()為低電平,仍執(zhí)行本指令,即原處等待,;直到引腳變?yōu)楦唠娖?。順序?zhí)行下條指令
WAIT2:JBP3.2,WAIT2;原處等待,直到引腳變?yōu)榈碗娖?/p>
RETI ;返回如果引腳(P3.2)保持低電平,則CPU響應中斷,進入外部中斷0的服務程序。由于中斷服務程序末尾有上述三條指令,因此停留在JNB指令處,直到引腳上出現(xiàn)一個正脈沖(從低→高→低)時,程序才往下執(zhí)行。隨后執(zhí)行返回指令RETI,返回到被中斷的程序,執(zhí)行一條指令后,又再次進入外部中斷0服務程序,等待在引腳出現(xiàn)下一個正脈沖。這樣,在端每出現(xiàn)一次正脈沖,就執(zhí)行一條主程序中的指令,從而實現(xiàn)了單步操作的目的。要注意的是,這個正脈沖的高電平持續(xù)時間不應小于三個機器周期,以確保CPU能采集到高電平信號。2.7.8外部中斷擴展
MCS-51有兩個外部中斷源和,但在實際的應用系統(tǒng)中,外部中斷源請求往往比較多,需要進行中斷擴展。下面討論兩種多中斷源系統(tǒng)的設計方法。
1.定時器中斷作為外部中斷使用把MCS-51的兩個定時器/計數(shù)器(T0和T1)選擇為計數(shù)器方式,每當P3.4(T0)或P3.5(T1)引腳上發(fā)生負跳變時,T0和T1的計數(shù)器加1。利用這個特性,可以把P3.4和P3.5引腳做為外部中斷請求輸入線,而定時器的溢出中斷作為外部中斷請求標志。應用舉例如下:設T0為方式2(自動裝入常數(shù))外部計數(shù)方式,時間常數(shù)為0FFH,允許中斷,并CPU開放中斷。則其初始化中斷程序為
MOV
TMOD,#06H;數(shù)00000110B送方式寄存器
TMOD。設T0為方式2,;計數(shù)器工作方式
MOV
TL0,#0FFH;時間常數(shù)0FFH送T0的低8位
TL0和高8位TH0
MOV
TH0,#0FFH;寄存器
SETB
TR0 ;置TR0為1,啟動T0
MOV
IE,#82H;置中斷允許,即置中斷允許寄存器IE中的EA和ET0;為1當接在P3.4引腳上的外部中斷請求輸入線發(fā)生負跳變時,TL0加1溢出,TF0被置1,向CPU發(fā)出中斷請求。同時TH0的內(nèi)容自動送入TL0,使TL0恢復初始值0FFH。這樣,每當P3.4引腳上有一次負跳變時都對TF0置1,向CPU發(fā)中斷請求,P3.4引腳就相當于邊沿觸發(fā)的外部中斷請求源輸入線。同理,也可以把P3.5引腳做類似的處理。
2.中斷和查詢結(jié)合的方式中斷和查詢結(jié)合的方式是把系統(tǒng)中多個外部中斷源按它們的重要程度進行排隊,把其中最高級別的中斷源接到MCS-51的一個外部中斷源輸入端(例如接到引腳),將其余的中斷源接到P1口,同時經(jīng)過一個與門后接到另一個中斷源。中斷請求由硬件電路產(chǎn)生,而中斷源的識別由程序查詢來處理,查詢順序由中斷源的優(yōu)先級決定。圖2-12所示為五個外部中斷源的連接電路,其中設備1~設備4經(jīng)與門與連接,并連接到P1.0~P1.3。均采用電平觸發(fā)方式。設備0為最高級中斷源,單獨作為外部中斷0的輸入信號。圖2-12五個外部中斷源的連接外部中斷1的中斷服務程序如下:
INTR:PUSH
PSW;程序狀態(tài)字PSW內(nèi)容壓入堆棧保存
PUSHA;累加器A內(nèi)容壓入堆棧保存
JNBP1.0,DVT1;P1.0引腳為0,轉(zhuǎn)至設備1中斷服務程序
JNBP1.1,DVT2;P1.1引腳為0,轉(zhuǎn)至設備2中斷服務程序
JNBP1.2,DVT3;P1.2引腳為0,轉(zhuǎn)至設備3
中斷服務程序
JNBP1.3,DVT4;P1.3引腳為0,轉(zhuǎn)至設備4中斷服務程序INTR1:POPA;壓入堆棧的內(nèi)容送回A
POPPSW;恢復程序狀態(tài)字PSW的內(nèi)容
RETI;中斷返回DVT1: ;設備1中斷程序入口
AJMP
INTR1;跳轉(zhuǎn)到INTR1DVT2: ;設備2中斷程序入口
AJMPINTR2;跳轉(zhuǎn)到INTR2DVT3: ;設備3中斷程序入口
AJMPINTR3;跳轉(zhuǎn)到INTR3DVT4: ;設備4中斷程序入口
AJMPINTR4;跳轉(zhuǎn)到INTR42.8定時器/計數(shù)器
MCS-51單片機內(nèi)部有兩個16位可編程的定時器/計數(shù)器,即T0和T1(8052提供三個,第三個為T2),AT89S52有三個定時器/計數(shù)器。它們既可以作定時器方式,又可以作計數(shù)器方式。2.8.1定時器/計數(shù)器0和定時器/計數(shù)器1
1.硬件結(jié)構(gòu)定時器/計數(shù)器的基本結(jié)構(gòu)如圖2-13所示?;静考莾蓚€8位的計數(shù)器(其中TH1和TL1是T1的計數(shù)器,TH0和TL0是T0的計數(shù)器)。在作定時器使用時,輸入的時鐘脈沖是由晶體振蕩器的輸出經(jīng)12分頻后得到的,所以定時器也可以看做是對計算機機器周期的計數(shù)器(因為每個機器周期包含12個振蕩周期,故每個機器周期定時器加1,可以把輸入的時鐘脈沖看成機器周期信號),故其頻率為晶振頻率的1/12。如果晶振頻率為12MHz,則定時器每接收一個輸入脈沖的時間為1μs。圖2-13定時器/計數(shù)器的結(jié)構(gòu)框圖當它用作對外部事件計數(shù)時,接相應的外部輸入引腳T0(P3.4)或T1(P3.5)。在這種情況下,當檢測到輸入引腳的電平由高跳變到低時,計數(shù)器就加1(它在每個機器周期的S5P2時刻采樣外部輸入,當采樣值在這個機器周期為高,在下一個機器周期為低時,則計數(shù)器加1)。加1操作發(fā)生在檢測到這種跳變后的機器周期中的S3P1時刻,因此需要兩個機器周期來識別一個從1到0的跳變,故最高計數(shù)頻率為晶振頻率的1/24。這就要求輸入信號的電平應在跳變后至少一個機器周期內(nèi)保持不變,以保證在給定的電平再次變化前至少被采樣一次。定時器/計數(shù)器有四種工作方式。其工作方式的選擇及控制由兩個特殊功能寄存器(TMOD和TCON)的內(nèi)容來決定。用指令改變TMOD或TCON的內(nèi)容后,則在下一條指令的第一個機器周期的S1P1時刻起作用。
1)定時器的方式寄存器TMOD特殊功能寄存器TMOD為定時器的方式控制寄存器,此寄存器結(jié)構(gòu)如圖2-14所示。圖2-14
TMOD寄存器的位結(jié)構(gòu)其中,高4位用于定時器1;低四位用于定時器0。M1、M0用來確定所選的工作方式,如表2-10所示。表2-10工作方式選擇表
M1M0:定時器/計數(shù)器四種工作方式選擇位。各值對應的工作方式如表2-10所示。
·:定時器方式選擇位。=1時,為計數(shù)器方式;=0時,為定時器方式。
GATE:定時器/計數(shù)器運行控制位。此位用來確定對應的外部中斷請求引腳(,)是否參與T0和T1的操作
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 戀人分手協(xié)議合同范例
- 銅仁學院《表面活性劑與膠體化學》2023-2024學年第一學期期末試卷
- 完整版100以內(nèi)加減法混合運算4000道67
- 皮膚與性病習題庫(附答案)
- 動物防疫模擬練習題及答案
- 桐城師范高等??茖W校《化工常用軟件》2023-2024學年第一學期期末試卷
- 桐城師范高等??茖W?!毒幙検罪椆に嚒?023-2024學年第一學期期末試卷
- 小學數(shù)學一年級第二學期口算計算共5031道題
- 小學數(shù)學二年級第二學期口算計算共5052道題
- 鐵嶺師范高等??茖W?!逗娇掌鳈z測與故障診斷》2023-2024學年第一學期期末試卷
- 國家開放大學《創(chuàng)建小企業(yè)》形考任務1-4參考答案
- 農(nóng)村安全飲水工程項目劃分表
- 蘇教版七年級歷史知識點
- 陜西省既有村鎮(zhèn)住宅抗震加固技術(shù)規(guī)程
- 智聯(lián)國企行測筆試真題
- 2025屆新高考物理熱點精準復習:高中物理6大模塊計算題思路總結(jié)
- 2024-2030年中國光電共封裝(CPO)行業(yè)投融資趨勢及發(fā)展前景分析研究報告
- 2025屆江蘇省期無錫市天一實驗學校數(shù)學七年級第一學期期末達標檢測試題含解析
- 城市軌道交通運營管理【共30張課件】
- 學生退學情況說明
- 鋼結(jié)構(gòu)設計智慧樹知到期末考試答案章節(jié)答案2024年山東建筑大學
評論
0/150
提交評論