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