單片機(jī)的存儲器、寄存器
單片機(jī)的存儲器有程序存儲器ROM與數(shù)據(jù)存儲器RAM兩種。 這兩種存儲器在使用上是嚴(yán)格區(qū)分的,不得混用。 程序存儲器存放程序指令,以及常數(shù),表格等;而數(shù)據(jù)存儲器則存放緩沖數(shù)據(jù)。
MCS-51單片機(jī)存儲器的結(jié)構(gòu)共有3部分:一是程序存儲器二是內(nèi)部數(shù)據(jù)存儲器 三是外部數(shù)據(jù)存儲器MCS-51單片機(jī)的存儲器可分為5類:程序存儲器、內(nèi)部數(shù)據(jù)存儲器、特殊功能寄存器、位地址空間、外部數(shù)據(jù)存儲器
程序存儲器
程序是控制計(jì)算機(jī)動作的一系列命令,單片機(jī)只認(rèn)識由“0”和“1”代碼構(gòu)成的機(jī)器指令。如前述用助記符編寫的命令MOV A,#20H,換成機(jī)器認(rèn)識的代碼74H、20H:(寫成二進(jìn)制就是01110100B和00100000B)。在單片機(jī)處理問題之前必須事先將編好的程序、表格、常數(shù)匯編成機(jī)器代碼后存入單片機(jī)的存儲器中,該存儲器稱為程序存儲器。程序存儲器可以放在片內(nèi)或片外,亦可片內(nèi)片外同時(shí)設(shè)置。由于PC程序計(jì)數(shù)器為16位,使得程序存儲器可用16位二進(jìn)制地址,因此,內(nèi)外存儲器的地址最大可從0000H到FFFFH。8051內(nèi)部有4k字節(jié)的ROM,就占用了由0000H~0FFFH的最低4k個(gè)字節(jié),這時(shí)片外擴(kuò)充的程序存儲器地址編號應(yīng)由1000H開始,如果將8051當(dāng)做8031使用,不想利用片內(nèi)4kROM,全用片外存儲器,則地址編號仍可由0000H開始。不過,這時(shí)應(yīng)使8051的第{31}腳(即EA腳)保持低電平。當(dāng)EA為高電平時(shí),用戶在0000H至0FFFH范圍內(nèi)使用內(nèi)部ROM,大于0FFFH后,單片機(jī)CPU自動訪問外部程序存儲器。
數(shù)據(jù)存儲器
單片機(jī)的數(shù)據(jù)存儲器由讀寫存儲器RAM組成。其最大容量可擴(kuò)展到64k,用于存儲實(shí)時(shí)輸入的數(shù)據(jù)。8051內(nèi)部有256個(gè)單元的內(nèi)部數(shù)據(jù)存儲器,其中00H~7FH為內(nèi)部隨機(jī)存儲器RAM,80H~FFH為專用寄存器區(qū)。實(shí)際使用時(shí)應(yīng)首先充分利用內(nèi)部存儲器,從使用角度講,搞清內(nèi)部數(shù)據(jù)存儲器的結(jié)構(gòu)和地址分配是十分重要的。因?yàn)閷碓趯W(xué)習(xí)指令系統(tǒng)和程序設(shè)計(jì)時(shí)會經(jīng)常用到它們。8051內(nèi)部數(shù)據(jù)存儲器地址由00H至FFH共有256個(gè)字節(jié)的地址空間,該空間被分為兩部分,其中內(nèi)部數(shù)據(jù)RAM的地址為00H~7FH(即0~127)。而用做特殊功能寄存器的地址為80H~FFH。在此256個(gè)字節(jié)中,還開辟有一個(gè)所謂“位地址”區(qū),該區(qū)域內(nèi)不但可按字節(jié)尋址,還可按“位(bit)”尋址。對于那些需要進(jìn)行位操作的數(shù)據(jù),可以存放到這個(gè)區(qū)域。從00H到1FH安排了四組工作寄存器,每組占用8個(gè)RAM字節(jié),記為R0~R7。究竟選用那一組寄存器,由前述標(biāo)志寄存器中的RS1和RS0來選用。在這兩位上放入不同的二進(jìn)制數(shù),即可選用不同的寄存器組。
特殊功能寄存器
特殊功能寄存器(SFR)的地址范圍為80H~FFH。在MCS-51中,除程序計(jì)數(shù)器PC和四個(gè)工作寄存器區(qū)外,其余21個(gè)特殊功能寄存器都在這SFR塊中。其中5個(gè)是雙字節(jié)寄存器,它們共占用了26個(gè)字節(jié)。各特殊功能寄存器的符號和地址見附表2。其中帶*號的可位尋址。特殊功能寄存器反映了8051的狀態(tài),實(shí)際上是8051的狀態(tài)字及控制字寄存器。用于CPU PSW便是典型一例。這些特殊功能寄存器大體上分為兩類,一類與芯片的引腳有關(guān),另一類作片內(nèi)功能的控制用。與芯片引腳有關(guān)的特殊功能寄存器是P0~P3,它們實(shí)際上是4個(gè)八位鎖存器(每個(gè)I/O口一個(gè)),每個(gè)鎖存器附加有相應(yīng)的輸出驅(qū)動器和輸入緩沖器就構(gòu)成了一個(gè)并行口。MCS-51共有P0~P3四個(gè)這樣的并行口,可提供32根I/O線,每根線都是雙向的,并且大都有第二功能。其余用于芯片控制的寄存器中,累加器A、標(biāo)志寄存器PSW、數(shù)據(jù)指針DPTR等的功能前已提及,而另一些寄存器的功能在后面有關(guān)部分再作進(jìn)一步介紹。
地址空間
要保證多個(gè)應(yīng)用程序同時(shí)處于內(nèi)存中并且不互相影響,則需要解決兩個(gè)問題:保護(hù)和重定位。我們來看一個(gè)原始的對前者的解決辦法,它曾被用在IBM 360上:給內(nèi)存塊標(biāo)記上一個(gè)保護(hù)鍵,并且比較執(zhí)行進(jìn)程的鍵和其訪問的每個(gè)內(nèi)存字的保護(hù)鍵。然而,這種方法本身并沒有解決后一個(gè)問題,雖然這個(gè)問題可以通過在程序被裝載時(shí)重定位程序來解決,但這是一個(gè)緩慢且復(fù)雜的解決方法。
一個(gè)更好的辦法是創(chuàng)造一個(gè)新的內(nèi)存抽象:地址空間。就像進(jìn)程的概念創(chuàng)造了一類抽象的CPU以運(yùn)行程序一樣,地址空間為程序創(chuàng)造了一種抽象的內(nèi)存。地址空間是一個(gè)進(jìn)程可用于尋址內(nèi)存的一套地址集合。每個(gè)進(jìn)程都有一個(gè)自己的地址空間,并且這個(gè)地址空間獨(dú)立于其他進(jìn)程的地址空間(除了在一些特殊情況下進(jìn)程需要共享它們的地址空間外)。
地址空間的概念非常通用,并且在很多場合中出現(xiàn)。比如電話號碼,在美國和很多其他國家,一個(gè)本地電話號碼通常是一個(gè)7位的數(shù)字。因此,電話號碼的地址空間是從0 000 000到9 999 999,雖然一些號碼并沒有被使用,比如以000開頭的號碼。隨著手機(jī)、調(diào)制解調(diào)器和傳真機(jī)數(shù)量的增長,這個(gè)空間變得越來越不夠用了,從而導(dǎo)致需要使用更多位數(shù)的號碼。Pentium的I/O端口的地址空間從0到16 383。IPv4的地址是32位的數(shù)字,因此它們的地址空間從0到232-1(也有一些保留數(shù)字)。
地址空間可以不是數(shù)字的。一套“.com”的互聯(lián)網(wǎng)域名也是地址空間。這個(gè)地址空間是由所有包含2~63個(gè)字符并且后面跟著“.com”的字符串組成的,組成這些字符串的字符可以是字母、數(shù)字和連字符。到現(xiàn)在你應(yīng)該已經(jīng)明白地址空間的概念了。它是很簡單的。
外部存儲器
軟盤、硬盤、光盤、U盤都是外部存儲器。 從馮.諾依曼的存儲程序工作原理及計(jì)算機(jī)的組成來說,計(jì)算機(jī)分為運(yùn)算器、控制器、存儲器和輸入/輸出設(shè)備,這里的存儲器就是指內(nèi)存,而硬盤屬于輸入/輸出設(shè)備。 CPU運(yùn)算所需要的程序代碼和數(shù)據(jù)來自于內(nèi)存,內(nèi)存中的東西則來自于硬盤。所以硬盤并不直接與CPU打交道。 硬盤相對于內(nèi)存來說就是外部存儲器。 存儲器是用來存儲器數(shù)據(jù)的,內(nèi)存有告訴緩存和內(nèi)存,計(jì)算機(jī)內(nèi)部存儲,外存就是類似U盤的外部存儲,內(nèi)存儲器 速度快 價(jià)格貴,容量小,斷電 后內(nèi)存內(nèi)數(shù)據(jù)會丟失。 外存儲器 單位價(jià)格低,容量大, 速度慢, 斷電后數(shù)據(jù)不會丟失。
評論