在實際的使用中,單片機運行時為了定位ROM中的數據,其實每個8位存儲單元都有一個固定的“地址”,通常用16進數表示:例如對于一個所謂4K的ROM,地址從0000H到0FFFH,(即是從0000,0001…4095),單片機運行時從哪個地址取數據,完全由程序本身決定,并不要我們干預。記住,給單片機一通電,它經過一個短暫的復位過程,立即轉向ROM的最低地址0000H,在這里面放置的往往是一條“跳轉”指令,它從這里一步跳到另一個地址:程序的真正起始地址,例如51機的0080H.難道ROM中就只有指令不能來點別的?ROM是程序存儲器,除了指令外還包括運行程序必須的某些固定數據。假如,我們要求在單片機的某口上輸出00H到FFH(255)按正弦半波變化的數值,每秒10000次,那如果硬要它按照公式一個個計算,對于它來說未免力不從心,可是我們可以把預先計算好的數值存入ROM中,到時候直接取出。
提到數據存儲器,它其實是個可以隨時存取數據的一塊存儲器,也就是可以讀(取)也可以寫(存)的存儲器,簡稱RAM.現在的單片機里面使用的RAM屬于靜態RAM或SRAM,這個和電腦用的內存條有所不同,只要你把數據寫入SRAM后,只要不斷電,或者不清除掉,這個數據就一直保存在那里,電腦是用的動態RAM,要不斷給它加刷新脈沖才能保存數據。因為單片機處理的信息量比電腦小很多,所以它帶的RAM也比較少:從完全不帶、帶128、256、……1K、2K到4K,比ROM少多了。因為實際上RAM只是作為數據臨時存放的地方,除非進行圖像處理需要存放大量的數據外,一般對于執行較簡單任務的單片機,有這么多也夠用,如果實在不夠用也只能采取外加SRAM如6116、6264等等來擴展。為了對RAM單元存取8位二進數,當然也的和ROM一樣用“地址”來標示它的具體位置假如某單片機有1K(1024)RAM,它的地址也是從0000到1024,或16進數的0000H到03FFH可見和ROM的地址是一樣的,不會混淆不清?不會,因為讀ROM是由單片機的程序指針或轉移指令或查表指令進行,而這些指令是不會進入RAM區的,讀寫RAM是另外的數據傳送指令,也不會進入ROM區,這點也是和電腦不同之處,后者程序和數據都在內存條里面,地址不同,如果竄位了就會造成不可預見后果。單片機的這種存儲器結構也稱為哈佛結構。
在這里本文中要說到的RAM,其在單片機里的用途主要是存放臨時數據,例如用單片機測溫,每秒測1次,顯示1分鐘的平均值(1分鐘更新一次);我們先通過傳感器,放大電路,A/D轉換,把溫度這個模擬量轉變為成比例的二進數,然后每秒鐘1次把數字量通過輸入口順序存入到單片機的RAM中,然后對他們進行兩兩求和再平均的計算(題外話:要單片機進行“除法”運算比較麻煩,例外的是除以2,4,8……卻非常簡單。運用“右移”指令1、2、3次便可)最后的數值顯示出來,然后把這60個存儲單元統統寫0清除舊數據,下次又如此這般地循環進行。另外在單片機里面還有若干寄存器,數量不多但是作用很大,除了暫存數據,還可以交換、加工、傳遞等等,以及隨時紀錄單片機當前處于什么狀態,輸入輸出口,也是作為特殊功能的寄存器存在,具體各有不同,就不是隨便說說可以搞清楚的,要看有關書籍了。
-
單片機
+關注
關注
6032文章
44514瀏覽量
632971 -
ROM
+關注
關注
4文章
562瀏覽量
85672
原文標題:單片機的“靈魂”—數據存儲器的使用
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論