基礎(chǔ)篇:關(guān)于單片機(jī)的存儲(chǔ)器結(jié)構(gòu)介紹
存儲(chǔ)器是單片機(jī)的又一個(gè)重要組成部分,存儲(chǔ)容量為256個(gè)單元的存儲(chǔ)器結(jié)構(gòu)中每個(gè)存儲(chǔ)單元對(duì)應(yīng)一個(gè)地址,256個(gè)單元共有256個(gè)地址,用兩位16進(jìn)制數(shù)表示,即存儲(chǔ)器的地址(00H~FFH)。存儲(chǔ)器中每個(gè)存儲(chǔ)單元可存放一個(gè)八位二進(jìn)制信息,通常用兩位16進(jìn)制數(shù)來表示,這就是存儲(chǔ)器的內(nèi)容。存儲(chǔ)器的存儲(chǔ)單元地址和存儲(chǔ)單元的內(nèi)容是不同的兩個(gè)概念,不能混淆。
單片機(jī)的存儲(chǔ)器有程序存儲(chǔ)器 ROM 和數(shù)據(jù)存儲(chǔ)器 RAM 之分。ROM 用來存放指令的機(jī)器碼( 目標(biāo)程序)、 表格 、常數(shù)等;RAM 則用來存放運(yùn)算的中間結(jié)果、采集的數(shù)據(jù)和經(jīng) 常需要更換的代碼等。MCS 51 單片機(jī)的 ROM 、RAM 都有片內(nèi)和片外之分;從尋址空間 來看有程序存儲(chǔ)器 、內(nèi)部數(shù)據(jù)存儲(chǔ)器 、外部數(shù)據(jù)存儲(chǔ)器三大部分;從功能上來看有:程序 存儲(chǔ)器 、內(nèi)部數(shù)據(jù)存儲(chǔ)器、特殊功能寄存器(SFR)、 位地址空 間和外部數(shù)據(jù)存儲(chǔ)器等 5 個(gè) 部分。MCS 51 單片機(jī)的存儲(chǔ)器結(jié)構(gòu)如圖 2.4 所示。
1.程序存儲(chǔ)器
程序存儲(chǔ)器可以放在片內(nèi)或片外,亦可片內(nèi)片外同時(shí)設(shè)置。由于PC程序計(jì)數(shù)器為16位,使得程序存儲(chǔ)器可用16位二進(jìn)制地址,因此,內(nèi)外存儲(chǔ)器的地址最大可從0000H到FFFFH。8051內(nèi)部有4k字節(jié)的ROM,就占用了由0000H~0FFFH的最低4k個(gè)字節(jié),這時(shí)片外擴(kuò)充的程序存儲(chǔ)器地址編號(hào)應(yīng)由1000H開始,如果將8051當(dāng)做8031使用,不想利用片內(nèi)4kROM,全用片外存儲(chǔ)器,則地址編號(hào)仍可由0000H開始。不過,這時(shí)應(yīng)使8051的第{31}腳(即EA腳)保持低電平。當(dāng)EA為高電平時(shí),用戶在0000H至0FFFH范圍內(nèi)使用內(nèi)部ROM,大于0FFFH后,單片機(jī)CPU自動(dòng)訪問外部程序存儲(chǔ)器。
對(duì)于 8051 來說,程序存儲(chǔ)器(ROM) 的內(nèi)部地址為 0000H~0FFFH ,共 4KB ;外部 地址為 1000H~FFFFH ,共 60KB,如圖 2.4(a) 所示 。當(dāng)程序計(jì)數(shù)器由內(nèi)部 0FFFH 執(zhí)行 到外部 1000H 時(shí),會(huì)自動(dòng)跳轉(zhuǎn)。對(duì)于 8751 來說 ,內(nèi)部有 4KB 的 EPROM,將它作為內(nèi)部程序存儲(chǔ)器;8031 內(nèi)部無程序存儲(chǔ)器,必須外接程序存儲(chǔ)器。
8031 最多可外擴(kuò) 64KB 程序存儲(chǔ)器,其中 6 個(gè)單元地址具有特殊用途,是保留給系統(tǒng)使用的。0000H 是系統(tǒng)的啟動(dòng)地址 ,一般在該單元 中存放一條絕對(duì)跳轉(zhuǎn)指令 。0003H 、 000BH 、0013H 、001BH 和 0023H 對(duì)應(yīng) 5 種中斷源的中斷服務(wù)入口地址。
2. 內(nèi)部數(shù)據(jù)存儲(chǔ)器
其最大容量可擴(kuò)展到64k,用于存儲(chǔ)實(shí)時(shí)輸入的數(shù)據(jù)。8051內(nèi)部有256個(gè)單元的內(nèi)部數(shù)據(jù)存儲(chǔ)器,其中00H~7FH為內(nèi)部隨機(jī)存儲(chǔ)器RAM,80H~FFH為專用寄存器區(qū)。實(shí)際使用時(shí)應(yīng)首先充分利用內(nèi)部存儲(chǔ)器,從使用角度講,搞清內(nèi)部數(shù)據(jù)存儲(chǔ)器的結(jié)構(gòu)和地址分配是十分重要的。因?yàn)閷碓趯W(xué)習(xí)指令系統(tǒng)和程序設(shè)計(jì)時(shí)會(huì)經(jīng)常用到它們。8051內(nèi)部數(shù)據(jù)存儲(chǔ)器地址由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)”尋址。對(duì)于那些需要進(jìn)行位操作的數(shù)據(jù),可以存放到這個(gè)區(qū)域。從00H到1FH安排了四組工作寄存器,每組占用8個(gè)RAM字節(jié),記為R0~R7。究竟選用那一組寄存器,由前述標(biāo)志寄存器中的RS1和RS0來選用。在這兩位上放入不同的二進(jìn)制數(shù),即可選用不同的寄存器組。
MCS 51 單片機(jī)片內(nèi) RAM 的配置如圖 2.4(b) 所示。片內(nèi) RAM 為 256 字節(jié),地址范圍為 00H~FFH ,分為兩大部分:低 128 字節(jié)(00H~7FH) 為真正 的 RAM 區(qū);高 128 字 節(jié)(80H~FFH) 為特殊功能寄存器區(qū) SFR 。
在低 128 字節(jié) RAM 中,00H~1FH 共 32 單元是 4 個(gè)通用工作寄存器區(qū)。每一個(gè)區(qū) 有 8 個(gè)通用寄存器 R0~R7 。寄存器和 RAM 地址對(duì)應(yīng)關(guān)系如表 2.6 。
片內(nèi) RAM 的 20H~2FH 為位尋址區(qū)域(見表 2.7), 這 16 個(gè)單元的每一位都有一個(gè)位地址,位地址范圍為 00H~7FH 。位尋址區(qū)的每一位都可視作軟件觸發(fā)器 ,由程序直接進(jìn)行位處理。
片內(nèi) RAM 的 30H~7FH 為數(shù)據(jù)緩沖區(qū),一般可用來開辟堆棧區(qū)。
特殊功能寄存器的 SFR 地址范圍為 80~FFH 。MCS 51 系列有 18 個(gè) SFR ,占 21 個(gè) 字節(jié);MCS 52 子系列有 26 個(gè) SFR ,占 26 個(gè)字節(jié) 。
3.外部數(shù)據(jù)存儲(chǔ)器
外部數(shù)據(jù)存儲(chǔ)器一般由靜態(tài) RAM 構(gòu)成,其容量大小由用戶根據(jù)需要而定,最大可擴(kuò)展到 64KBRAM,地址是 0000H~0FFFFH,如圖 2.4(c) 所示。CPU 通過 MOVX 指令訪問外部數(shù)據(jù)存儲(chǔ)器,用間接尋址方式,R0 、R1 和 DPTR 都可作間接寄存器。注意,外部 RAM 和 擴(kuò)展的 I/O接口是統(tǒng)一編址的,所有的外擴(kuò)I/O 口都要占用 64KB 中的地址單元。