51微控制器外擴RAM,ROM操作。

2021-08-16 23:34:39 字數 2321 閱讀 1499

這是51微控制器內建的功能,可以讓我們少寫很多時序,讓**變的整潔好看。

1.ram是一種掉電會丟失資料的可讀可寫的儲存器。//其實題目上寫的是外擴ram,但很多時候我們很少來外擴ram,          都是外擴各種外圍器件,比如adc,dac,等等等

2.rom是掉電不丟失,唯讀的儲存器。

3.51微控制器p0口是低8位址和資料匯流排復用。p2口是高8位位址匯流排。

4.資料匯流排是用來傳輸資料的,位址匯流排是用來選擇位址的,51微控制器位址匯流排是16根,也就是外擴最大記憶體為    2^16=64k;

5.控制匯流排就是微控制器發出的各種控制訊號線,比如讀寫時序產生wr/rd,低8位位址鎖存訊號線ale等...

然後我們進入正題。如果是學過微控制器原理的小夥伴們應該知道這兩個操作指令 movx,movc,如果用我們用彙編寫外擴ram、rom,就是用這兩個操作指令,當出現這兩個操作指令的時候,微控制器的相關引腳就會產生對應的時序,這樣我們把相關外擴器件與之相連的時候,就不用去管時序的問題了。

movx  a,@dptr    //讀外擴ram,產生讀時序,由wr/p3.6產生

movx  @dptr,a    //寫外擴ram,產生寫時序,由rd/p3.7產生

movc  a,@dptr    //讀外擴rom,產生讀時序,由psen產生

我這裡這介紹ram的讀寫。當我們發出一條movx指令的時候,先發出16位位址,產生控制時序,然後在寫(讀)資料,這個時候,我們低8位位址匯流排就與資料匯流排衝突了(因為都是用的p0口),使用如果我們要時候低8位位址去限定的時候,就可以就乙個鎖存器,來鎖存低8位位址(這個時候要用到鎖存訊號引腳ale),再比如我們外圍器件不多的時候,或者外擴ram不超過2^8=256b的時候,完全可以不管低8位。

然後就是我們讀寫控制線都有效時序都是由高到低,當資料讀寫完後,在變為高電平,你們要注意自己控制的外圍器件的時序,看要不要加非門處理一下讀寫時序,比如控制lcd1602的時候。

我們大致了解了這個控制過程(想詳細了解的建議去看書,微控制器原理),我們在開發的過程中很少用彙編寫專案,下面我們就來看看c語言的寫法。

首先我們來看一看下面的關鍵字:                 

code   以movc @a+dptr 讀取的程式記憶體

data   可以直接訪問的內部資料儲存器

idata   以 mov@rn 訪問的內部資料儲存器

bdata   可以位定址(bitaddressable)的內部儲存器

xdata   以movx @dptr 訪問的外部資料儲存器

pdata   以movx @rn 訪問的外部資料儲存器 

我們一般都只用到 xdata,我們在標頭檔案中可以看到這樣乙個定義

#define xbyte ((unsigned char ***lite xdata*)0)

這樣乙個巨集定義,這個巨集定義我按我自己的理解去演示一遍,

當我們用xbyte[0x1000]=1;

想當於  mov @dptr,1000h

mov  a,#1

movx @dptr,a

把1寫到外部ram位址位0x1000中,如果是 i=xbyte[0x1000];這就是讀了,意思是差不多的。

這個位址0x1000,就是通過位址匯流排發出去的,p0傳送0x00也就是低8位,p2傳送0x10也就是高8位,傳送位址後,控制線發出對應的控制時序,ale傳送鎖存,wr發出乙個下降沿,這個時候在通過資料匯流排p0傳送1出去。wr在復位到高電平。這就是大概流程。

當我們不是外擴ram的時候 xbyte中的位址應該怎麼去填呢,我們來舉的dac0832的例子

我們0832是在片選cs為低的時候,給wr低電平就可以工作了。

上圖我們可以明顯體會到用外擴ram這種程式設計方法的便利,以及節省很多資源了(用i/o直接操作的話,不加額外的器件,連線兩個dac起碼要16個引腳)。

當我們想讓dac0832(1)工作,但片2不工作,就要讓p2.7=0,p2.6=0,p2.5=1。是不是這樣的。

所以我們片1的位址高3位就出來了,其餘的位址都影響不到它,所以我們稱為位址無關位,我們任意填什麼都可以,為了方便,我就填0。那麼片1的位址  是不是就是xbyte[0x2000] (001 0 0000 0000 0000),是不是就是這樣的,

同理片2的就為 xbyte[0x8000] (100 0 0000 0000 0000) 。

當我們寫 xbyte[0x2000]=0xff;這句話,是不是就啟動了dac0832,並寫入了0xff。

其實大家可以去看書上微控制器外擴程式儲存器的工作時序圖,多想想這個過程,就可以很輕鬆的去運用他了,可以讓自己輕鬆很多,並且玩法有很多很多。

51微控制器

數碼管顯示幾乎是每次藍橋杯微控制器設計與開發組競賽的必考部分,相對於使用lcd1602作為顯示裝置,使用數碼管來顯示能夠更好的考察參賽選手的微控制器基本功,因為ct107d開發平台的設計使得數碼管的顯示不僅牽扯到數碼管顯示的 基本內容,還涉及到74hc573鎖存器,74hc02異或門,74hc138...

51微控制器

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 1.供電電源 一般開發板上提供兩種供電方式,usb供電和專用電源供電。使用usb供電你只要用一根usb線將開發板usb電源介面與電腦的usb...

51微控制器

設計包含乙個矩陣式鍵盤電路和動態顯示電路的微控制器應用系統,通過根據按下不同的數字按鍵 0 9 在數碼管上顯示出自己學號的後8位。各位大神幫忙挑挑錯,或者問題太大了可以幫忙寫乙個新的麼!萬分感謝!好著急 a 8255 equ 7cffh a口 b 8255 equ 7dffh b口 c 8255 e...