至今為止,MCS-51系列單片機有許多種型號的產(chǎn)品:其中又分為普通型51(8031、8051、89S51)和增強型52(8032、8052、89S52等)。它們最大的區(qū)別在于存儲器配置各有差異。下面我舉例子的都是8051這一系列的單片機。
目錄
8051單片機的構(gòu)成
CPU
??計算器
??計算單元及其寄存器
??PSW寄存器
??控制器
ROM
RAM
??特殊功能寄存器SFR與寄存器
??RAM內(nèi)部存儲分布
??RAM外部存儲區(qū)
IO口
??特殊引腳
??P3.x
8051單片機的構(gòu)成
下面是51單片機的板內(nèi)基本構(gòu)成,其共分為8大模塊和連接它們的系統(tǒng)總線。8大模塊是:CPU、ROM(內(nèi)部程序存儲器)、RAM(內(nèi)部數(shù)據(jù)存儲器)、中斷系統(tǒng)、并行端口、串行端口、計數(shù)器和時鐘電路。?
??一、首先是CPU,8051是8位CPU,CPU由運算器和控制器組成,其中運算器ALU負(fù)責(zé)邏輯和二進制運算;控制器負(fù)責(zé)翻譯指令和協(xié)同單片機各模塊有序工作。
??二、ROM,ROM是程序存儲器,我們單片機的程序、原始的數(shù)據(jù)就存在這里。8051單片機片內(nèi)有4KB空間的ROM。8051地址總線有16條,所以地址空間為0000H-FFFFH,而ROM的地址空間為0000H-0FFFH共有2^12=4096個地址。又因為8051的數(shù)據(jù)總線有8條,所以存儲空間為4096*8=32768bit=4KB。
??三、RAM,RAM為數(shù)據(jù)存儲器,其共占256個字節(jié)單元,其中高128位為21個特殊功能寄存器SFR,低128位為供給用戶使用。
??四、定時器和計數(shù)器,8051有2個16位的定時器。
??五、并行I/O口,8051片內(nèi)有4個8位的并行IO口,他們可用于輸入(input)和輸出(ouput)。這八個IO口為P0、P1、P2、P3。
- P0口用作8位數(shù)據(jù)總線或低8位的地址總線的數(shù)據(jù)傳輸;
- P1口常用作一般數(shù)據(jù)IO口;
- P2口常用作高8位地址總線數(shù)據(jù)傳輸;
- P3口常用作特殊功能的輸入輸出。
??六、串行串口,單片機有2個1位的串行串口,其中包含輸出口TXD和輸入口RXD,可用作執(zhí)行串口通信的模式。
??七、中斷控制,MSC-51有5個中斷,包含2個外部中斷源、1個串行中斷源和2個定時器中斷源。中斷可以將正在執(zhí)行的程序掛起而執(zhí)行其它功能后再回來執(zhí)行該程序。
??八、擴展部分,如果片內(nèi)空間不夠,我們還可以擴展64KB的片外ROM和64KB的片外RAM。
CPU
??計算器
??計算單元及其寄存器
前面說過,CPU的組成部件大概是運算器和控制器。
首先是運算器,運算器是進行算術(shù)運算(加減乘除等運算)、邏輯運算(取反、抑或、與非等運算)和位操作等操作的。
其中我們的操作的結(jié)果狀態(tài)都會被存到狀態(tài)寄存器PSW中。
其中運算器組成由算數(shù)運算單元ALU、8位的數(shù)據(jù)累加器ACC、8位的寄存器B、8位的程序狀態(tài)寄存器PSW、8位暫存器TMP1、TMP2組成:
?其中ALU負(fù)責(zé)完成傳過來的數(shù)字的運算,然后將運算結(jié)果的狀態(tài)傳輸給PSW寄存器,并且將運算結(jié)果傳送給ACC(簡稱A),所以A就是我們數(shù)據(jù)進出ALU計算單元的守門員。然后還有B寄存器,B寄存器一般用于乘法、除法高字節(jié)運算時放除數(shù)或者余數(shù)。其余時刻可做通用寄存器使用。
??PSW寄存器
PSW寄存器是一個8位寄存器,它會存放著我們ALU計算后的結(jié)果的狀態(tài)。我們看看它里面8位分別會存儲什么信息:
我們可以看到其8個位中有7個已經(jīng)有存儲信息的作用了(下面1默認(rèn)為有):
D7是存儲的是運算時是否向最高位借位/進位了;
D6存儲的是計算時低4位是否有向高四位借位/進位了;
D5為用戶標(biāo)志位;
D4和D3為工作寄存器選擇標(biāo)準(zhǔn)位,通過改變這兩個位數(shù)可以挑選我們RAM中的4個工作寄存器。
D2溢出標(biāo)志位,如果結(jié)果超過8位數(shù)的表達范圍,則被置為1;
D1未定義;
D0奇偶校驗位,如果計算結(jié)果有奇數(shù)個1則為1,反之則為0。
??控制器
接下來我們來看看控制器,控制器的功能是對指令進行譯碼,然后將指令對應(yīng)的工作分發(fā)下去。其中與這些功能實現(xiàn)有關(guān)的部件有:
時鐘發(fā)生器、指令地址寄存器IR、指令譯碼器ID、數(shù)據(jù)指針DPTR、程序計數(shù)器PC和堆棧指針SP等。?
其中IR就是負(fù)責(zé)將指令暫存起來,交給ID翻譯出對應(yīng)的指令后就通過控制的電路將控制信號發(fā)送出去給各執(zhí)行部件。ID負(fù)責(zé)將指令翻譯成對應(yīng)的操作。而程序寄存器PC負(fù)責(zé)存儲即將執(zhí)行的下一個指令的地址,每當(dāng)我們執(zhí)行完一個指令后PC會自動加一。因為PC沒有地址,所以用戶本身無法對PC進行訪問,但可以通過某些指令修改其內(nèi)容,因為地址總線有16根,所以自然而然PC就是一個16位的寄存器。
而對于SP,SP是專門寄存堆棧存儲位置地址的寄存器。最后的DPTR由兩部分組成,包括低8位的DPL寄存器和高8位的DPH寄存器,其功能是專門用來存儲片外RAM數(shù)據(jù)的地址寄存器。
MCS-51的存儲部分共分為兩部分四塊,片內(nèi)的ROM和片外的ROM,片內(nèi)的RAM和片外的RAM。其中片內(nèi)的ROM大小為4KB,片外ROM大小為64KB,片內(nèi)RAM大小為256B,片外RAM大小為64KB。
ROM
ROM的作用是存儲用戶編好的程序,內(nèi)部ROM大小為4KB,因為PC位數(shù)是16,所以可以擴展到64KB的尋址空間。
對于ROM來說,它會有一個EA描述,當(dāng)EA=1時,單片機內(nèi)外都會用統(tǒng)一的地址,片內(nèi)0-4KB地址范圍為000H-FFFH,而新擴展的片外RAM地址為1000-FFFFH,舍棄片外0-4KB間的空間。而當(dāng)EA=0時,只能執(zhí)行片外的ROM程序,舍棄片內(nèi)0-4KB的空間,此時地址為0000H-FFFFH

?而ROM本身就存儲了很多程序入口,即存在許多具有特殊功能的單元,下圖為一些特殊功能單元的位置,其中包括1個復(fù)位后的PC指向位置和6個中斷執(zhí)行的地址位置,這些位置注意不要占用。由于復(fù)位后下一條指令會在0000H處。所以我們一般匯編代碼第一句就會在此處寫一個跳轉(zhuǎn)指令跳轉(zhuǎn)到主程序的入口。
RAM
??特殊功能寄存器SFR與寄存器
MCS-51有32個工作寄存器(00H-01FH),它們共分為四個組,每個組有8個通用寄存器(R0-R7)。前面PSW中的狀態(tài)位RS1RS0就是用來確定由哪個組的寄存器們工作,并且每一個時刻只能由一個組的寄存器來工作。其中R0和R1除了做工作寄存器外還會做間接尋址的地址指針。
而除了平常我們用到的工作寄存器外,還有一些特殊功能寄存器分布在80H-FFH中,共占據(jù)高128個字節(jié)的存儲工具,其中地址能夠被8整除的SFR都能夠進行位尋址。
??RAM內(nèi)部存儲分布
上圖為RAM中256字節(jié)存儲分布,其中共分為4大部分:工作寄存器區(qū)、位尋址區(qū)、通用RAM區(qū)和SFR區(qū)。?
??工作寄存器區(qū)
其中工作寄存器區(qū)00H-01FH共存放32個寄存器,一旦某一組被確定是工作寄存器后,其內(nèi)部就會根據(jù)地址高低按字節(jié)為單位劃分出R0-R7,8個通用寄存器,就可以被尋址訪問。那么另外三組原先占據(jù)的位置就可以被我們用來讀寫。
??位尋址區(qū)
位尋址區(qū)位于20H-2FH之間,它占了16個字節(jié)的存儲單位,這個區(qū)的地址單元除了原來的字節(jié)操作以外還可以進行位操作。
??用戶區(qū)
在位操作區(qū)上面、專用寄存器區(qū)下面(30H-7FH)還有一個區(qū)被稱為用戶區(qū),這個區(qū)用來存放數(shù)據(jù)運算的結(jié)果的。但是我們可以選擇作為用戶區(qū)的空間不止這里,我們還可以選擇沒有用到的工作寄存器的位置作為用戶區(qū)使用。
??堆棧區(qū)
在這些區(qū)之外,我們還可以開一個堆棧區(qū),人為地去設(shè)計一個堆棧結(jié)構(gòu)。而這個堆棧結(jié)構(gòu)一般我們選取在用戶區(qū)比較靠后的位置。有了堆棧區(qū)之后,我們就可以在其內(nèi)部寫入中斷操作和子程序了。特別值得注意的一點是:一般我們會選擇先將堆棧指針加加之后再往其指向的內(nèi)部存儲空間放入數(shù)據(jù)。設(shè)置堆棧區(qū)的一個重要的功能就是保護斷點和保護現(xiàn)場。當(dāng)我們執(zhí)行中斷操作時,我們需要中斷結(jié)束后繼續(xù)返回原程序執(zhí)行,這就是保護斷點;而保護現(xiàn)場是指當(dāng)我們主程序和中斷程序用到同一個寄存器,那么我們中斷服務(wù)函數(shù)會提前將其放入堆棧區(qū)中。
??SFR
SFR又稱為特殊功能寄存器,這個位置存放的寄存器也就是我們在CPU的控制部分、運算部分、IO部分等等地方用到的寄存器,那些寄存器就來自此處。其中SFR中地址能被8整除的都被被位尋址。
我們常見的SFR特殊寄存器就包括:累加器A、寄存器B、PSW寄存器、PC、SP、DPTR、SBUF、IP、IE等等。
在我們進行復(fù)位時,單片機內(nèi)位尋址區(qū)即20H-2FH的標(biāo)志位狀態(tài)不會變,而特殊功能寄存器SFR和工作寄存器R0-R7會被清0。
??RAM外部存儲區(qū)
對于RAM的外部存儲區(qū),我們需要注意外部RAM最大可擴容到64KB,并且對于外部的數(shù)據(jù)存儲器來說。數(shù)據(jù)區(qū)和外擴IO口是統(tǒng)一進行編址的,所以我們要保證RAM和IO口的端口地址分配合理,以此保證譯碼唯一。
IO口
IO口是單片機輸入或者輸出的通道,8051有32個并行的IO口,分別為P0.x、P1.x、P2.x和P3.x。這些引腳除了可以作為通用引腳外還可自動切換為數(shù)據(jù)總線、地址總線和控制總線的外部引腳。
?上面除了IO引腳以外,還有幾個特殊的引腳。
??特殊引腳
特殊的引腳首先是VCC和GND,它們分別是驅(qū)動電壓和接地,一般驅(qū)動電壓是5V。
XTAL2、XTAL1分別連接晶體震蕩器的信號輸出和晶體振蕩器的信號輸入,需要外接一個震蕩電路,這震蕩信號可以幫助設(shè)置單片機時鐘:
?ALE/PROG是地址鎖存信號端;
PSEN是外部程序存儲器讀取信號端;
EA/Vpp是程序存儲器選擇信號端和編程電源信號輸入端,就是我們之前控制訪問外部ROM時地址是在原來內(nèi)部ROM的地址基礎(chǔ)上擴展還是舍棄內(nèi)部ROM直接全部采用外部ROM;
RST/VPD是復(fù)位端,通常接復(fù)位電路;
??P3.x
對于P3.x口來說它會和其它引腳不同,自然它可以作為IO口進行輸入和輸出,但是它支持的第二功能更加豐富:
P3.0--RXD串行數(shù)據(jù)輸入口;
P3.1--TXD串行數(shù)據(jù)輸出口;
P3.2--INT0外部中斷0;
P3.3--INT1外部中斷1;
P3.4--T0定時/計數(shù)器0外部計數(shù)脈沖輸入端;
P3.5--T1定時/計數(shù)器1外部計數(shù)脈沖輸入端;
P3.6--WR片外RAM寫選信號輸出端;文章來源:http://www.zghlxwxcb.cn/news/detail-783340.html
P3.7--WR片外RAM讀選信號輸出端;文章來源地址http://www.zghlxwxcb.cn/news/detail-783340.html
到了這里,關(guān)于【MCS-51】51單片機結(jié)構(gòu)原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!