




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第2章增強型MCS-51單片機結構2.1內部結構和引腳功能2.2輸入/輸出(I/O)口2.3存儲器系統(tǒng)及訪問2.4MCS-51外部存儲器連接2.5操作時序2.6復位及復位電路2.7節(jié)電運行狀態(tài)和掉電運行狀態(tài)由于MCS-51系列單片機總線技術開放,開發(fā)工具成熟,單片機芯片及其開發(fā)工具供貨商多,價格低廉,同時該系列單片機進入市場時間早,匯編語言指令格式與Intel公司8位通用微處理器相似,很容易被接觸過Intel通用微處理器匯編語言的用戶所接受。因此,在單片機應用中占有重要地位,目前仍是單片機教學的首選機種。理解MCS-51系列單片機芯片內部結構、工作原理、典型應用實例后,將非常容易理解和使用其他系列,如NEC、Motorola、MicroChip等單片機芯片??紤]到標準MCS-51內核單片機芯片,如8031/32、8051/52、8751/52等已停產(chǎn),目前主流MCS-51及其兼容芯片均以增強型MCS-51作內核。因此本章將詳細介紹8×C5×、8×C5××2芯片的內部結構、引腳功能以及典型應用實例。
增強型MCS-51及其兼容芯片主要包括Intel公司的8×C52/54/58系列、Philips公司的P8XC52/54/58系列、ATMEL公司的AT89S51/52/53系列(但ATMEL公司的AT8XC5×系列采用標準MCS-51內核)、Winbond公司的W78E系列等——簡稱8×C5×系列芯片。此外,2000年后Philips公司、ATMEL公司又相繼推出“6時鐘/機器周期”的P8×C52×2/8×C54×2/8×C58×2和TS8×C52×2/8×C54×2/8×C58×2系列——簡稱8×C5××2系列,其特點是硬件資源與8×C5×系列兼容,但運行速度比8×C5×系列快一倍。為便于比較,表2-1列出了增強型MCS-51主流芯片的主要性能指標。表2-1增強型MCS-51主流芯片性能指標
續(xù)表由表2-1可見,在這幾個品牌中,就功能、性能而言,ATMELTS8×C5××2系列最高,Philips、Winbond次之,Intel最低。
ATMEL公司的AT89S5×系列最大優(yōu)點是支持ISP編程、內置了硬件看門狗計數(shù)器,其中AT89S53還集成了SPI總線接口部件。
2.1.1內部結構
8×C5×芯片由一個8位通用中央處理器(CPU)、程序存儲器、隨機讀寫數(shù)據(jù)存儲器、常用外設電路等部件組成,如圖2-1所示。2.1內部結構和引腳功能
圖2-1增強型MCS-51MCU內部結構其中8位通用CPU的內部結構與第1章介紹的CPU內部結構相同,由算術邏輯運算單元ALU、累加器Acc、程序狀態(tài)字寄存器PSW、堆棧指針SP、寄存器B、程序計數(shù)器(指令指針)PC、指令寄存器IR、暫存器等部件組成,是增強型MCS-51MCU的核心。
將不同種類、容量的存儲器與CPU內核集成在同一芯片內是單片機芯片的主要特征之一,8×C5×芯片內部集成了不同容量(從4~32KB)的掩膜ROM、OTPROM或FlashROM作為程序存儲器(常稱為片內程序存儲器);此外還集成了128~256B隨機讀寫存儲器作為數(shù)據(jù)存儲器(常稱為內部RAM)。當片內存儲器容量不夠時,可通過I/O口接OTPROM(如2764、27128、27512)或FlashROM等存儲器芯片擴展系統(tǒng)的程序存儲器,構成外部程序存儲器(最大容量為64KB,但目前已很少擴展外部程序存儲器);接6264、62256等隨機讀寫靜態(tài)存儲器芯片,構成外部數(shù)據(jù)存儲器(擴展的外部數(shù)據(jù)存儲器,最大容量也是64KB)。在MCS-51芯片中,P0口、P2口可作為一般的I/O端口使用;當需要擴展外部存儲器時,P0口將作為低8位地址總線(A7~A0)/數(shù)據(jù)總線(D7~D0)使用,P2口作為高8位地址總線(A15~A8)使用。將一些基本的、常用的外圍電路,如振蕩器、定時/計數(shù)器、串行通信接口電路、中斷控制器、I/O接口電路與CPU內核集成在同一芯片內是單片機芯片的又一特征。增強型MCS-51芯片內部含有三個16位定時/計數(shù)器,可以管理6個中斷源的中斷控制器(具有四個優(yōu)先級),用于多機通信或I/O口擴展的增強型全雙工串行口UART(通用異步收發(fā)器),片內振蕩器及時鐘電路等。
由于定時/計數(shù)器、串行通信、中斷控制器等外圍電路集成在CPU芯片內,因此增強型MCS-51MCU內部也就包含了這些外圍電路的控制寄存器、狀態(tài)寄存器以及數(shù)據(jù)輸入/輸出寄存器,這些外設電路接口寄存器構成了增強型MCS-51的特殊功能寄存器。2.1.2引腳功能
增強型MCS-51系列芯片封裝形式、引腳排列與標準MCS-51系列芯片兼容,如圖2-2所示(為了便于比較,圖中還給出了標準MCS-51內核芯片DIP40封裝引腳排列圖),引腳邏輯如圖2-3所示,引腳功能如表2-2所示。表2-2引腳功能續(xù)表
圖2-2增強型MCS-51芯片常見封裝形式及引腳排列
(a)DIP封裝;(b)PLCC封裝;(c)PQFP封裝
圖2-3增強型MCS-51芯片引腳邏輯符號在MCS-51芯片中,MCU引腳功能與MCU內特定單元電路有關,如:
與振蕩電路有關的引腳分別是XTAL1(片內晶振電路反相放大器的輸入端,接MCU內部時鐘電路)、XTAL2(片內晶振電路反相放大器的輸出端)。
與復位電路有關的引腳為RST。
與外部存儲器連接有關的引腳是P0、P2口、ALE、、以及P3口中的P3.6(,外部數(shù)據(jù)存儲器的寫選通信號)、P3.7(,外部數(shù)據(jù)存儲器的讀選通信號)。
與中斷控制有關的引腳是P3口的(P3.2)和(P3.3)。
與定時/計數(shù)器有關的引腳是P3口的T0(P3.4)、T1(P3.5);P1口的P1.0(T2)、P1.1(T2EX)。
與串行通信口有關的引腳為TXD(P3.1)、RXD(P3.0)。
下面簡要介紹晶振輸入/輸出(XTAL1及XTAL2)、RST等引腳功能和連接方法,而其他引腳的功能及連接方法可參看外部存儲器連接、中斷系統(tǒng)、定時/計數(shù)器、串行通信等章節(jié)內容,這里先不介紹。
1.晶振電路及XTAL1、XTAL2的連接
XTAL1、XTAL2分別是系統(tǒng)時鐘信號fOSC輸入、輸出端。
當使用片內振蕩電路時,XTAL1、XTAL2與晶體振蕩器及電容C1、C2按圖2-4所示方式連接。晶振、電容C1、C2以及片內與非門(起反饋、放大元件作用,類似于電容三點式振蕩電路中的三極管)構成了電容三點式振蕩器,其中Rf為內部負反饋電阻,使與非門等效為反相放大器,RS用于限制晶振的驅動電平。在由晶振構成的電容三點式振蕩電路中,由于石英晶體振蕩器靜態(tài)電容C0、外接振蕩電容C1和C2均遠大于晶片彈性等效串聯(lián)電容Cs,因此振蕩頻率主要由晶體振蕩器并聯(lián)諧振頻率fP決定。振蕩電容C1、C2取值范圍與晶振種類及頻率有關,如表2-3所示。
圖2-4增強型MCS-51芯片晶振電路及連接表2-3振蕩電容C1、C2的取值范圍為了減少寄生電容對振蕩頻率的影響,在印制板上,C1、C2應盡可能靠近MCU芯片的XTAL1、XTAL2引腳,必要時采用溫度系數(shù)較小的NPO電容。在時鐘信號頻率穩(wěn)定性要求不高的控制系統(tǒng)中,也可以采用陶瓷振蕩器代替石英晶體振蕩器。在這種情況下,C1、C2典型值為47pF。為避免振蕩電路對系統(tǒng)其他電路造成的潛在干擾,在滿足速度要求的前提下,盡可能降低晶振頻率。一般情況下,無需在XTAL2引腳串聯(lián)電阻Rs,只有當晶振頻率較低,如6MHz以下,且發(fā)現(xiàn)系統(tǒng)干擾大、穩(wěn)定性差時,才需要在XTAL2引腳串聯(lián)阻值在100Ω~2.7kΩ的電阻RS。
當采用外部時鐘信號時,外部時鐘信號需從XTAL1引腳輸入,XTAL2引腳懸空,原因是8×C5×MCU的片內時鐘信號取自作為反饋放大元件的二輸入與非門的一個輸入端,如圖2-4所示。此外,8×C5×芯片的時鐘信號還受PD(電源控制/波特率倍增寄存器PCON中的b1位)控制,當PD位為1時,反相器輸出低電平,與非門輸出高電平,振蕩器停振,系統(tǒng)進入掉電狀態(tài)。
2.復位電路及復位引腳RST的連接
RST引腳為復位輸入端,MCS-51采用高電平復位方式。
RST引腳對GND(地)電阻值(即復位電阻RRST)約在40~220kΩ之間,因此在RST引腳和電源VCC之間接一容量為10~22μF的電容后,即可構成最簡單RC復位電路(可參看2.6節(jié)“復位電路”中的圖2-22)。
MCS-51系列單片機理論上有四個8位I/O口,即P0口、P1口、P2口和P3口,其等效電路如圖2-5所示。2.2輸入/輸出(I/O)口
圖2-5MCS-51系列單片機I/O口等效電路
(a)P1口;(b)P0口;(c)P2口;(d)P3口2.2.1P1口內部結構及使用
圖2-6P1.X作為輸入引腳的示意圖之所以在I/O電路中安排讀鎖存器三態(tài)門,是為了防止當輸出端驅動NPN三極管基極時,讀引腳獲得錯誤信息。在圖2-7中,當I/O鎖存器為“1”時,P1.X引腳輸出高電平,三極管導通,但三極管導通后,輸出端卻被鉗位在0.7V(硅管)左右,這樣讀引腳將得到“低電平”的錯誤信息,而實際上,P1.X是輸出高電平的。
在增強型MCS-51芯片中,P1.0和P1.1引腳具有第二輸入/輸出功能,即除了可作為一般I/O引腳使用外,P1.0引腳還可作為定時器T2的計數(shù)輸入端或T2定時時鐘輸出端;而P1.1引腳可作為定時器T2外部觸發(fā)輸入端T2EX。
圖2-7驅動三極管基極時I/O引腳被鉗位2.2.2P0口內部結構及使用
P0口內部結構如圖2-5(b)所示,對于內置了ROM、EPROM、OTPROM、FlashROM的80C5×、87C5×、89C5×芯片來說,當不使用外部存儲器(包括程序存儲器和數(shù)據(jù)存儲器)時,P0口可作為通用的輸入/輸出端口(I/O)使用;當需要擴展外部存儲器時,P0口是“地址/數(shù)據(jù)”總線,下面分別介紹P0口作為I/O引腳和地址/數(shù)據(jù)總線使用時的工作過程和信號流向。
1.作為I/O端口時
P0口作為I/O端口使用時,多路開關“控制”信號為“0”(低電平),與非門輸出高電平,V1管截止,同時多路開關轉向鎖存器反相輸出端。輸出時,寫鎖存器脈沖CLK有效,輸出信號經(jīng)內部總線→鎖存器輸入端D→反相輸出端→多路開關→V2管柵極→V2管漏極到輸出端,由于V1管截止,當作為輸出口時,P0口是漏極開路輸出(即OD輸出方式),當驅動拉電流負載時,需要外接上拉電阻,P0口帶有鎖存器,因此具有輸出鎖存功能。P0作為輸入口時,與P1口類似,也必須先執(zhí)行寫端口指令,如“SETBP0.X”或“MOVP0,#0FFH”將P0口鎖存器置“1”,端輸出低電平,使V2管截止(這時V1、V2均截止,P0.X引腳懸空),否則P0.X引腳也有可能被鉗位在低電平狀態(tài)。在讀引腳信號作用下,輸入信息經(jīng)P0.X引腳→讀引腳三態(tài)門電路到內部總線。
2.作為地址/數(shù)據(jù)總線時
在訪問外部存儲器時,P0口作為地址/數(shù)據(jù)總線使用,這時多路開關“控制”信號為“1”,與非門解鎖,與非門輸出電平由“地址/數(shù)據(jù)”線信號決定;同時多路開關與反相器的輸出端相連,地址信號經(jīng)“地址/數(shù)據(jù)”線→反相器→V2管柵極→V2管漏極輸出,例如地址信號為“0”,與非門輸出高電平,V1管截止;反相器輸出高電平,V2管導通,輸出引腳的地址信號為低電平。反之,地址信號為“1”,與非門輸出低電平,V1管導通;反相器輸出低電平,V2管截止,輸出引腳的地址信號為高電平??梢?,在輸出“地址/數(shù)據(jù)”信息時,V1、V2交替導通,負載能力很強,可直接與存儲器地址線相連,無需增加總線驅動器。
同時P0口又可作為數(shù)據(jù)總線使用,在訪問外部程序存儲器時,P0口輸出低8位地址信息后,將變?yōu)閿?shù)據(jù)總線,以便讀指令碼(輸入)。在取指令期間,“控制”信號為“0”,V1管截止,多路開關也跟著轉向鎖存器反相輸出端;同時,CPU自動將0FFH寫入P0口鎖存器,使V2管截止,在讀引腳信號控制下,通過讀引腳三態(tài)門電路將指令碼讀到內部總線。如果該指令是輸出數(shù)據(jù),如“MOVX@DPTR,A”(將累加器A內容通過P0口數(shù)據(jù)總線傳送到外部RAM中),則多路開關“控制”信號為“1”,與非門解鎖,與輸出地址信號類似,數(shù)據(jù)由“地址/數(shù)據(jù)”線→反相器→V2柵極→V2漏極輸出。
如果該指令是輸入數(shù)據(jù)(讀外部數(shù)據(jù)存儲器或程序存儲器),如“MOVXA,@DPTR”(將外部RAM某一存儲單元內容通過P0口數(shù)據(jù)總線輸入到累加器A中),則輸入的數(shù)據(jù)仍通過讀引腳三態(tài)門到內部總線,其過程類似于讀指令碼。通過以上分析,可以看出當P0口作為地址/數(shù)據(jù)總線使用時,在讀指令碼或輸入數(shù)據(jù)前,CPU自動向P0口鎖存器寫入0FFH,破壞了P0口原來的狀態(tài)。因此,不能作為通用I/O端口,這點在系統(tǒng)設計時務必注意,即程序中不能再含有以P0口作為操作數(shù)(包括源操作數(shù)和目的操作數(shù))的指令。2.2.3P2口內部結構及使用
P2口的內部結構如圖2-5(c)所示,可以作為通用的I/O端口使用,也可以作為外部存儲器高8位地址總線使用,在讀寫外部存儲器期間,輸出高8位(A15~A8)地址信息。
1.作為I/O端口時
沒有外部程序存儲器或雖然有外部數(shù)據(jù)存儲器,但容量不大于256字節(jié),不需要高8位地址時(在這種情況下,不能通過數(shù)據(jù)地址寄存器DPTR讀寫外部數(shù)據(jù)存儲器),P2口可以作為I/O端口使用。這時,“控制”信號為“0”,多路開關轉向鎖存器同相輸出端Q,輸出信號經(jīng)內部總線→鎖存器輸出端Q→反相器→V2管柵極→V2管漏極輸出。
由于V2管漏極帶有上拉電阻,可以提供一定的上拉電流,負載能力約為4個TTL門電路;作輸入口前,同樣需要向鎖存器寫入“1”,使反相器輸出低電平,V2管截止,即引腳懸空時為高電平,防止引腳被鉗位在低電平。讀引腳信號有效后,輸入信息經(jīng)讀引腳三態(tài)門電路到內部數(shù)據(jù)總線。
2.作為地址總線時
P2口作為地址總線時,“控制”信號為“1”,多路開關轉向“地址”線,地址信息經(jīng)反相器→V2管柵極→V2管漏極輸出,由于P2口輸出高8位地址,與P0口不同,無需分時使用,因此P2口上的地址信息(程序存儲器的A15~A8)或數(shù)據(jù)地址寄存器高8位DPH保存時間長,無需鎖存,關于這點可參看如圖2-19所示的外部存儲器讀寫時序。2.2.4P3口內部結構及使用
P3口內部結構如圖2-5(d)所示,P3口是個多功能口,它除了可作為一般的I/O口外,還具有第二功能,如表2-2所示。
P3口作為I/O口時,第二功能輸出控制信號為高電平,與非門等效為一個反相器,與P2口情況類似。此外,作第二功能輸出時,CPU會自動向鎖存器寫入“1”,打開與非門,這時與非門同樣等效于一個反相器,第二功能輸出信號經(jīng)與非門→V2管柵極→V2管漏極→P3.X引腳;作第二功能輸入時,“第二功能輸出”控制端、鎖存器輸出端均為“1”,與非門輸出低電平,V2管截止,輸入信號經(jīng)引腳→緩沖器→第二功能輸入。從圖2-5看出,I/O引腳作“第二功能輸出”引腳使用前并不需要對引腳切換進行任何設置,只要相應外設處于使能狀態(tài),對應I/O引腳就具有第二功能輸出。例如在“MOVX@DPTR,A”指令執(zhí)行期間,P3.6引腳自動輸出外部數(shù)據(jù)存儲器寫控制信號。而作為第二功能輸入引腳使用前,也無須設置,只要相應引腳I/O口鎖存器位為1(否則I/O口下拉MOS管導通,輸入信號被鉗位在0電平),則當對應外設處于使能狀態(tài)時,就自動具有第二功能輸入特性(當然這時仍可通過讀引腳指令獲取引腳的電平狀態(tài))。2.2.5I/O口負載能力
由于P1~P3口上拉電阻較大,約為20~40kΩ,屬“弱上拉”,因此P1~P3口引腳輸出高電平電流IOH很小(約為30~60μA)。而輸出低電平時,下拉N溝道MOS管導通,可吸收1.6~15mA的灌電流,負載能力較強,即P1~P3口負載能力約為3~4個TTL門電路。
作為輸出口驅動NPN三極管時,在最壞情況下(上拉電阻為40kΩ),如果三極管電流放大系數(shù)β為100,則最大集電極電流ICMAX約為10mA。因此,P1~P3口可以直接驅動小功率NPN三極管,如圖2-8(a)所示。當需要驅動電流較大的中功率NPN三極管時,必須外接上拉電阻(但上拉電阻不得小于3.3kΩ,否則輸出低電平時灌電流會大于1.6mA,使VOL偏高,當VOL大于0.5V時,NPN管將導通,出現(xiàn)邏輯錯誤),如圖2-8(b)中的Rb。
作為輸出口驅動PNP三極管時,必須在I/O端口與三極管基極之間串接限流電阻(阻值大小與最大集電極輸出電流有關),限制輸出低電平時I/O口的灌電流,如圖2-8(c)中的Rb。MCS-51芯片I/O口輸出級采用準雙向結構,低電平驅動電流較大——多數(shù)增強型MCS-51芯片I/O引腳能夠吸收1.6~15mA的灌電流(但同一I/O口所有引腳灌電流總和∑IOL,以及全部I/O引腳灌電流總和存在一個最大值,大小可從器件手冊中查到),當三極管電流放大系數(shù)β為100時,則最大集電極電流ICM大于160mA,足可以驅動小型繼電器。此時限流電阻Rb約為2.7kΩ(假設電源電壓為5.0V)。因此當需要驅動工作電流較大的LED發(fā)光二極管、蜂鳴器、小型繼電器時,可采用圖2-8(d)~(f)所示的驅動方式(負載應串接在集電極,而不是發(fā)射極,否則PNP驅動管不可能進入飽和狀態(tài),由于其功耗大,同時負載壓降小,將造成負載,如繼電器不能可靠吸合)。
圖2-8P1~P3口驅動三極管電路采用低電平有效驅動方式,除了驅動能力較強外,不輸出時Px.y引腳鎖存器輸出高電平,I/O口輸出級下拉N溝道MOS管以及負載驅動管(PNP)均截止,功耗?。涣硪环矫嬉脖苊饬藦臀黄陂g或復位后立即輸出的弊端。
作為I/O口使用時,P0口漏極開路,當需要驅動拉電流負載時,必須外接上拉電阻;輸出低電平負載能力比P1~P3口強,可以吸收3.2mA以上的灌電流,能驅動8個TTL門電路。
由于P1~P3口上拉電阻較大,而P0口為漏極開路,因此作為輸出口使用時P0、P1~P3口引腳均具有“線與”功能。2.2.6讀鎖存器和讀引腳指令
當把P0~P3口作為輸入引腳使用時,以I/O口作為源操作數(shù)的數(shù)據(jù)傳送指令、算術及邏輯運算指令、位測試轉移指令等屬于讀引腳指令,如:
MOV C,P1.0 ;將P1.0引腳狀態(tài)讀到位累加器C中
MOV A,P1 ;將P1口的P1.0~P1.7引腳信號讀到累加器A中
ANL A,P1 ;將P1口的P1.0~P1.7引腳信號與累加器A相與
ADD A,P1 ;將P1口的P1.0~P1.7引腳信號與累加器A相加
JB P1.0,LOOP ;P1.0引腳信號為1,則轉移
JNB P1.0 ,LOOP ;P1.0引腳信號為0,則轉移
而所有的“讀—改—寫”指令均讀I/O口鎖存器,如:
JBC P1.0,LOOP ;P1.0鎖存器為1轉移,且將P1.0鎖存器清0
DECP1 ;P1口鎖存器內容減1
INC P1 ;P1口鎖存器內容加1
CPL P1.0 ;P1.0引腳I/O口鎖存器位取反
多數(shù)單片機系統(tǒng),包括MCS-51系列單片機存儲器組織方式與通用微機系統(tǒng)不同,其程序存儲器地址空間和數(shù)據(jù)存儲器地址空間相互獨立,并通過各自數(shù)據(jù)總線與CPU相連,以加快程序的執(zhí)行速度。而通用微機系統(tǒng)的程序存儲器和數(shù)據(jù)存儲器往往共用同一存儲區(qū),統(tǒng)一編址。2.3存儲器系統(tǒng)及訪問
8×C5×系列單片機存儲器系統(tǒng)由三部分組成,即程序存儲器(包括片內程序存儲器,大小與芯片型號有關,如89C52片內程序存儲器容量為8KB,地址編碼從0000H~1FFFH;89C54片內程序存儲器容量為16KB,地址編碼從0000H~3FFFH;89C58片內程序存儲器容量為32KB,地址編碼從0000H~7FFFH;外部程序存儲器地址編碼從0000H~FFFFH,容量為64KB)、片內數(shù)據(jù)存儲器(包括內部RAM存儲器00H~FFH,容量為256字節(jié)及特殊功能寄存器)、外部數(shù)據(jù)存儲器(0000H~FFFFH,容量為64KB),如圖2-9(a)所示。
對于80C31、8×C51芯片來說,片內數(shù)據(jù)存儲器容量僅為128字節(jié)(00H~7FH),如圖2-9(b)所示。
圖2-98×C5×/8×C5××2系列單片機存儲器結構盡管數(shù)據(jù)存儲器地址空間與程序存儲器地址空間重疊,但不會造成混亂,原因是MCS-51采用Harvard雙總線結構,且訪問外部程序存儲器時用信號選通(接只讀存儲器的輸出允許端);而訪問外部數(shù)據(jù)存儲器時,由(P3.6)信號(讀)和(P3.7)信號(寫)選通。
數(shù)據(jù)存儲器由片內數(shù)據(jù)存儲器(內部RAM)和外部數(shù)據(jù)存儲器組成,盡管地址空間重疊,但也不會造成混亂。原因是內部數(shù)據(jù)存儲器通過MOV指令讀寫,使用內部數(shù)據(jù)總線,此時外部數(shù)據(jù)存儲器讀寫選通信號(、)無效;而外部數(shù)據(jù)存儲器通過MOVX指令訪問,分別由(讀操作)或信號(寫操作)選通。在8×C32/8×C52/54/58芯片中,盡管高128字節(jié)內部RAM地址空間與特殊功能寄存器地址重疊,但同樣不會造成混亂,原因是MCS-51約定:只能用寄存器間接尋址方式訪問高128字節(jié)內部RAM,用直接尋址方式訪問特殊功能寄存器。2.3.1片內數(shù)據(jù)存儲器
片內數(shù)據(jù)存儲器由內部RAM和特殊功能寄存器組成。
1.片內RAM及其尋址方式
對于8×C51、8×C31芯片來說,內部RAM的容量為128字節(jié)(00H~7FH);對于
8×C52/54/58芯片來說,片內RAM容量為256字節(jié)(00H~0FFH)。根據(jù)用途可劃分為工作寄存器區(qū)、位尋址區(qū)和用戶數(shù)據(jù)存儲器區(qū)(可作為用戶RAM或堆棧區(qū)),如表2-4所示。表2-4內部RAM地址空間的區(qū)域劃分對于00H~7FH前128字節(jié)內部RAM(C51定義為DATA變量類型)存儲器,可使用直接尋址方式或寄存器間接尋址方式讀寫,如:
MOV30H,40H ;內部RAM40H單元內容寫入內部RAM30H單元
MOV30H,#35H ;將立即數(shù)35H寫入內部RAM30H單元
MOV@R0,#35H ;
通過寄存器間接尋址方式將立即數(shù)35H寫入由R0指定的內部
;RAM單元中如果該指令執(zhí)行前,R0內容為30H,則上述兩條指令執(zhí)行結果相同,均把立即數(shù)35H寫入內部RAM30H單元中。
由于后128字節(jié)(80H~FFH)內部RAM(C51定義為iDATA變量類型)地址編碼與特殊功能寄存器地址重疊,因此,只能用寄存器間接尋址方式訪問,如:
MOVR0,#80H ;內部RAM地址送間接尋址寄存器R0
MOVA,@R0 ;通過間接尋址方式,將80H單元內容送累加器A(讀)
MOV@R0,A ;通過間接尋址方式,將累加器A內容送80H單元(寫)注:由于后128字節(jié)內部RAM只支持間接尋址方式,靈活性沒有前128字節(jié)內部RAM高,因此常用變量盡可能安排在30H~7FH的內部RAM單元中。
(1)工作寄存器區(qū)大小為32個字節(jié),分為四個區(qū),每區(qū)8個字節(jié),對應R0~R7寄存器名。因此,R0的物理地址可能是00H,也可能是08H、10H或18H;同理,R1的物理地址可能是01H,也可能是09H、11H或19H。任何時候只能選擇四個工作寄存器區(qū)中的一個區(qū)作為當前工作寄存器區(qū),當前工作寄存器區(qū)由程序狀態(tài)字寄存器PSW的b4(RS1)、b3(RS0)位確定,具體情況如下:
PSW寄存器b4、b3位當前工作寄存器區(qū)寄存器R7~R0地址
000區(qū)07H~00H
011區(qū)0FH~08H
102區(qū)17H~10H
113區(qū)1FH~18H復位后PSW的b4、b3位為00,因此復位后將選擇0區(qū)作為當前工作寄存器區(qū)。修改PSW的b4、b3位即可選擇不同的工作寄存器區(qū),這有利于快速保護現(xiàn)場,提高程序執(zhí)行效率和中斷的響應速度。
(2)
20H~2FH單元,共16字節(jié),屬位尋址區(qū)。該區(qū)域可以按字節(jié)讀寫,也可以按位讀寫。位地址從20H單元開始,20H單元b0位的位地址為00H,20H單元b1位的位地址為01H,20H單元b2位的位地址為02H。依此類推,21H單元b0位的位地址為08H,2FH單元b7位的位地址為7FH,如表2-4所示。如果系統(tǒng)中需要位操作,則最好保留20H~2FH單元的部分或全部,作位存儲區(qū),以方便位尋址操作。
MCS-51系列單片機既是8位機,同時也是功能完善的一位機。作一位機使用時,它有自己的CPU、位存儲區(qū)、位寄存器、“位累加器”(進位標志Cy)以及完整的位操作指令,包括置1、清零、非(取反)、與、或、傳送、測試轉移等。
對于位存儲器(即20H~2FH單元中的128個位),只能使用直接尋址方式確定操作數(shù)所在的存儲單元,如:
MOVC,23H ;位傳送指令,即將位地址23H單元(對應24H字節(jié)單元的b3位)內容傳
;送到位累加器C中
(3)
30H單元以后可作內部用戶RAM區(qū)或堆棧區(qū)。復位后,堆棧指針SP指向07H單元。因此,一般需要修改,將SP設在2FH之上。
2.特殊功能寄存器(SFR)
由于單片機芯片內集成了一些常用的外圍接口電路,如并行I/O端口、串行口、
定時/計數(shù)器、中斷控制器等,因此這些外圍接口電路的控制寄存器、狀態(tài)寄存器以及數(shù)據(jù)寄存器也就位于芯片內,統(tǒng)稱為特殊功能寄存器(SpecialFunctionRegisters)。
MCS-51MCU與通用微處理不同,除了給外設接口電路相關寄存器,如定時/計數(shù)器控制寄存器TCON分配字節(jié)地址外,CPU內的寄存器也分配有字節(jié)地址,如累加器Acc的字節(jié)為0E0H。增強型MCS-51系列單片機內共有32個特殊功能寄存器(在標準MCS-52基礎上,增加了6個新的特殊功能寄存器),地址分散在80H~FFH之間,如表2-5所示。表2-5特殊功能寄存器地址映象續(xù)表表2-5說明如下:
(1)帶灰色背景寄存器或寄存器位為增強型MCS-51新增寄存器或寄存器位。
(2)帶
*
號寄存器具有位尋址功能。對于具有位地址的特殊功能寄存器中的位,在指令中除了用“位地址”外,還可以用“位定義名”或“寄存器名.位”的形式表示,如將程序狀態(tài)字寄存器PSW中的b3位清0,可以用:
CLRD3H ;位地址形式
CLRRS0 ;位定義名形式。作為一個良好的習慣,建議使用“位定義名”形式
CLRPSW.3 ;“寄存器名.位”形式盡管書寫形式不同,但匯編時,匯編程序均自動轉換為“位地址”的形式,因此這三條指令完全等效,不過使用“位定義名”和“寄存器名.位”的形式更直觀?!凹拇嫫髅?位”表示形式不僅適用具有位尋址的特殊功能寄存器,也適用于具有位尋址功能的內部RAM單元。例如,使用“BYTEBITDATA20H”偽指令定義BYTEBIT變量后,則如下三條指令也完全等效。
MOVC,BYTEBIT.1
MOVC,20H.1
MOVC,01H由于在位操作指令中,位地址采用直接尋址方式,因此MCS-51支持的位地址范圍在00~FFH之間,而低128位地址對應20H~2FH字節(jié)內部RAM位尋址空間內的位,特殊功能寄存器中的位地址范圍在80H~FFH之間,于是支持位尋址操作的特殊功能寄存器的字節(jié)地址必然被8整除,即只能是80H、88H、90H、……、0F0H、0F8H。換句話說,凡是字節(jié)地址不被8整除的特殊功能寄存器均不具有位尋址功能。
(3)
8×C5××2系列與8×C5×系列之間僅存在如下差異:
8×C5××2系列新增了時鐘控制寄存器CKCON,用于運行中選擇MCU工作模式。當X2
=
0時,每機器周期包含12個時鐘周期(與標準MCS-51相同);而當X2
=
1時,每機器周期包含6個時鐘周期,即所謂的“X2”模式。
將8×C5×系列輔助功能寄存器AUXR1的通用標志位“GF2”作為“掉電喚醒”控制位WUPD(即WakeupformPowerDown的簡稱),即在8×C5××2系列中,當WUPD(AUXR1.3)
=
0時,將禁止外中斷喚醒掉電模式(復位后的缺省狀態(tài))。
(4)寄存器中保留位用“-”表示,不宜使用,初始化時只能寫入0。
(5)從表2-5中可以看出:特殊功能寄存器地址分散在80H~FFH之間,對于沒有相應寄存器與之對應的地址單元,不能對其進行讀寫操作。如果對空單元進行讀操作,將得到一個不確定的值,即前后兩次讀出的數(shù)據(jù)不相同;寫入時,數(shù)據(jù)將丟失,因為,這些單元沒有對應的物理存儲器存放寫入的數(shù)據(jù)。下面對一些常見的特殊功能寄存器作一簡單介紹:
1)累加器Acc
CPU內通用寄存器,常用于存放參加算術或邏輯運算的兩個操作數(shù)中的一個及運算結果,例如:
ADDA,30H ;在指令中,累加器Acc常簡寫為“A”
該指令的含義是以累加器Acc內容作為被加數(shù),加數(shù)存放在內部RAM的30H單元中,相加后的結果(即和)再存放到累加器Acc中。由于早期的CPU沒有乘法指令,乘法運算需要通過多次加法運算實現(xiàn),而在多次加法運算中,寄存器Acc總是存放中間結果,即起了累加功能,因此也就用“累加器”來稱呼該寄存器。
2)
B寄存器
B寄存器也是CPU內的通用寄存器,主要用于乘法和除法運算。在乘法運算中,被乘數(shù)放在累加器Acc中,乘數(shù)放在B寄存器中,積的高8位存放在B寄存器中,低8位存放在累加器Acc中,如:
MULAB ;BA←A
×
B
在除法運算中,被除數(shù)存放在累加器Acc中,除數(shù)存放在B寄存器中。運算后,商放在累加器Acc中,余數(shù)放在B寄存器中。
3)程序狀態(tài)字寄存器PSW
程序狀態(tài)字寄存器有時也稱為“標志寄存器”,由一些標志位組成,用于存放指令運行的狀態(tài),在MCS-51中PSW寄存器各位含義如下:
Cy:進位標志。在進行加法運算時,當最高位,即b7位有進位,或執(zhí)行減法運算,最高位有借位時,Cy為1,反之為0。
AC:輔助進位標志。在進行加法運算時,當b3位有進位,或執(zhí)行減法運算,b3位有借位時,AC為1,反之為0。OV:溢出標志。在計算機內,帶符號數(shù)一律用補碼表示。在8位二進制中,補碼所能表示的范圍是
-128~+127,而當運算結果超出這一范圍時,OV標志為1,即溢出。反之,為0。
P:奇偶標志。該標志位始終體現(xiàn)累加器Acc中“1”的個數(shù)的奇偶性。如果累加器Acc中“1”的個數(shù)為奇數(shù),則P位置1;當累加器A中“1”的個數(shù)為偶數(shù)(包括0個)時,P位為“0”。
注:在MCS-51中,Z(零)標志對程序員來說不透明,只要累加器Acc為0,Z標志就為1。
例2.1
分析如下指令執(zhí)行后,PSW寄存器各標志位的狀態(tài)。
MOVA,#10101101B ;把立即數(shù)0ADH送累加器A,由于立即數(shù)0ADH中共有5個“1”,
;因此該指令執(zhí)行后,奇偶標志位P為1
ADDA,#01111101B ;0ADH與7DH相加,結果存放在A中
10101101 ;173(無符號數(shù)),-83(帶符號數(shù))
+01111101 ;125(無符號數(shù)),+125(帶符號數(shù))
100101010;作為無符號數(shù)時,和為12AH(由于結果超出FFH,前面的“1”自動丟失,
;寄存器A的內容為2AH),即298;作為有符號數(shù)時,和為2AH,即42
由于b7位向前進位,因此Cy為“1”;b3位也有進位,AC位也為“1”;而作為帶符號數(shù)時,結果為42,沒有超出
-128~+127,OV標志位為“0”。事實上,兩個異號數(shù)相加,結果不會溢出,OV標志為“0”。而A中含有3個“1”,因此P標志位為“1”。
例2.2
分析如下指令執(zhí)行后,PSW寄存器各標志位的狀態(tài)。
MOVA,#10101101B ;把立即數(shù)0ADH送累加器A,由于立即數(shù)0ADH中共有5個“1”,
;因此該指令執(zhí)行后,奇偶標志位P為“1”
ADDA,#10011101B;0ADH與9DH相加,結果存放在A中
10101101;173(無符號數(shù));-83(帶符號數(shù))+10011101;157(無符號數(shù));-99(帶符號數(shù))
101001010;作為無符號數(shù)時,和為14AH(由于結果超出FFH,前面的“1”自
;動丟失,寄存器A內容為4AH),即330
;作為有符號數(shù)時,和為
-182
由于b7位向前進位,因此Cy為“1”;b3位也有進位,AC位也為“1”;而作為帶符號數(shù)時,結果為4AH,即
+74,顯然不對,兩個負數(shù)相加結果也可能為正數(shù)。之所以出錯,是因為
-83加
-99的結果為
-182,超出
-128~+127。因此,OV標志位為“1”。兩個同號數(shù)相加,結果可能溢出,而當OV標志位為“1”時,說明結果不正確。
不難發(fā)現(xiàn)兩個同號數(shù)相加,結果可能溢出;兩個異號數(shù)相加,結果肯定不會溢出。兩個同號數(shù)相減,結果肯定不會溢出;而兩個異號數(shù)相減,結果可能溢出。而當溢出標志OV為1時,表示結果不正確。
RS1、RS0 ;工作寄存器組選擇位,前面已介紹過
F0 ;用戶標志位,可通過位操作指令將該位置1或清0
PSW.1 ;保留位
4)堆棧指針SP
在計算機內,需要一塊具有“先進后出”(FirstInLastOut,F(xiàn)ILO)特性的存儲區(qū),用于存放子程序調用(包括中斷響應)時程序計數(shù)器PC的當前值,以及需要保存的CPU內各寄存器的值(即現(xiàn)場),以便子程序或中斷服務程序執(zhí)行結束后能正確返回主程序。這一存儲區(qū)稱為堆棧區(qū)。為了正確存取堆棧區(qū)內的數(shù)據(jù),需要用一個寄存器來指示最后進入堆棧的數(shù)據(jù)所在存儲單元的地址,堆棧指針SP寄存器就是為此設計的。在增強型MCS-51系列單片機中,SP可以指向內部RAM中任一單元,且堆棧向上生長,即將數(shù)據(jù)壓入堆棧后,SP寄存器內容增大。假設SP當前值為2FH,則入堆指令“PUSHB”(將寄存器B內容壓入堆棧)的執(zhí)行過程如圖2-10所示。
(a)(b)(c)圖2-10“PUSHB”指令的執(zhí)行過程
(a)
PUSHB指令執(zhí)行前;(b)
SP加1;(c)寄存器B內容存入SP指定的單元中將數(shù)據(jù)從堆棧中彈出時,SP減小。例如,將保存在堆棧中的信息彈到寄存器B的操作過程如圖2-11所示。
數(shù)據(jù)入棧的操作過程為:先將SP加1(即SP←SP
+
1),然后將要入棧的數(shù)據(jù)存放在SP指定的存儲單元中。而將數(shù)據(jù)從堆棧中彈出時,先將SP寄存器指定的存儲單元內容傳送到POP指令給定的寄存器或內部RAM單元中,然后SP減1(即SP←SP
-
1)。
可以看出堆棧的底部是固定的,而堆棧的頂部則隨著數(shù)據(jù)入棧和出棧而上下浮動。
(a)(b)(c)
圖2-11“POPB”指令的執(zhí)行過程
(a)
POPB指令執(zhí)行前;(b)將SP指定單元內容傳送到寄存器B中;(c)
SP減1系統(tǒng)復位后,PSW的b4、b3位為00,即選擇了工作寄存器區(qū)中的0區(qū)作為當前工作寄存器區(qū),SP寄存器的初值為07H,當有數(shù)據(jù)進入堆棧時,將從08H單元開始存放,這一般是不允許的,因為08H~1FH屬于工作寄存器區(qū),不宜占用;20H~2FH是位地址區(qū),也需要部分或全部保留。因此,必須通過數(shù)據(jù)傳送指令重新設置SP的初值,將堆棧底部設在30H~7FH(對于只有128字節(jié)內部RAM的8×C31/8×C51)或80H~FFH(對于具有256字節(jié)內部RAM的8×C32/8×C52/54/58)之間,如:
MOVSP,#5FH ;將堆棧設在60H單元之后
MCU內30H~FFH單元既可以作為堆棧區(qū),同時也是用戶數(shù)據(jù)存儲區(qū)。由于數(shù)量有限,必須充分利用。因此,將堆棧底部設在何處,必須認真考慮。隨著入棧數(shù)據(jù)的增多,對于僅有低128字節(jié)內部RAM的80C31、80C51來說,當SP超出7FH時會發(fā)生上溢,這將出現(xiàn)不可預料的后果。因此,在設置SP初值時,必須考慮堆棧最大深度。子程序或中斷嵌套層數(shù)越多,所需的堆棧深度就越大。為了避免堆棧頂部進入用戶數(shù)據(jù)存儲區(qū),造成混亂,一般可將堆棧設在用戶數(shù)據(jù)區(qū)之上,如在某一應用系統(tǒng)中,需要32個字節(jié)作為用戶數(shù)據(jù)存儲區(qū)(如30H~4FH),則初始化時將堆棧底部設在50H,即堆棧深度為48個字節(jié)(50H~7FH)。
MOVSP,#4FH ;SP初值為4FH
對于具有高128字節(jié)的8×C32、8×C52/54/58等MCU來說,最好將堆棧區(qū)設在80H-0FFH之間的高128字節(jié)內部RAM中,而將具有直接尋址功能的低128字節(jié)內部RAM作為用戶數(shù)據(jù)區(qū),以便使用直接尋址方式存取用戶數(shù)據(jù)。當然,SP也不允許超出0FFH,否則同樣會發(fā)生上溢。例如預計某系統(tǒng)所需最大堆棧深度為32字節(jié),可通過如下指令將棧底設在0E0H處。
MOVSP,#0DFH ;SP初值為0DFH
涉及入棧出棧操作的指令有:
PUSHdirect ;將內部RAM單元壓入堆棧中
POPdirect ;從堆棧中將數(shù)據(jù)彈入內部RAM單元中
5)
I/O端口寄存器
P0、P1、P2、P3口寄存器實際上就是P0口~P3口對應的I/O端口鎖存器,用于鎖存通過I/O口輸出的數(shù)據(jù)。
其實在增強型MCS-51中,特殊功能寄存器分別隸屬于MCU內不同的單元電路,具體如下:
CPU單元包含的寄存器:Acc、B、SP、PSW、DPTR、AUXR、AUXR1和程序計數(shù)器PC。
PC是一個16位的地址寄存器,用于存放當前指令碼在程序存儲器中的地址,但PC不屬于特殊功能寄存器,它沒有物理地址。
定時/計數(shù)器單元包含的寄存器:TMOD、TCON、T2CON、T2MOD、TH0與TL0(分別是定時器T0的高8位和低8位)、TH1與TL1(分別是定時器T1的高8位和低8位)、TH2與TL2(分別是定時器T2的高8位和低8位)以及定時器T2的重裝/捕捉寄存器RCAPL2、RCAPH2。并行I/O端口寄存器:P0~P3。
中斷單元電路內的寄存器:IE、IP、IPH。
串行通信單元電路內的寄存器:SCON、SBUF、PCON、SADDR、SADEN。2.3.2程序存儲器
1.程序存儲器結構
對于帶有片內ROM的MCS-51系列單片機來說,片內程序存儲器和外部程序存儲器地址空間重疊。如果引腳為高電平,且程序計數(shù)器PC小于等于片內ROM的地址空間時,將從片內程序存儲器取指令(在這種情況下,信號無效);而當PC超出片內ROM地址空間時,自動到外部程序存儲器取指令,并通過P0口輸出低8位地址(A0~A7),P2口輸出高8位地址(A15~A8)。當VPP引腳為低電平時,一律從外部程序存儲器取指令。因此對于不帶ROM或EPROM的80C31、80C32MCU來說,VPP引腳一律接地。在增強型MCS-51系列單片機中,大部分芯片均內置了不同容量的OTPEPROM(一次性編程的只讀存儲器,即沒有擦除窗口的EPROM)、FlashROM,一般無須使用外部程序存儲器芯片,VPP引腳直接與電源Vcc相連。
增強型MCS-51系列單片機芯片保留的程序存儲器地址空間如下:
系統(tǒng)復位 0000H
外部中斷0()服務程序入口地址 0003H
定時器0中斷服務程序入口地址 000BH
外部中斷1()服務程序入口地址 0013H
定時器1中斷服務程序入口地址 001BH
串行口中斷服務程序入口地址 0023H
定時器2中斷服務程序入口地址 002BH
復位后,程序計數(shù)器PC為0000H,即從程序存儲器的0000H單元讀出第一條指令,因此可在0000H單元內放置一條跳轉指令,如LJMP××××(××××為主程序入口地址標號)。由于系統(tǒng)給每一中斷服務程序預留了8個字節(jié),因此,用戶主程序一般存放在0033H單元以后,如:
ORG0000H ;用偽指令ORG指示隨后的指令碼從0000H單元開始存放
LJMPMain ;在0000H單元存放一條長跳轉指令,共3個字節(jié)
ORG0003H
LJMPINT0 ;跳到外中斷服務程序的入口處
;初始化其他中斷入口地址
ORG50H ;主程序代碼從50H單元開始存放
Main ;Main是主程序入口地址標號
2.程序存儲器讀操作
可以使用數(shù)據(jù)指針DPTR作變址寄存器、累加器Acc作基址寄存器,通過變址尋址方式讀出存放在程序存儲器中的常數(shù),如:
MOVCA,@A+DPTR ;將DPTR
+
A指定的程序存儲器單元信息送累加器Acc2.3.3外部數(shù)據(jù)存儲器
通過P0、P2口最多可以連接64KB的外部數(shù)據(jù)存儲器,有關外部數(shù)據(jù)存儲器的連接及讀寫方式參閱“外存儲器連接”部分。這里先介紹與外部數(shù)據(jù)存儲器訪問方式及有關的寄存器。
在增強型MCS-51芯片中,與外部數(shù)據(jù)存儲器讀寫有關的寄存器包括數(shù)據(jù)指針DPTR、輔助功能寄存器(AUXR)及輔助功能寄存器1(AUXR1),并通過MOVX指令讀寫外部數(shù)據(jù)存儲器,包括:
MOVXA,@Ri ;將Ri寄存器指定的外部RAM單元(低8位外部數(shù)據(jù)存儲器地址存放在;Ri寄存器中,尋址范圍為00H~FFH)內容傳送到累加器A(讀操作)
MOVX@Ri,A ;將累加器A的內容傳送到由Ri寄存器指定的外部RAM單元(寫操作)
MOVXA,@DPTR ;將DPTR寄存器指定的外部RAM單元(16位外部數(shù)據(jù)存儲器地址存放
;在外部數(shù)據(jù)地址寄存器DPTR中,尋址范圍為0000H~FFFFH)內容傳送
;到累加器A(讀操作)
MOVX@DPTR, A ;將累加器A中的內容傳送到由DPTR寄存器指定的外部RAM單元(寫
;操作)
(1)數(shù)據(jù)指針DPTR是一個16位的專用寄存器,由DPH(高8位)和DPL(低8位)組成,用于存放外部數(shù)據(jù)存儲器單元地址。由于DPTR是16位寄存器,因此通過DPTR寄存器間接尋址方式可以訪問0000H~FFFFH全部64KB的外部數(shù)據(jù)存儲器空間。
(2)為了方便外部RAM之間的數(shù)據(jù)塊傳送,增強型MCS-51引入了雙數(shù)據(jù)指針,由輔助功能寄存器1(AUXR1)控制,該寄存器各位含義如下:
AUXR1(字節(jié)為0A2H)
其中:
GF2——可作用戶標志位。
DPS——數(shù)據(jù)指針切換位。當DPS
=
0時,DPTR寄存器對應物理指針DPTR0;當DPS
=
1時,DPTR寄存器對應物理指針DPTR1。
b2位恒為0,且不能寫入。這樣就可以通過INCAUXR1指令快速切換數(shù)據(jù)指針,而不影響GF2標志(由于b2位不能寫入,加1操作時,b1向b2進位將自動丟失,影響不到b7~b3位)。
(3)輔助功能寄存器AUXR。在增強型MCS-51中,新增了輔助功能寄存器AUXR,含義如下:
AUXR(字節(jié)為8EH)
用于禁止/允許地址鎖存信號ALE輸出。當A0為0時,允許ALE輸出;而當A0為1時,除了執(zhí)行“MOVX”指令外,禁止ALE輸出,降低了電磁輻射量。當使用片內程序存儲器時,調試結束后,最好通過“ORLAUXR,#01H”指令關閉ALE輸出(但在仿真調試時,不宜關閉,原因是多數(shù)仿真機依靠ALE工作)。
由于下列原因,在MCS-51系列單片機系統(tǒng)中,可能需要擴展外部存儲器,尤其是外部數(shù)據(jù)存儲器、I/O端口;部分型號芯片,如80C31、80C32沒有內置EPROM或OTPROM,需要外接程序存儲器;2.4MCS-51外部存儲器連接片內數(shù)據(jù)存儲器容量小,當需要大容量數(shù)據(jù)存儲空間時,就需要擴展外部數(shù)據(jù)存儲器;MCS-51可用的I/O引腳數(shù)目有限,常需要擴展I/O口,而在MCS-51中,擴展的并行I/O口是外部數(shù)據(jù)存儲器空間的一部分。因此,在MCS-51系列單片機控制系統(tǒng)中,不可避免地涉及存儲器的擴展問題。在單片機系統(tǒng)中,一般只使用EPROM、E2PROM、FlashROM以及靜態(tài)RAM存儲器芯片擴展系統(tǒng)存儲器,很少使用動態(tài)RAM。因此,外存儲器芯片與MCU的接口電路較簡單,只需考慮如下幾個問題即可:
(1)
MCU三總線(地址總線、數(shù)據(jù)總線、控制總線)的負載能力。MCU三總線可直接驅動一個到數(shù)個TTL門電路。而存儲器多為MOS器件,且直流輸入阻抗高,直流負載很小,但輸入電容較大。因此,當存儲器芯片與MCU連接時,只需考慮交流負載能力。在單片機應用系統(tǒng)中所需存儲器容量不大,一般只有幾千字節(jié)~幾十千字節(jié),MCU三總線交流負載較小。因此,MCU三總線可直接與存儲器芯片三總線相連,MCU和存儲器之間不必加總線驅動器或總線緩沖器,減少了系統(tǒng)中芯片的數(shù)目和電路板的面積,也降低了系統(tǒng)的成本和功耗。
但是當擴展存儲器容量較大時,交流負載較重,可能需要在MCU三總線和存儲器之間加總線驅動器,以提高MCU三總線的負載能力?;蛳到y(tǒng)中存在其他的總線控制設備,如DMA控制器或另一個MCU時,往往需要在MCU三總線和存儲器之間加接帶有三態(tài)輸出的總線緩沖器或收發(fā)器,以便其他總線主設備使用總線。
(2)確定存儲器三總線與MCU三總線之間的連接方式。即需要確定存儲器地址總線與MCU地址總線的連接方式,存儲器數(shù)據(jù)總線與MCU數(shù)據(jù)總線的連接方式,存儲器控制線
(讀/寫控制信號、片選信號、輸出允許信號)與MCU相應控制線的連接方式。
(3)CPU讀寫時序與存儲器存取速度的匹配問題。存儲器的讀寫速度應與CPU要求的讀寫速度相同或更快,否則必須降低CPU時鐘信號的頻率或選用讀寫速度更快的存儲器芯片。因為在單片機系統(tǒng)中,CPU讀寫時序不是通過插入等待狀態(tài)來存取低速的外存儲器芯片。對于采用“地址/數(shù)據(jù)”分時復用的CPU,在“地址/數(shù)據(jù)”總線后,必須接鎖存器芯片,鎖存地址信號,以便可靠尋址。2.4.1CPU地址線與存儲器地址線的連接
CPU地址總線與存儲器的連接方式有兩種,即高位地址譯碼法和線選法。在高位地址譯碼法中,根據(jù)地址線連接方式又分為全譯碼法和部分譯碼法兩種形式。
1.全譯碼法
當系統(tǒng)中存儲器芯片多于一片時,常采用高位地址譯碼法,即將CPU地址總線的低位地址作為存儲器的片內譯碼信號,與存儲器的地址總線直接相連。而CPU的高位地址線經(jīng)過譯碼器譯碼后產(chǎn)生的信號作為不同存儲器芯片的片選信號或擴展I/O口的選通信號。如果CPU所有的地址線均參與譯碼,系統(tǒng)中任一存儲器芯片的任一存儲單元將有惟一的地址編碼,那么這種高位地址譯碼法稱為全譯碼法,如圖2-12所示。
圖2-12存儲器與CPU的連接方式一(全譯碼法)在圖2-12所示電路中,假設CPU的地址總線寬度為16位,最大尋址范圍為64KB。IC1及IC2的地址線A13~A0分別連接到CPU的低14位地址線A13~A0上,IC1及IC2的片選信號分別連接到IC3的譯碼輸出端和。IC1及IC2的輸出允許與CPU的程序存儲器讀選通信號相連。IC3的譯碼允許端接地,使IC3處于譯碼輸出允許狀態(tài)。根據(jù)74HC139譯碼器的真值表可知:
當A15、A14為低電平時,輸出低電平,而其他輸出端為高電平,即IC1被選中。因此,IC1的地址范圍是0000H~3FFFH。當A15為低電平,A14為高電平時,輸出低電平,而其他輸出端為高電平,即IC2被選中。因此,IC2的地址范圍是4000H~7FFFH。
顯然,在圖2-12中,IC1和IC2的任一存儲單元均有惟一的地址編碼,不存在地址重疊現(xiàn)象,這是全譯碼電路的主要特征之一。
2.部分譯碼法
部分譯碼法與全譯碼法相似,區(qū)別僅在于:在部分譯碼電路中,有些地址線不參與譯碼,存儲器中某一存儲單元的地址編碼不惟一,有兩個或兩個以上的地址空間與之對應,如圖2-13所示。
圖2-13存儲器與CPU的連接方式二(部分譯碼法)在圖2-13所示的電路中,當A14為低電平時,IC1的片選信號輸入端為低電平,即IC1被選中。但由于A15未參與譯碼,不論A15是高電平還是低電平,IC1片選信號均有效。因此,IC1的地址范圍是0000H~3FFFH(A15為低電平時)或8000H~BFFFH(A15為高電平)。換句話說,在這種情況下,IC1中任一存儲單元均有兩個地址編碼與之對應,如0000H和8000H實際上均指向IC1中編號為0000H的存儲單元。而高位地址線A14經(jīng)IC3A反相后接IC2的引腳,可見當A14為高電平時,IC2的片選信號輸入端有效。因此,IC2的地址范圍是4000H~7FFFH(A15為低電平時)或C000H~FFFFH(A15為高電平)。
顯然,在圖2-13所示的電路中,不僅存儲單元地址編碼不惟一,而且重疊的地址空間將不能再分配給其他的存儲器芯片,未能發(fā)揮CPU的尋址能力。但當CPU尋址范圍較大,而所需的外存儲器容量較小時,這一缺陷并不突出。
在單片機系統(tǒng)中,外部程序存儲器容量不很大,常選用圖2-13所示的連接方式,并假設A15為低電平,即使用低地址空間。
3.線選法
如果CPU的尋址能力較大,而系統(tǒng)實際所需的存儲器容量較小時,為簡化系統(tǒng)電路連線,直接用CPU的高位地址線作為存儲器芯片的片選信號,如圖2-14所示。
圖2-14存儲器與CPU的連接方式三(線選法)在圖2-14所示的電路中,IC1、IC2低電平有效片選信號連在一起并與CPU地址線A15相連;IC1高電平有效片選信號CS2直接與CPU的地址線A13相連;IC2高電平有效片選信號CS2直接與CPU的地址線A14相連。
當A15為低電平,A14為低電平,而A13為高電平時,IC1片選信號、CS2有效,因此IC1存儲單元的地址編碼為2000H~3FFFH;反之,當A15為低電平,A14為高電平,而A13為低電平時,IC2的片選信號、CS2有效,因此IC2存儲單元的地址編碼為4000H~5FFFH。然而當A15為低電平,A14、A13均為高電平時,IC1和IC2將同時被選中。在種情況下,將出現(xiàn)混亂,因此,在圖2-14所示的電路中,不允許使用6000H~7FFFH的地址空間。
可見,線選法會出現(xiàn)兩個芯片同時被選中的現(xiàn)象,從而造成部分地址空間不能用。當用該方法連接程序存儲器時,如果禁用的存儲空間正好包含程序計數(shù)器PC復位后的初值,則不宜采用線選法連接方式。此外也可能存在地址重疊現(xiàn)象。2.4.2MCS-51控制系統(tǒng)中程序存儲器的連接
目前EPROM、E2PROM、FlashROM存儲器芯片品種、規(guī)格多,且大容量存儲器芯片價格并不高。因此,在由80C31、80C32等CPU構成的單片機控制系統(tǒng)中,一般可根據(jù)程序代碼的長短,選擇相應容量的單片EPROM(目前多為OTPROM)、E2PROM或FlashROM芯片作為系統(tǒng)的程序存儲器,以減少控制系統(tǒng)芯片的數(shù)目和電路板的面積,降低成本,提高系統(tǒng)的可靠性。
例如,當程序大小在4~8KB之間時,可以選擇一片2764EPROM芯片或28C64E2PROM芯片作為程序存儲器;而當程序大小在8~16KB之間時,可以選擇一片27128EPROM芯片作為程序存儲器;又如,當程序大小在16~32KB之間時,可以選擇一片27256EPROM芯片、28C256E2PROM芯片或28F256AFlashROM芯片作為程序存儲器;當程序代碼超過32KB時,可以選擇27C512、28F512等芯片作為程序存儲器。
當使用單個存儲器芯片時,存儲器片選信號一般可直接接地,MCS-51芯片外部程序存儲器讀選通信號與存儲器芯片相連,如圖2-15所示。
圖2-15單片EPROM存儲器芯片與80C31CPU的連接由于MCS-51采用地址/數(shù)據(jù)分時復用技術,低8位地址A7~A0與數(shù)據(jù)總線D7~D0分時使用P0口引腳,因此在存儲器低8位地址A7~A0之間需要加74LS573或74HC373鎖存器,利用ALE地址鎖存信號下降沿將低8位地址信號A7~A0鎖存到74LS573或74HC373中,以便P0口作數(shù)據(jù)總線使用。
由于近年來集成電路制造技術、生產(chǎn)工藝的不斷進步,在單片機芯片中內置OTPROM、FlashROM存儲器已成為趨勢,且價格低廉,目前市場見到的MCS-51兼容單片機芯片幾乎都帶有不同種類、不同容量的片內程序存儲器,如含有OTPROM的87C51、87C52、87C54、87C58,以及含有FlashROM的89C51、89C52、89C54、89C58等MCS-51兼容芯片不僅價格低廉,而且同系列、不同程序存儲器容量芯片之間的價差很小。盡管89C58片內程序存儲器容量為32KB,是89C54片內程序存儲器容量的兩倍,但價差不大。此外,編程設備多,價格也不高。因此,在工作頻率不高的MCS-51單片機控制系統(tǒng)中,幾乎不再采用沒有片內程序存儲器的80C31、80C32芯片(在研發(fā)階段,采用可反復擦寫的89C5×/89C5××2芯片,在批量生產(chǎn)階段可采用價格較低的、以OTPROM作為程序存儲器的87C5×/87C5××2芯片),硬件設計時無須擴展外部程序存儲器,僅需考慮數(shù)據(jù)存儲器和I/O端口擴展。2.4.3數(shù)據(jù)存儲器的連接
在MCS-51單片機系統(tǒng)中,外部數(shù)據(jù)存儲器空間與程序存儲器空間分離,對于外部數(shù)據(jù)存儲器來說,通過外部數(shù)據(jù)存儲器就可以讀選通信號
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新型車庫照明系統(tǒng)升級改造與定期維護服務協(xié)議
- 2025年城市社區(qū)健康服務采購協(xié)議書模板
- 2025年全球化工項目原料采購及質量控制合同協(xié)議
- 2025年度高端醫(yī)療影像設備全面維護與升級服務協(xié)議
- 2025年個性化別墅租賃合同定制簽訂流程解析
- 2025年校園清潔保潔與安保服務派遣合同范本
- 2025年度道路交通事故車輛評估與全額賠償協(xié)議書
- 2025年特殊教育學校校車租賃與綜合車輛保養(yǎng)維修合同
- 2025年度虛擬現(xiàn)實游戲團隊選手專屬服務協(xié)議
- 2025年醫(yī)療器械全生命周期維護與安全評估合同
- 民豐縣盼水河鉛銻礦工程項目環(huán)境影響報告書
- 2025-2030中國高速示波器行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 餐飲業(yè)安全生產(chǎn)管理制度匯編
- 新修訂《普通高中數(shù)學課程標準》的解讀與思考
- 《空調維護培訓資料》課件
- 醫(yī)院節(jié)能培訓課件
- 混凝土質量保證措施
- 煙氣CEMS在線比對驗收調試報告附表D.1-12計算公式(HJ-75-2017)
- 學生請假安全協(xié)議書
- 隱形眼鏡項目風險管理分析
- 過敏性休克應急處置流程
評論
0/150
提交評論