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