單片機就是個小計算機,大計算機少不了的數(shù)據(jù)存儲系統(tǒng),單片機一樣有,而且往往和 CPU 集成在一起,更加顯得小巧靈活。
直到 90 年代初,國內(nèi)容易得到的單片機就是 8031:不帶存儲器的芯片,要想工作,還必須外加 RAM 和 ROM,單片機成了 3 片機 ......
現(xiàn)在不同了,大的小的又是 51,又是 AVR 又是 STC,還有什么 430,PIC 等等,都各說各的好,可是誰也不敢說“我不要存儲器”。
單片機的數(shù)據(jù)存儲手段
程序存儲器 ROM
程序存儲器里面存放的是單片機的靈魂:工作程序。
小的可能只有 1KB,最多只能裝 1024 條 8 位數(shù)據(jù),因為實際指令還有許多 2 字節(jié),3 字節(jié)指令,所以它還裝不下 1024 條指令。大的也有 128KB 的。這些 8 位數(shù)據(jù),要么在工廠里做模子光刻進去,要么一次性的燒寫進去。
業(yè)余或開發(fā),最多也就是用編程器這么一個特殊工具,把調(diào)試成功的機器碼裝載進去,或者像 AVR 單片機那樣自己花幾塊錢做一條下載線,把電腦里這些東西灌進去(或許是 AVR 最吸引人之處)。
它一旦進駐電腦的程序存儲器中,除了借助上述裝置便不能自由改寫,在單片機運行時,只是從其中讀出指令或固定的數(shù)據(jù),所以給程序存儲器一個“只讀存儲器”的別名,簡寫為 ROM,包括用編程器寫紫外線擦除內(nèi)容的 EPROM、用電擦除的 EEPROM 和現(xiàn)在新興的 FLASH ROM。
一次性寫入的 ROM,僅用于電路和程序固定的批量產(chǎn)品中,實際工作起來,都是一樣的。
為了定位 ROM 中的數(shù)據(jù),每個 8 位存儲單元都有一個固定的“地址”,通常用 16 進制數(shù)表示。例如,對于一個所謂 4K 的 ROM,地址從 0000H 到 0FFFH(即從 0000,0001...4095),單片機運行時從哪個地址取數(shù)據(jù),完全由程序本身決定,并不要我們干預。
記住,給單片機一通電,它經(jīng)過一個短暫的復位過程,立即轉(zhuǎn)向 ROM 的最低地址 0000H,在這里面放置的往往是一條“跳轉(zhuǎn)”指令,它從這里一步跳到另一個地址:程序的真正起始地址,例如 51 機的 0080H。
ROM 是程序存儲器,除了指令外,還包括運行程序必須的某些固定數(shù)據(jù),例如:數(shù)據(jù)表。假如,我們要求在單片機的接口上輸出 00H 到 FFH(255)按正弦半波變化的數(shù)值,每秒 10000 次。如果硬要它按照公式一個個計算,對于它來說未免力不從心??墒俏覀兛梢园杨A先計算好的數(shù)值存入 ROM 中,到時候直接取出不是好多了?
又如一個重要的應用:大家一定見過不少單片機的東西上面都有數(shù)碼顯示,那些個數(shù)字其實就是用單片機的口線控制數(shù)碼管的字段電極電位。這些字形也是存放在 ROM 中的字模表,各個字模和 0-9 的數(shù)字(機器內(nèi)當然是 0000-0101 二進制數(shù))對應起來。常見的共陽極 7 段數(shù)碼管,必須在陽極加正電,7 個陰極都是地電位,才能顯示數(shù)字"8",數(shù)字 8 對應的顯示字碼值是二進制數(shù)“10000000“(那個 1 對應的是小數(shù)點,高電位不讓它顯示)。
數(shù)據(jù)存儲器 RAM
這是個可以隨時存取數(shù)據(jù)的一塊存儲器,也就是可以讀(?。┮部梢詫懀ù妫┑拇鎯ζ鳎喎Q RAM。
現(xiàn)在的單片機里面使用的 RAM,屬于靜態(tài) RAM 或 SRAM,這個和電腦用的內(nèi)存條有所不同。只要你把數(shù)據(jù)寫入 SRAM 后,不斷電或者不清除掉,這個數(shù)據(jù)就一直保存在那里。電腦用的是動態(tài) RAM,要不斷給它加刷新脈沖才能保存數(shù)據(jù)。
因為單片機處理的信息量比電腦小很多,所以它帶的 RAM 也比較少:從完全不帶、帶 128、256、...1K、2K,到 4K,比 ROM 少多了。
因為實際上 RAM 只是作為數(shù)據(jù)臨時存放的地方,除非進行圖像處理需要存放大量的數(shù)據(jù)外。一般對于執(zhí)行較簡單任務(wù)的單片機,有這么多也夠用,如果實在不夠用也只能采取外加 SRAM 如 6116、6264 等等來擴展。
為了對 RAM 單元存取 8 位二進制數(shù),當然也得和 ROM 一樣用“地址”來標示它的具體位置。假如某單片機有 1K(1024)RAM,它的地址也是從 0000 到 1024,或 16 進制數(shù)的 0000H 到 03FFH??梢?,和 ROM 的地址是一樣的。
會不會混淆不清?
不會,因為讀 ROM 是由單片機的程序指針或轉(zhuǎn)移指令或查表指令進行,而這些指令是不會進入 RAM 區(qū)的;讀寫 RAM 是另外的數(shù)據(jù)傳送指令,也不會進入 ROM 區(qū)。這點也是和電腦不同之處,后者程序和數(shù)據(jù)都在內(nèi)存條里面,地址不同,如果竄位了就會造成不可預見后果。單片機的這種存儲器結(jié)構(gòu)也稱為哈佛結(jié)構(gòu)。
RAM 在單片機里的用途
RAM 在單片機里的用途,主要是存放臨時數(shù)據(jù)。
例如用單片機測溫,每秒測 1 次,顯示 1 分鐘的平均值(1 分鐘更新一次):
我們先通過傳感器、放大電路、A/D 轉(zhuǎn)換,把溫度這個模擬量轉(zhuǎn)變?yōu)槌杀壤亩M制數(shù),然后每秒鐘 1 次把數(shù)字量通過輸入口順序存入到單片機的 RAM 中,然后對他們進行兩兩求和再平均的計算,最后的數(shù)值顯示出來,然后把這 60 個存儲單元統(tǒng)統(tǒng)寫 0 清除舊數(shù)據(jù),下次又是如此循環(huán)進行。
結(jié)語
另外在單片機里面還有若干寄存器,數(shù)量不多但是作用很大,除了暫存數(shù)據(jù),還可以交換、加工、傳遞等等,以及隨時記錄單片機當前處于什么狀態(tài),輸入輸出口也是作為特殊功能的寄存器存在,具體各有不同,就不是隨便說說可以搞清楚的,要看有關(guān)書籍了。
審核編輯 黃昊宇
-
RAM
+關(guān)注
關(guān)注
8文章
1367瀏覽量
114546
發(fā)布評論請先 登錄
相關(guān)推薦
評論