|
3、單片機(jī)內(nèi)部結(jié)構(gòu)詳解(以MCS-51為例)
MCS-51單片機(jī)結(jié)構(gòu) MCS-51系列單片機(jī)產(chǎn)品有8051,8031,8751,80C51,80C31等型號(hào)(前三種為CMOS芯片,后兩種為CHMOS芯片)。它們的結(jié)構(gòu)基本相同,其主要差別反映在存儲(chǔ)器的配置上。8051內(nèi)部設(shè)有4K字節(jié)的掩模ROM程序存儲(chǔ)器,8031片內(nèi)沒(méi)有程序存儲(chǔ)器,而8751是將8051片內(nèi)的ROM換成EPROM。由ATMEL公司生產(chǎn)的89C51將EPROM改成了4K的閃速存儲(chǔ)器,他們的結(jié)構(gòu)大同小異,本章將對(duì)8051單片機(jī)的結(jié)構(gòu)作一介紹。 2.1 MCS-51單片機(jī)內(nèi)部結(jié)構(gòu) 2.1.1、 MCS-51單片機(jī)組成 MCS-51單片機(jī)是在一塊芯片中集成了CPU,RAM,ROM、定時(shí)器/計(jì)數(shù)器和多種功能的I/O線等一臺(tái)計(jì)算機(jī)所需要的基本功能部件。MCS-51單片機(jī)內(nèi)包含下列幾個(gè)部件: ◆ 一個(gè)8位CPU; ◆ 一個(gè)片內(nèi)振蕩器及時(shí)鐘電路; ◆ 4K字節(jié)ROM程序存儲(chǔ)器; ◆ 128字節(jié)RAM數(shù)據(jù)存儲(chǔ)器; ◆ 兩個(gè)16位定時(shí)器/計(jì)數(shù)器; ◆ 可尋址64K外部數(shù)據(jù)存儲(chǔ)器和64K外部程序存儲(chǔ)器空間的控制電路; ◆ 32條可編程的I/O線(四個(gè)8位并行I/O端口); ◆ 一個(gè)可編程全雙工串行口; ◆ 具有五個(gè)中斷源、兩個(gè)優(yōu)先級(jí)嵌套中斷結(jié)構(gòu)。 
8051單片機(jī)框圖如圖2-1所示。各功能部件由內(nèi)部總線聯(lián)接在一起。 圖中4K(4096)字節(jié)的ROM存儲(chǔ)器部分用EPROM替換就成為8751;圖中去掉ROM部分就成為8031的結(jié)構(gòu)圖。 1、 CPU CPU是單片機(jī)的核心部件。它由運(yùn)算器和控制器等部件組成。 ⑴ 運(yùn)算器 運(yùn)算器的功能是進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算??梢詫?duì)半字節(jié)(4位)、單字節(jié)等數(shù)據(jù)進(jìn)行操作。例如能完成加、 減、乘、除、加1、減1、BCD碼十進(jìn)制調(diào)整、比較等算術(shù)運(yùn)算和與、或、異或、求補(bǔ)、循環(huán)等邏輯操作,操作 結(jié)果的狀態(tài)信息送至狀態(tài)寄存器。 8051運(yùn)算器還包含有一個(gè)布爾處理器,用來(lái)處理位操作。它是以進(jìn)位標(biāo)志位C為累加器的,可執(zhí)行置位、復(fù)位 、取反、等于1轉(zhuǎn)移、等于0轉(zhuǎn)移、等于1轉(zhuǎn)移且清0以及進(jìn)位標(biāo)志位與其他可尋址的位之間進(jìn)行數(shù)據(jù)傳送等位操 作。也能使進(jìn)位標(biāo)志位與其他可位尋址的位之間進(jìn)行邏輯與、或操作。 程序計(jì)數(shù)器PC
程序計(jì)數(shù)器PC用來(lái)存放即將要執(zhí)行的指令地址,共16位,可對(duì)64K程序存儲(chǔ)器直接尋址。執(zhí)行指令時(shí),PC內(nèi)容的 低8位經(jīng)P0口輸出,高8位經(jīng)P2口輸出。 令寄存器
指令寄存器中存放指令代碼。CPU執(zhí)行指令時(shí),由程序存儲(chǔ)器中讀取的指令代碼送入指令寄存器,經(jīng)譯碼后由定時(shí)與控制電路發(fā)出相應(yīng)的控制信號(hào),完成指令功能。 定時(shí)與控制部件
①時(shí)鐘電路 8051片內(nèi)設(shè)有一個(gè)由反向放大器所構(gòu)成的振蕩電路,XTAL1和 XTAL2分別為振蕩電路的輸入和輸出端,時(shí)鐘可以由內(nèi)部方式產(chǎn)生或外部方式產(chǎn)生。內(nèi)部方式時(shí)鐘電路如圖2-2所示。在XTAL1和 XTAL2引腳上外接定時(shí)元件,內(nèi)部振蕩電路就產(chǎn)生自激振蕩。定時(shí)元件通常采用石英晶體和電容組成的并聯(lián)諧振回路。晶振可以在1.2MHz到12MHz之間選擇,電容值在5-30PF之間選擇,電容的大小可起頻率微調(diào)作用。 
外部方式的時(shí)鐘很少用,若要用時(shí),只要將XTAL1接地,XTAL2接外部振蕩器就行。對(duì)外部振蕩信號(hào)無(wú)特殊要求,只要保證脈沖寬度,一般采用頻率低于12MHz的方波信號(hào)。 時(shí)鐘發(fā)生器把振蕩頻率兩分頻,產(chǎn)生一個(gè)兩相時(shí)鐘信號(hào)P1和P2供單片機(jī)使用。P1在每一個(gè)狀態(tài)S的前半部分有效,P2在每個(gè)狀態(tài)的后半部分有效。 ② 時(shí)序 MCS-51典型的指令周期(執(zhí)行一條指令的時(shí)間稱為指令周期)為一個(gè)機(jī)器周期,一個(gè)機(jī)器周期由六個(gè)狀態(tài)(十二振蕩周期)組成。每個(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-3給出了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開(kāi)始執(zhí)行指令。如果是雙字節(jié)單機(jī)器周期指令,則在同一機(jī)器周期的S4期間讀入第二個(gè)字節(jié),若是單字節(jié)單機(jī)器周期指令,則在S4期間仍進(jìn)行讀,但所讀的這個(gè)字節(jié)操作碼被忽略,程序計(jì)數(shù)器也不加1,在S6P2結(jié)束時(shí)完成指令操作。圖2-3的(a)和(b)給出了單字節(jié)單機(jī)器周期和雙字節(jié)單機(jī)器周期指令的時(shí)序。8051指令大部分在一個(gè)機(jī)器周期完成。乘(MUL)和除(DIV)指令是僅有的需要兩個(gè)以上機(jī)器周期的指令,占用4個(gè)機(jī)器周期。對(duì)于雙字節(jié)單機(jī)器周期指令,通常是在一個(gè)機(jī)器周期內(nèi)從程序存儲(chǔ)器中讀入兩個(gè)字節(jié),唯有MOVX指令例外。MOVX是訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器的單字節(jié)雙機(jī)器周期指令。在執(zhí)行MOVX指令期間,外部數(shù)據(jù)存儲(chǔ)器被訪問(wèn)且被選通時(shí)跳過(guò)兩次取指操作。圖2-3中(c)給出了一般單字節(jié)雙機(jī)器周期指令的時(shí)序。 2、存儲(chǔ)器 MCS-51單片機(jī)的程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器空間是互相獨(dú)立的,物理結(jié)構(gòu)也不同。程序存儲(chǔ)器為只讀存儲(chǔ)器(ROM)。數(shù)據(jù)存儲(chǔ)器為隨機(jī)存取存儲(chǔ)器(RAM)。單片機(jī)的存儲(chǔ)器編址方式采用與工作寄存器、I/O口鎖存器統(tǒng)一編址的方式。有關(guān)存儲(chǔ)器的內(nèi)容將在下一節(jié)中詳述。
3、I/O端口 I/O端口又稱為I/O接口,也叫做I/O通道或I/O通路,I/O端口是MCS-51單片機(jī)對(duì)外部實(shí)現(xiàn)控制和信息交換的必經(jīng)之路,I/O端口有串行和并行之分,串行I/O端口一次只能傳送一位二進(jìn)制信息,并行I/O端口一次能傳送一組二進(jìn)制信息。 ⑴、并行I/O端口 MCS-51單片機(jī)設(shè)有四個(gè)8位雙向I/O端口(P0、P1、P2、P3),每一條I/O線都能獨(dú)立地用作輸入或輸出。P0口為三態(tài)雙向口,能帶8個(gè)LSTTL電路。P1、P2、P3口為準(zhǔn)雙向口(在用作輸入線時(shí),口鎖存器必須先寫(xiě)入“1”,故稱為準(zhǔn)雙向口),負(fù)載能力為4個(gè)LSTTL電路。 1)、P0端口功能(P0.0~P0.7、32~39腳) 
圖2-4 是 P0口位結(jié)構(gòu),包括1個(gè)輸出鎖存器,2個(gè)三態(tài)緩沖器,1個(gè)輸出驅(qū)動(dòng)電路和1個(gè)輸出控制端。輸出驅(qū)動(dòng)電路由一對(duì)場(chǎng)效應(yīng)管組成,其工作狀態(tài)受輸出端的控制,輸出控制端由1個(gè)與門、1個(gè)反相器和1個(gè)轉(zhuǎn)換開(kāi)關(guān)MUX組成。對(duì)8051/8751來(lái)講P0口既可作為輸入輸出口,又可作為地址/數(shù)據(jù)總線使用, ① P0口作地址/數(shù)據(jù)復(fù)用總線使用 若從P0口輸出地址或數(shù)據(jù)信息,此時(shí)控制端應(yīng)為高電平,轉(zhuǎn)換開(kāi)關(guān)MUX將反相器輸出端與輸出級(jí)場(chǎng)效應(yīng)管V2接通,同時(shí)與門開(kāi)鎖,內(nèi)部總線上的地址或數(shù)據(jù)信號(hào)通過(guò)與門去驅(qū)動(dòng)V1管,又通過(guò)反相器去驅(qū)動(dòng)V2管,這時(shí)內(nèi)部總線上的地址或數(shù)據(jù)信號(hào)就傳送到P0口的引腳上。工作時(shí)低8位地址與數(shù)據(jù)線分時(shí)使用P0口。低8位地址由ALE信號(hào)的負(fù)跳變使它鎖存到外部地址鎖存器中,而高8位地址由P2口輸出(P0口和P2口的地址/數(shù)據(jù)總線功能,請(qǐng)閱第八章MCS-51擴(kuò)展技術(shù))。 ② P0口作通用I/O端口使用 對(duì)于有內(nèi)部ROM的單片機(jī),PO口也可以作通用I/O,此時(shí)控制端為低電平,轉(zhuǎn)換開(kāi)關(guān)把輸出級(jí)與鎖存器的Q端接通,同時(shí)因與門輸出為低電平,輸出級(jí)V1管處于截止?fàn)顟B(tài),輸出級(jí)為漏極開(kāi)路電路,在驅(qū)動(dòng)NMOS電路時(shí)應(yīng)外接上拉電阻;作輸入口用時(shí),應(yīng)先將鎖存器寫(xiě)“1”,這時(shí)輸出級(jí)兩個(gè)場(chǎng)效應(yīng)管均截止,可作高阻抗輸入,通過(guò)三態(tài)輸入緩沖器讀取引腳信號(hào),從而完成輸入操作。 ③ PO口線上的“讀一修改一寫(xiě)”功能 圖2-4上面一個(gè)三態(tài)緩沖器是為了讀取鎖存器Q端的數(shù)據(jù)。Q端與引腳的數(shù)據(jù)是一致的。結(jié)構(gòu)上這樣安排是為了滿足:“讀一修改一寫(xiě)”指令的需要,這類指令的特點(diǎn)時(shí):先讀口鎖存器,隨之可能對(duì)讀入的數(shù)據(jù)進(jìn)行修改再寫(xiě)入到端口上。例如:ANL PO,A;ORL PO,A;XRL PO,A;…。 這類指令同樣適合與P1~P3口,其操作是:先將口字節(jié)的全部8位數(shù)讀入,再通過(guò)指令修改某些位,然后將新的數(shù)據(jù)寫(xiě)回到口鎖器中。 2)P1口(P1.0~P1.7、1~8腳)準(zhǔn)雙向口 ① P1口作通用I/O端口使用 P1口是一個(gè)有內(nèi)部上拉電阻的準(zhǔn)雙向口,位結(jié)構(gòu)入圖2-5所示,P1口的每一位口線能獨(dú)立用作輸入線或輸出線。作輸出時(shí),如將“0”寫(xiě)入鎖存器,場(chǎng)效應(yīng)管導(dǎo)通,輸出線為低電平,即輸出為“0”。因此在作輸入時(shí),必須先將“1”寫(xiě)入口鎖存器,使場(chǎng)效應(yīng)管截止。該口線由內(nèi)部上拉電阻提拉成高電平,同時(shí)也能被外部輸入源拉成低電平,即當(dāng)外部輸入“1”時(shí)該口線為高電平,而輸入“0”時(shí),該口線為低電平。P1口作輸入時(shí),可被任何TTL電路和MOS電路驅(qū)動(dòng),由于具有內(nèi)部上拉電阻,也可以直接被集電極度開(kāi)路和漏極開(kāi)路電路驅(qū)動(dòng),不必外加上拉電阻。P1口可驅(qū)動(dòng)4個(gè)LSTTL門電路。 
② P1口其他功能
P1口在EPROM編程和驗(yàn)證程序時(shí),它輸入低8位地址;在8032/8052系列中P1.0
和P1.1是多功能的,P1.0可作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)觸發(fā)輸入端T2,P1.1可作定時(shí)器/計(jì)數(shù)器2的外部控制輸入端T2EX。
3) P2口(P2.0~P2.7,21~28腳)準(zhǔn)雙向口
P2口的位結(jié)構(gòu)如圖2-6所示,引腳上拉電阻同P1口。在結(jié)構(gòu)上,P2口比P1口多一個(gè)輸出控制部分。 
① P2口作通用I/O端口使用
當(dāng)P2口作通用I/O端口使用時(shí),是一個(gè)準(zhǔn)雙向口,此時(shí)轉(zhuǎn)換開(kāi)關(guān)MUX倒向左邊,輸出級(jí)與鎖存器接通,引腳可接I/O設(shè)備,其輸入輸出操作與P1口完全相同。
② P2口作地址總線口使用
當(dāng)系統(tǒng)中接有外部存儲(chǔ)器時(shí),P2口用于輸出高8位地址A15~A8。這時(shí)在CPU的控制下,轉(zhuǎn)換開(kāi)關(guān)MUX倒向右邊,接通內(nèi)部地址總線。P2口的口線狀態(tài)取決于片內(nèi)輸出的地址信息,這些地址信息來(lái)源于PCH、DPH等。在外接程序存儲(chǔ)器的系統(tǒng)中,由于訪問(wèn)外部存儲(chǔ)器的操作連續(xù)不斷,P2口不斷送出地址高8位。例如,在8031構(gòu)成的系統(tǒng)中,P2口一般只作地址總線口使用,不再作I/O端口直接連外部設(shè)備。
在不接外部程序存儲(chǔ)器而接有外部數(shù)據(jù)存儲(chǔ)器的系統(tǒng)中,情況有所不同。若外接數(shù)據(jù)
存儲(chǔ)器容量為256B,則可使用MOVX A,@Ri類指令由PO口送出8位地址,P2口上引腳的信號(hào)在整個(gè)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器期間也不會(huì)改變,故P2口仍可作通用I/O端口使用。若外接存儲(chǔ)器容量較大,則需用MOVX A,@DPTR類指令,由PO口和P2口送出16位地址。在讀寫(xiě)周期內(nèi),P2口引腳上將保持地址信息,但從結(jié)構(gòu)可知,輸出地址時(shí),并不要求P2口鎖存器鎖存“1”,鎖存器內(nèi)容也不會(huì)在送地址信息時(shí)改變。故訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器周期結(jié)束后,P2口鎖存器的內(nèi)容又會(huì)重新出現(xiàn)在引腳上。這樣,根據(jù)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器的頻繁程度,P2口仍可在一定限度內(nèi)作一般I/O端口使用。P2口可驅(qū)動(dòng)4個(gè)LSTTL門電路。
4) P3口(P3.0~P3.7、10~17腳)雙功能口
P3口是一個(gè)多用途的端口,也是一個(gè)準(zhǔn)雙向口,作為第一功能使用時(shí),其功能同P1口。P3口的位結(jié)構(gòu)如圖 2-7。 當(dāng)作第二功能使用時(shí),每一位功能定義如表2-1所示。P3口的第二功能實(shí)際上就是系統(tǒng)具有控制功能的控制線。此時(shí)相應(yīng)的口線鎖存器必須為“1”狀態(tài),與非門的輸出由第二功能輸出線的狀態(tài)確定,從而P3口線的狀態(tài)取決于第二功能輸出線的電平。在P3口的引腳信號(hào)輸入通道中有兩個(gè)三態(tài)緩沖器,第二功能的輸入信號(hào)取自第一個(gè)緩沖器的輸出端,第二個(gè)緩沖器仍是第一功能的讀引腳信號(hào)緩沖器。P3口可驅(qū)動(dòng)4個(gè)LSTTL門電路。
表 2-1 P3口的第二功能 端 口 功 能 | 第 二 功 能 | P3.0 | RXD---串行輸入(數(shù)據(jù)接收)口 | P3.1 | TXD---串行輸出(數(shù)據(jù)發(fā)送)口 | P3.2 | ---外部中斷0輸入線
| P3.3 | ---外部中斷1輸入線
| P3.4 | T0 ---定時(shí)器0外部輸入 | P3.5 | T1 ---定時(shí)器1外部輸入 | P3.6 | ---外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通信號(hào)輸出
| P3.7 | ---外部數(shù)據(jù)存儲(chǔ)器讀選通信號(hào)輸入
|
每個(gè)I/O端口內(nèi)部都有一個(gè)八位數(shù)據(jù)輸出鎖存器和一個(gè)八位數(shù)據(jù)輸入緩沖器,四個(gè)數(shù)據(jù)輸出鎖存器與端口號(hào)P0、P1、P2和P3同名,皆為特殊功能寄存器。因此,CPU數(shù)據(jù)從并行I/O端口輸出時(shí)可以得到鎖存,數(shù)據(jù)輸入時(shí)可以得到緩沖。
四個(gè)并行I/O端口作為通用I/O口使用時(shí),共有寫(xiě)端口、讀端口和讀引腳三種操作方式。寫(xiě)端口實(shí)際上就是輸出數(shù)據(jù),是將累加器A或其它寄存器中數(shù)據(jù)傳送到端口鎖存器中,然后由端口自動(dòng)從端口引腳線上輸出。讀端口不是真正的從外部輸入數(shù)據(jù),而是將端口鎖存器中輸出數(shù)據(jù)讀到CPU的累加器。讀引腳才是真正的輸入外部數(shù)據(jù)的操作,是從端口引腳線上讀入外部的輸入數(shù)據(jù)。端口的上述三種操作實(shí)際上是通過(guò)指令或程序來(lái)實(shí)現(xiàn)的,這些將在以后章節(jié)中詳細(xì)介紹。
⑵、串行I/O端口
8051有一個(gè)全雙工的可編程串行I/O端口。這個(gè)串行I/O端口既可以在程序控制下將CPU的八位并行數(shù)據(jù)變成串行數(shù)據(jù)一位一位地從發(fā)送數(shù)據(jù)線TXD發(fā)送出去,也可以把串行接收到的數(shù)據(jù)變成八位并行數(shù)據(jù)送給CPU,而且這種串行發(fā)送和串行接收可以單獨(dú)進(jìn)行,也可以同時(shí)進(jìn)行。
8051串行發(fā)送和串行接收利用了P3口的第二功能,即利用P3.1 引腳作為串行數(shù)據(jù)的發(fā)送線TXD和P3.0引腳作為串行數(shù)據(jù)的接收線RXD,如表2-1所示。串行I/O口的電路結(jié)構(gòu)還包括串行口控制器SCON、電源及波特率選擇寄存器PCON和串行數(shù)據(jù)緩沖器SBUF等,它們都屬于特殊功能寄存器SFR。其中PCON和SCON用于設(shè)置串行口工作方式和確定數(shù)據(jù)的發(fā)送和接收波特率,SBUF實(shí)際上由兩個(gè)八位寄存器組成,一個(gè)用于存放欲發(fā)送的數(shù)據(jù),另一個(gè)用于存放接收到的數(shù)據(jù),起著數(shù)據(jù)的緩沖作用,這些將在第七章中詳細(xì)加以介紹。
4、總線
MCS-51單片機(jī)屬總線型結(jié)構(gòu),通過(guò)地址/數(shù)據(jù)總線可以與存儲(chǔ)器(RAM、EPROM)、并行I/O接口芯片相連接。
在訪問(wèn)外部存儲(chǔ)器時(shí),P2口輸出高8位地址,P0口輸出低8位地址,由ALE(地址鎖存允許)信號(hào)將P0口(地址/數(shù)據(jù)總線)上的低8位鎖存到外部地址鎖存器中,從而為P0口接受數(shù)據(jù)作準(zhǔn)備。
在訪問(wèn)外部程序存儲(chǔ)器(即執(zhí)行MOVX)指令時(shí),PSEN(外部程序存儲(chǔ)器選通)信號(hào)有效,在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器(即執(zhí)行MOVX)指令時(shí),由P3口自動(dòng)產(chǎn)生讀/寫(xiě)( / )信號(hào),通過(guò)P0口對(duì)外部數(shù)據(jù)存儲(chǔ)器單元進(jìn)行讀/寫(xiě)操作。
MCS-51單片機(jī)所產(chǎn)生的地址、數(shù)據(jù)和控制信號(hào)與外部存儲(chǔ)器、并行I/O接口芯片連接簡(jiǎn)單、方便。有關(guān)這部分內(nèi)容將在第8章敘述。 Next Page>>
|