MCS-51 單片機(jī)內(nèi)部組成部分詳解
中央處理器(CPU)
MCS-51單片機(jī)的CPU字長(zhǎng)為8位,內(nèi)部包含運(yùn)算器、控制器和特殊功能寄存器。由于特殊功能寄存器在功能和使用方法方面與存儲(chǔ)器比較相似,因此將與存儲(chǔ)器一同講解。本小節(jié)僅介紹運(yùn)算器和控制器的基本情況。
1.運(yùn)算器
運(yùn)算器包含1個(gè)8位的算術(shù)邏輯運(yùn)算單元(ALU)、2個(gè)暫存器(TMP1和TMP2)、累加器ACC、寄存器B、程序狀態(tài)字寄存器(PSW)和1個(gè)布爾處理器。
算術(shù)邏輯運(yùn)算單元ALU可以進(jìn)行1個(gè)字節(jié)(8位二進(jìn)制數(shù))的加、減、乘、除等算術(shù)運(yùn)算和“與”“或”“非”等邏輯運(yùn)算。
累加器ACC和寄存器B均是8位寄存器。進(jìn)行算術(shù)邏輯運(yùn)算時(shí),ACC提供數(shù)據(jù)和保存運(yùn)算結(jié)果。在進(jìn)行乘、除法運(yùn)算時(shí),寄存器B與ACC配合,提供數(shù)據(jù)并保存運(yùn)算結(jié)果。
程序狀態(tài)寄存器PSW是8位寄存器,其中的二進(jìn)制位用于記錄算術(shù)邏輯運(yùn)算結(jié)果的狀態(tài),如加法是否產(chǎn)生進(jìn)位、有符號(hào)運(yùn)算結(jié)果的符號(hào)等。
布爾處理器以PSW中的最高位CY為位累加器,可以進(jìn)行1個(gè)二進(jìn)制位的邏輯運(yùn)算,包括“與”“或”“非”等操作。
2.控制器
控制器是CPU的核心,控制、協(xié)調(diào)整個(gè)單片機(jī)系統(tǒng)的工作,包括程序計(jì)數(shù)器(PC)、指令寄存器(IR)、指令譯碼器(ID)、地址寄存器(AR)、時(shí)鐘振蕩器和定時(shí)控制電路等。
程序計(jì)數(shù)器PC是16位的寄存器,PC中的數(shù)作為地址指向程序存儲(chǔ)器,由其確定接下來CPU將從程序存儲(chǔ)器中的哪一個(gè)字節(jié)單元讀取指令代碼。單片機(jī)讀取一條指令,PC中地址將自動(dòng)改變,以指向下一個(gè)讀取指令的存儲(chǔ)單元。因?yàn)镻C所提供的地址是16位的,所以MCS-51單片機(jī)所支持的程序存儲(chǔ)區(qū)最大容量為216個(gè)字節(jié)單元,即64KB,其地址范圍為0000H~FFFFH。
地址寄存器AR將接收PC的值,該值將被送上地址總線,用于選中程序存儲(chǔ)器的存儲(chǔ)單元。之后,該存儲(chǔ)單元中存放的指令代碼,將通過數(shù)據(jù)總線傳送給IR。
IR中的指令代碼將被送入ID。ID翻譯該指令代碼后,CPU將產(chǎn)生控制信號(hào),用于控制單片機(jī)完成指令代碼所指定的操作。
可見,PC的值決定了CPU取指令的順序,也決定了程序執(zhí)行的順序。
時(shí)鐘振蕩器和定時(shí)控制電路的作用是產(chǎn)生時(shí)鐘信號(hào),該時(shí)鐘信號(hào)起到指揮的作用,用于協(xié)調(diào)單片機(jī)各部件相互配合、有序工作。
存儲(chǔ)器和寄存器
單片機(jī)內(nèi)部可以存放信息的硬件資源包括存儲(chǔ)器和寄存器。存儲(chǔ)器可以分為兩類,分別是存儲(chǔ)程序的程序存儲(chǔ)器(ROM)和存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)器(RAM)。存儲(chǔ)器按照其所處位置又可以被分為片內(nèi)和片外兩種。寄存器通常具有某些特殊的功能,被稱為特殊功能寄存器(Special Function Register,SFR)。
1.片內(nèi)數(shù)據(jù)存儲(chǔ)器
MCS-51單片機(jī)片內(nèi)RAM的地址范圍如圖2-4所示,其中52子系列單片機(jī)的高128B RAM又被稱為附加RAM區(qū)。
圖2-4 MCS-51單片機(jī)片內(nèi)數(shù)據(jù)存儲(chǔ)器(RAM)的地址范圍
a)51子系列b)52子系列
2.特殊功能寄存器
MCS-51單片機(jī)內(nèi)部有很多特殊功能寄存器。特殊功能寄存器不但有地址,而且還有專屬的符號(hào)名稱(如PCON、SCON和PSW等)。圖2-4可以發(fā)現(xiàn),特殊功能寄存器的地址范圍為80H~FFH,與52子系列單片機(jī)片內(nèi)RAM高128B單元的地址范圍重疊。因此,在通過地址訪問片內(nèi)RAM高128B存儲(chǔ)單元和特殊功能寄存器時(shí),必須通過數(shù)據(jù)的尋址方式明確該地址對(duì)應(yīng)的是片內(nèi)RAM還是SFR。特殊功能寄存器的尋址方式是直接尋址,片內(nèi)RAM高128B單元的尋址方式是寄存器間接尋址。
“尋址”是匯編源程序設(shè)計(jì)中的概念,本書將在第3章的3.3節(jié)中詳細(xì)介紹與尋址有關(guān)的知識(shí)。
另外,某些特殊功能寄存器中的二進(jìn)制位也有地址,即位地址。有位地址的位可以通過位尋址的方式單獨(dú)訪問。
需要特別注意的是,只有字節(jié)地址能夠被8整除的特殊功能寄存器中的位才有位地址,才能按位尋址。
3.片內(nèi)數(shù)據(jù)存儲(chǔ)器的劃分
片內(nèi)數(shù)據(jù)存儲(chǔ)器的不同區(qū)域有不同的尋址方式,其劃分如圖2-5所示。為了強(qiáng)調(diào)區(qū)分特殊功能寄存器區(qū)與52子系列附加通用RAM區(qū)的方法,圖2-5中也給出了SFR區(qū)的尋址方式。
圖2-5片內(nèi)數(shù)據(jù)存儲(chǔ)器的劃分
(1)工作寄存器區(qū)
工作寄存器區(qū)共有32個(gè)字節(jié),分成0區(qū)、1區(qū)、2區(qū)和3區(qū),共4個(gè)子區(qū),見表2-4。每個(gè)子區(qū)均有R0~R7共8個(gè)工作寄存器。單片機(jī)CPU每一時(shí)刻只能使用一個(gè)工作寄存器子區(qū),所用寄存器子區(qū)由PSW寄存器的PSW.4位和PSW.3位決定,見表2-4。工作寄存器區(qū)中的所有寄存器均可以通過寄存器尋址、直接尋址和寄存器間接尋址的方式訪問。
(2)位尋址區(qū)
位尋址區(qū)的每個(gè)字節(jié)都有字節(jié)地址,可以通過直接尋址和寄存器間接尋址的方式訪問。另外,位尋址區(qū)中的每個(gè)位都有地址,即位地址,可以通過位尋址方式單獨(dú)訪問,見表2-5。
(3)通用RAM區(qū)
MCS-51單片機(jī)的低128B通用RAM區(qū)可以采用直接尋址和寄存器間接尋址的方式訪問,
而52子系列的高128B通用RAM區(qū)僅能采用寄存器間接尋址的方式訪問。
4.片外數(shù)據(jù)存儲(chǔ)器和I/O接口
MCS-51單片機(jī)可以擴(kuò)展64KB的片外數(shù)據(jù)存儲(chǔ)器,其地址范圍如圖2-6所示。需要特別指出的是,單片機(jī)的片外擴(kuò)展I/O空間與片外RAM的地址是統(tǒng)一編址的,即在0000H~0FFFFH共64K個(gè)地址中,一部分地址分配給片外RAM,一部分地址分配給片外擴(kuò)展的I/O接口,也可以全部地址都分配給片外RAM或I/O接口。因?yàn)槭墙y(tǒng)一編址的,所以在程序中訪問片外RAM和片外擴(kuò)展I/O接口的指令相同。
圖2-6片外數(shù)據(jù)存儲(chǔ)器(RAM)區(qū)或片外擴(kuò)展I/O區(qū)的地址范圍
另外,片外RAM區(qū)(或片外擴(kuò)展I/O區(qū))與片內(nèi)RAM區(qū)是獨(dú)立編址的,即圖2-5中片內(nèi)RAM區(qū)地址00H~FFH不會(huì)分配給片外RAM區(qū)(或片外擴(kuò)展I/O區(qū)),同樣,圖2-6中片外RAM區(qū)(或I/O區(qū))地址0000H~0FFFFH也不會(huì)分配給片內(nèi)RAM區(qū)。因?yàn)槭仟?dú)立編址的,所以訪問片內(nèi)RAM區(qū)和訪問片外RAM區(qū)(或片外擴(kuò)展I/O區(qū))時(shí)所用的指令不同。
5.程序存儲(chǔ)器
程序存儲(chǔ)器(ROM)用來存放代碼,MCS-51單片機(jī)除片內(nèi)ROM外,還可以擴(kuò)展
64KB的片外程序存儲(chǔ)器。圖2-7給出了程序存儲(chǔ)器的配置,圖中的EA是單片機(jī)的引腳,
決定了單片機(jī)是否使用片外程序存儲(chǔ)器。由圖2-7可知,當(dāng)EA=0時(shí),單片機(jī)只能使用片外
程序存儲(chǔ)器;當(dāng)EA=1時(shí),對(duì)于51子系列單片機(jī),地址為0000H~0FFFH的存儲(chǔ)單元來自于片內(nèi)ROM,對(duì)于52子系列單片機(jī),地址為0000H~1FFFH的存儲(chǔ)單元來自于片內(nèi)ROM,其他地址所對(duì)應(yīng)的存儲(chǔ)單元?jiǎng)t均來自于片外ROM。
圖2-7程序存儲(chǔ)器的配置
a)EA=0
b)51子系列單片機(jī)且EA=1 c)52子系列單片機(jī)且EA=1
在單片機(jī)程序中,有一類被稱為中斷服務(wù)子程序的特殊子程序,專用于處理中斷源所產(chǎn)生的中斷事件。在程序存儲(chǔ)器中,有一塊區(qū)域?qū)S糜诖娣胖袛喾?wù)處理子程序的指令代碼。
以51子系列單片機(jī)為例(見表2-1),該系列單片機(jī)有5個(gè)中斷源,分別是INT0、T0、
INT1、T1和串口中斷,它們的中斷服務(wù)處理程序在ROM中的存放地址分別為0003H、000BH、0013H、001BH和0023H,這些地址被稱為中斷服務(wù)處理程序的入口地址,如圖2-8所示。程序存儲(chǔ)器的地址0000H對(duì)應(yīng)于復(fù)位入口,即主程序的入口,單片機(jī)開始工作時(shí)將首先從程序存儲(chǔ)器中地址為0000H的存儲(chǔ)單元中取指令的。
圖2-8中斷服務(wù)處理子程序的入口
需要注意,比較中斷服務(wù)處理程序的中斷入口地址后,可以發(fā)現(xiàn)相鄰入口地址之間的差很小,如:T0中斷入口與INT0中斷入口之差為000BH-0003H=8H。這意味著如果T0中斷與INT0中斷的中斷服務(wù)處理程序都存在,則INT0中斷服務(wù)處理程序的長(zhǎng)度不能超過8B,否則將占用T0中斷服務(wù)處理程序的存儲(chǔ)空間。解決這一問題的方法是,將中斷服務(wù)處理子程序存放在ROM的其他位置,而僅在中斷入口存儲(chǔ)單元存放一條能跳轉(zhuǎn)至中斷服務(wù)處理程序的跳轉(zhuǎn)指令。