單片機(jī)的“靈魂”—數(shù)據(jù)存儲(chǔ)器的使用
我們可以說(shuō)程序存儲(chǔ)器的里面存放的是單片機(jī)的靈魂,它就是工作程序。小的可能只有1KB(最多只能裝1024條8位數(shù)據(jù),因?yàn)閷?shí)際指令還有許多2字節(jié)、3字節(jié)指令,所以它還裝不下1024條指令)大的也有128KB的。這些8位數(shù)據(jù)要么在工廠里做摸子光刻進(jìn)去,要么一次性的燒寫進(jìn)去,要么……用編程器這個(gè)特殊工具把調(diào)試成功的機(jī)器碼裝載進(jìn)去,或者像AVR單片機(jī)那樣自己花幾塊錢做一條下載線,把電腦里這些東西灌進(jìn)去(或許是AVR最吸引人之處),它一旦進(jìn)駐電腦的程序存儲(chǔ)器中,除了借助上述裝置便不能自由改寫,在單片機(jī)運(yùn)行時(shí),只是從其中讀出指令或固定的數(shù)據(jù),所以給程序存儲(chǔ)器一個(gè)“只讀存儲(chǔ)器”的別名,簡(jiǎn)寫為ROM,包括用編程器寫紫外線擦除內(nèi)容的EPROM.用電擦除的EEPROM和現(xiàn)在新興的FLASH ROM;一次性寫入的ROM僅用于電路和程序固定的批量產(chǎn)品中,實(shí)際工作起來(lái),都是一樣的。
在實(shí)際的使用中,單片機(jī)運(yùn)行時(shí)為了定位ROM中的數(shù)據(jù),其實(shí)每個(gè)8位存儲(chǔ)單元都有一個(gè)固定的“地址”,通常用16進(jìn)數(shù)表示:例如對(duì)于一個(gè)所謂4K的ROM,地址從0000H到0FFFH,(即是從0000,0001…4095),單片機(jī)運(yùn)行時(shí)從哪個(gè)地址取數(shù)據(jù),完全由程序本身決定,并不要我們干預(yù)。記住,給單片機(jī)一通電,它經(jīng)過(guò)一個(gè)短暫的復(fù)位過(guò)程,立即轉(zhuǎn)向ROM的最低地址0000H,在這里面放置的往往是一條“跳轉(zhuǎn)”指令,它從這里一步跳到另一個(gè)地址:程序的真正起始地址,例如51機(jī)的0080H.難道ROM中就只有指令不能來(lái)點(diǎn)別的?ROM是程序存儲(chǔ)器,除了指令外還包括運(yùn)行程序必須的某些固定數(shù)據(jù)。假如,我們要求在單片機(jī)的某口上輸出00H到FFH(255)按正弦半波變化的數(shù)值,每秒10000次,那如果硬要它按照公式一個(gè)個(gè)計(jì)算,對(duì)于它來(lái)說(shuō)未免力不從心,可是我們可以把預(yù)先計(jì)算好的數(shù)值存入ROM中,到時(shí)候直接取出。
提到數(shù)據(jù)存儲(chǔ)器,它其實(shí)是個(gè)可以隨時(shí)存取數(shù)據(jù)的一塊存儲(chǔ)器,也就是可以讀(取)也可以寫(存)的存儲(chǔ)器,簡(jiǎn)稱RAM.現(xiàn)在的單片機(jī)里面使用的RAM屬于靜態(tài)RAM或SRAM,這個(gè)和電腦用的內(nèi)存條有所不同,只要你把數(shù)據(jù)寫入SRAM后,只要不斷電,或者不清除掉,這個(gè)數(shù)據(jù)就一直保存在那里,電腦是用的動(dòng)態(tài)RAM,要不斷給它加刷新脈沖才能保存數(shù)據(jù)。因?yàn)閱纹瑱C(jī)處理的信息量比電腦小很多,所以它帶的RAM也比較少:從完全不帶、帶128、256、……1K、2K到4K,比ROM少多了。因?yàn)閷?shí)際上RAM只是作為數(shù)據(jù)臨時(shí)存放的地方,除非進(jìn)行圖像處理需要存放大量的數(shù)據(jù)外,一般對(duì)于執(zhí)行較簡(jiǎn)單任務(wù)的單片機(jī),有這么多也夠用,如果實(shí)在不夠用也只能采取外加SRAM如6116、6264等等來(lái)擴(kuò)展。為了對(duì)RAM單元存取8位二進(jìn)數(shù),當(dāng)然也的和ROM一樣用“地址”來(lái)標(biāo)示它的具體位置假如某單片機(jī)有1K(1024)RAM,它的地址也是從0000到1024,或16進(jìn)數(shù)的0000H到03FFH可見和ROM的地址是一樣的,不會(huì)混淆不清?不會(huì),因?yàn)樽xROM是由單片機(jī)的程序指針或轉(zhuǎn)移指令或查表指令進(jìn)行,而這些指令是不會(huì)進(jìn)入RAM區(qū)的,讀寫RAM是另外的數(shù)據(jù)傳送指令,也不會(huì)進(jìn)入ROM區(qū),這點(diǎn)也是和電腦不同之處,后者程序和數(shù)據(jù)都在內(nèi)存條里面,地址不同,如果竄位了就會(huì)造成不可預(yù)見后果。單片機(jī)的這種存儲(chǔ)器結(jié)構(gòu)也稱為哈佛結(jié)構(gòu)。
在這里本文中要說(shuō)到的RAM,其在單片機(jī)里的用途主要是存放臨時(shí)數(shù)據(jù),例如用單片機(jī)測(cè)溫,每秒測(cè)1次,顯示1分鐘的平均值(1分鐘更新一次);我們先通過(guò)傳感器,放大電路,A/D轉(zhuǎn)換,把溫度這個(gè)模擬量轉(zhuǎn)變?yōu)槌杀壤亩M(jìn)數(shù),然后每秒鐘1次把數(shù)字量通過(guò)輸入口順序存入到單片機(jī)的RAM中,然后對(duì)他們進(jìn)行兩兩求和再平均的計(jì)算(題外話:要單片機(jī)進(jìn)行“除法”運(yùn)算比較麻煩,例外的是除以2,4,8……卻非常簡(jiǎn)單。運(yùn)用“右移”指令1、2、3次便可)最后的數(shù)值顯示出來(lái),然后把這60個(gè)存儲(chǔ)單元統(tǒng)統(tǒng)寫0清除舊數(shù)據(jù),下次又如此這般地循環(huán)進(jìn)行。另外在單片機(jī)里面還有若干寄存器,數(shù)量不多但是作用很大,除了暫存數(shù)據(jù),還可以交換、加工、傳遞等等,以及隨時(shí)紀(jì)錄單片機(jī)當(dāng)前處于什么狀態(tài),輸入輸出口,也是作為特殊功能的寄存器存在,具體各有不同,就不是隨便說(shuō)說(shuō)可以搞清楚的,要看有關(guān)書籍了。
編輯:admin 最后修改時(shí)間:2018-05-18