文章程式碼顯示

2017年12月24日 星期日

《高階》寫程式Arduino教學 - 05:淺談 MCU 架構(以8051舉例)




圖(四)


8051 具有 4k bytes 的程式記憶體(ROM),並且可以藉由外部擴充的方式最大可以到 64k bytes。 ROM 主要的功能是用來存放我們撰寫好的程式,無論是使用高階語言或是組合語言,最後都會編譯成為機械碼(Machine code),而編譯好的機械碼就會被儲存在 ROM 裡面。

最早期的 8051 受限於當代的技術,程式碼只能燒寫一次就不能再進行更改,而隨著演進改為使用 EPROM 其可以接受使用紫外線擦除的方式來進行多次燒寫。

雖然進步成可以多次燒寫,但要把整顆 IC 拆下來照射紫外線也是件麻煩事,所以後來就又眼變成使用 EEPROM ,支援使用電子來進行擦除。

而目前主流的 MCU 都使用了 FLASH ROM ,一般而言 FLASH ROM 較 EEPROM 容量更大、讀取速度更快。


資料記憶體(RAM) 的部分組成較為複雜,可以簡易的分為兩大部分( 128bytes + 128bytes)



資料記憶體(RAM) = 通用暫存器(General proposal register, GPR) + 一般用途資料區(前128 bytes 00H ~ 7FH 藍筆區) + 特殊功能暫存器(Special function register, SFRs) ( 後128bytes 80H ~ FFH 紅筆區)

註 : 通用暫存器應該歸類於一般用途資料區的一環

實際上還可以分的更細一些,但在此就不介紹了。我們先介紹後 128 Bytes 的 SFRs

特殊功能暫存器(SFRs) (上表格)裡面包含了累加器 A(ACC) 、輸出/入暫存器(P0~P3)以及一些含有特殊功能的暫存器(PSW, SCON, PCON ... ),其分配的總空間有 128 Bytes ,但並不是每一個位址都有被使用到的。

累加器 A(ACC) 的作用為負責算術運算、資料般移以及邏輯運算
輸出/入暫存器(P0~P3)負責對 MCU 的 I/O 口其進行設置
PSW 的作用在於儲存一些旗標
其他部分可以參考此連結



通用暫存器 (GPR):
  通用暫存器一般 8 bytes 為一組,並且編號為 R0  到 R7 。其作用為輔助累加器 A(ACC) 運算、儲存即將被處理的資料以及暫存剛運算完成的結果。(我將其歸類在一般用途資料區的一環,原因如下)

在記憶體配置時,通用暫存器會被配置於 RAM 的頭 32 bytes 的位置,且會有四組 R0~R7 分別組成四組通用暫存器庫

00~07H 的位置稱為 Register bank 1
08~0FH 的位置稱為 Register bank 2
10~17H 的位置稱為 Register bank 3
18~1FH 的位置稱為 Register bank 4

因複雜的程式需要很多暫存器來暫時儲存這些即將被處理或是剛運算完的資料,所以 8 bytes 可能會不夠用,所以我們用了四組通用暫存器庫來解決這個問題,透過特殊功能暫存器(SFRs) 裡面的 PSW 暫存器,我們可以改變目前要使用 bank1 或是 bank2, 3 or 4


最後則是展示一些定址模式以及指令集。

値得一提的是右方的圖,他說明了每一個指令(運算)要花多少 byte 以及要花多少的機械週期。

花多少個 byte 的意思是該址另轉為機械碼後,在 ROM 暫用多少個 byte 的位址(比對著圖四看更清楚)。

機械週期則在說明這個指令的執行時長

↓↓↓ 連結到部落格方針與索引 ↓↓↓

Blog 使用方針與索引