ram和rom是什么意思 單片機rom和ram的區別在哪

對于51單片機而言,其片載的內部存儲器分為RAM和存儲程序的ROM 。
我們以AT89c51為例,它作為經典51單片機,片載128字節RAM和4K字節ROM,注意這里古典ROM和現代計算機ROM的差別 。
我們把ROM和RAM分開討論 。
1. ROM
什么是4K字節的ROM(只讀存儲器)呢?
有過基本51單片機開發經歷的童鞋應該記得,我們使用C語言編寫單片機程序后,會點擊開發環境(比如Keil)的編譯(compile)按鈕進行編譯 。
此時Keil這個IDE(集成開發環境)就把C語言“譯”成相應的二進制機器碼 。
然后我們通過燒錄工具,把二進制機器碼“灌輸”至單片機 。
灌輸進單片機的程序去哪了?
沒錯,就儲存在ROM中 。所以ROM又被稱為程序存儲器 。
對于古董單片機而言,其上電運行時,ROM內的數據只能被讀取而不能實時寫入,即“只讀” 。
因為,最初的單片機限于閃存技術,在程序運行時,ROM存儲器只可以被讀取,無法在線寫入 。但是,它可以被反復離線擦除并寫入新程序 。
所以,只讀存儲器ROM的Read-only Memory的名稱就從這兒來的 。
現代單片機的ROM一般采用FLASH閃存技術,不僅可以離線通過燒錄器寫入,也可以在線通過自身的代碼來修改FLASH數據,達到類似“硬盤”的療效 。
比如,單片機算出了1+2+3等于6 。
如果我們需要關機重啟后單片機依然保留6這個結果,那么我們可以事先在程序中添加一段代碼,讓單片機把結果存入FLASH的某一存儲單元中 。
然后,即使斷電重新開機,該數據也不會消失,下次再從這個地址讀取,數據即是上次算好的結果,6 。
我們以典型的ST單片機為例,其FLASH擦寫次數高達一萬次,而且該技術現在并不是什么高端貨,一兩塊錢的單片機都能做到 。

ram和rom是什么意思 單片機rom和ram的區別在哪

文章插圖
ram和rom是什么意思 單片機rom和ram的區別在哪

文章插圖
ST某款數據手冊
一兩塊錢的電腦自帶硬盤,是不是很劃算,很好用!
2. RAM
再說說128字節的RAM,RAM又被稱為數據存儲器 。
單片機上電之后是怎么運行的呢?我們把關鍵節點簡要地勾勒一下 。
首先,單片機上電后,復位電路觸發單片機復位,使單片機所有狀態處于復位狀態,所有寄存器處于默認值,使得一切都在預料之中 。
然后單片機按照設計時的“安排”,開始加載ROM中相應位置的數據,這些數據就是“程序” 。
比如指令MOV 20H, A;
就是將累加寄存器A中的值送入RAM的20H這個“坑”中,20H就是這個“坑”的地址 。
20H代表十六進制的20,等于十進制的32,即:編號32的坑 。
128字節的RAM就有128個“坑”,分別編號00H到7FH(0到127)每個“坑”可以存一個8位的二進制數,即“坑”的大小是一個字節 。
這樣一條一條指令執行下去,有的MOV,有的JUMP,單片機就開始“有條不紊地”運行了 。
在單片機運行過程中,一些中間變量就暫存在這些“坑”中 。
當然,程序也能從這些“坑”中讀取已存的數據,所以它又被稱為數據存儲器,它里面只暫存了“純粹的數據”,沒有程序(雖然程序也是二進制數) 。
它的寫入讀出速度都比FLASH快,但掉電即丟失,相當于計算機的內存 。
我們觀察MSC-51指令集就知道,只有對RAM區操作得數據移動指令,沒有對ROM的操作指令 。
現代單片機對片載Flash的擦寫,往往是通過對寄存器的操作來實現的 。
3. 指令
那我們能否自行發明指令呢?
不行!
開發單片機的公司的工程師在設計單片機芯片時,不僅要設計CPU,還要同時設計內部存儲和內部總線等“外設”,這樣單片機才能運作,才叫“單片機”,而不僅僅是一個CPU 。
每一個指令在這個小系統中到底產生什么效果,是這些工程師已經設計好的 。
在沒有C語言的年代,你想做具體的數學計算,就得把計算過程分解為一條一條的指令,然后通過指令來實現計算任務 。
我們在使用芯片時,不能超過芯片公司規定的指令范圍,去隨意發明指令 。
因為硬件是已經設計好的,它是死的,它只能響應芯片公司規定的這些指令 。
【ram和rom是什么意思 單片機rom和ram的區別在哪】這也就是為什么我們在開發時,需要datasheet和數據手冊,因為芯片的指令是人做出來的,所以我們在開發時,需要遵守開發者的規定 。
這就是傳統51中內部ROM和RAM的根本區別 。

推薦閱讀