C8051與SRAM的高速介面

2021-08-25 12:07:21 字數 4070 閱讀 4861

摘要:c8051是美國cygnal公司生產的、與標準51相容的高速微控制器,速度高達25 mips,但它擴充套件外部sram的方式與標準51微控制器不同。微控制器訪問外部儲存器的速度直接影響系統的效能。本文介紹兩種提高c8051訪問外部儲存器速度的介面方法,其速度均超過現有文獻所給出的介面方法。

c8051系列微控制器沒有與標準的51微控制器那樣的資料匯流排(rd、wr、ale)等,只能採用通用i/o口模擬匯流排方式訪問外部儲存器。 因此,c8051訪問一次外部儲存器需要幾十條指令。即便這樣,由於c8051的絕大多數指令的執行只需乙個機器(振盪)週期,在同樣的時鐘下與標準的51微控制器相當。例如,20mhz的時鐘下,在文獻[2]給出的sram介面方式中,c8051讀或寫1個位元組需要1.7μs,這就是說可以達到的最大傳輸率為588kb/s。相比之下,標準51讀或寫1個位元組需要1.2μs。為了充分發揮c8051的能力,本文介紹兩種提高訪問外部sram速度的介面方法。

1 擴充套件外部sram的高速介面電路之一

圖1所示電路可提高訪問外部sram的速度。該電路充分利用c8051系列口線多的優勢,避免採用埠復用的費時方法。採用該介面電路的讀和寫週期的時序波形分別修改為如圖2和圖3所示。為節省篇幅,這裡略去初始化部分(初始化數字交叉開關和設定埠)的程式,直接給出讀、寫程式。

sram_read:

mov p2,dph ;輸出外部位址a15..a8

mov p3,dpl ;輸出外部位址a7..a0

anl p1,#0b7h ;選擇sram,發出讀選通

mov a,p0 ;讀資料

orl p1,#48h ;使讀選通和sram片選無效

ret同樣,完成寫1個位元組到外部sram的操作共需15位元組、19個週期,需要0.95μs(包括執行ret指令的0.25μs)。

2 擴充套件外部sram的高速介面電路之二

圖4給出了c8051擴充套件外部sram的介面電路,圖5和圖6分別給出了c8051訪問(讀或寫)外部儲存器的時序圖。

由圖4可以看出,此外部擴充套件ram的高速介面電路的改進為:①高、低位位址都由p2口提供,而不是由p3口分時復用地提供低位位址和資料(匯流排)。這樣,可以節省每次讀寫都要改變p3口的設定而消耗的時間。②盡可能地把控制訊號同步給出,特別是在讀外部資料儲存器時,同時給出cs、ale和wr訊號,可以節省1~2個指令週期的時間。

為方便起見,下面根據圖4的介面電路,給出常量和宣告:

data1 equ p3 ;資料埠引腳(ad7..0)

datacf equ prt3cf ;埠配置暫存器對資料

addr equ p2 ;位址埠引腳(a15..8)

addrcf equ prt2cf ;埠配置暫存器對位址

a16 equ p1.5 ;最高位址位(位址塊選擇)

rd equ p1.4 ;讀選通(低電平有效)

wr equ p1.3 ;寫選通(低電平有效)

ale equ p1.2 ;位址鎖存訊號(低電平有效)

cs equ p1.1 ;sram片選訊號(低電平有效)

下面為主程式中與訪問外部sram有關的部分(初始化數字交叉開關和埠、資料指標等):

org 0b3h

;禁止看門狗定時器,中斷尚未被允許。如果中

;斷被允許,應用確禁止中斷,以保證下面的兩

;條指令能在4個時鐘週期內執行完

main:

mov wdtcn,#0deh

mov wdtcn,#0adh

;設定交叉開關

mov xbr2,#40h ;弱上拉允許交叉開關

lcall sram_init ;初始化sram

mov r0,#0ffh

mov dph,#00h ;初始化16位位址

mov dpl,#00h

mov a,r0 ;裝寫入值

下面的子程式初始化sram介面邏輯,必須在任何sram_read或sram_write操作之前呼叫一次,該程式可作為復位操作的一部分。該程式假定交叉開關已經被允許(xbr2.6=「1」)。

「讀」初始化sram介面邏輯子程式:

sram_read_init:

mov dratacf,#00h

;允許埠3(data)作為輸入匯流排

mov data1,#0ffh

mov addrcf,#0ffh ;允許埠2(addr)作為輸出

mov addr,#0ffh ;驅動為高電平($ff)

orl prt1cf,#00111110b ;允許p1.7..3作為輸出

anl p1,#11011011b

;a16=ale=「0」,選擇儲存塊1

orl p1,#00011010b ;rd,wr,cs=「1」

ret「寫」初始化sram介面邏輯子程式:

sram_write_init:

mov datacf,#0ffh

;允許埠3(data)作為輸出匯流排

mov data1,#0ffh ;驅動為高電平($ff)

mov addrcf,#0ffh ;允許埠2(addr)作為輸出

mov addr,#0ffh ;驅動為高電平($ff)

orl prt1cf,#00111110b ;允許p1.7..3作為輸出anl p1,#11011011b

;a16=ale=「0」,選擇儲存塊1

orl p1,#00011010b ;rd,wr,cs=「1」

ret相應地從外部sram讀1個位元組的資料的程式(sram_read)為:

;該程式從dptr指向的位址讀取資料存到acc。此處未處;

理儲存塊選擇(操作a16);

sram_read:

mov addr,dpl ;輸出外部位址a7..a0

setb ale ;鎖存該位址

anl p1,#0c7h ;選擇sram,發出讀選通、ale=0

mov a,data1

;讀資料(注對於這片sram讀操作建立時間為

;45ns,在sysclk=20mhz時,該指令需2個時;

;鐘週期,或50ns×2=100ns

orl p1,#48h ;使讀選通和sram片選無效

ret完成從外部sram讀1個位元組的操作共需17位元組、21個週期,即每從外部sram中讀1個位元組需要1.05μs(包括執行ret指令的0.25μs)。

同樣,寫1個位元組的資料到外部sram的程式

(sram_write)為:

;該程式將acc中的位元組寫到dptr指向位址的外部

;sram單元,此處未處理儲存塊選擇

sram_write:

mov addr,dpl ;輸出外部位址a7..a0

setb ale ;鎖存該位址

clr ale

mov addr,dpl ;輸出外部位址a15..a8

mov data1,a ;將資料送到資料匯流排

anl p1,#0d7h ;選擇外部sram和啟動寫操作

orl p1,#028h ;寫選通無效和sram片選無效

ret:注:在sysclk=20mhz時,這種方式將產生100ns

;寬的寫脈衝。該sram所要求的最小值為7ns

同樣,完成寫1個位元組到外部sram的操作共需19位元組、23個週期,需要1.15μs(包括執行ret指令的0.25μs)。在不增加i/o口的情況下,比現有文獻給出的介面電路速度提高了50%。

應用指出的是,上述程式是讀或寫1個位元組所需的時間。如果是讀或寫1個資料塊,則平均讀或寫1個位元組所需的時間將縮短到0.8μs(讀)或0.9μs(寫),比標準51執行1條movx指令所需的時間(20mhz時鐘時為1.2μs)快30%~50%。

類似地,也可以用八d鎖存器鎖存低8位位址。

結束語本文介紹了2種提高c8051訪問外部sram速度的介面電路和相應的程式。第一種方法能夠大幅度提高c8051訪問外部sram的速度,使讀或寫1個位元組的時間縮短到0.95μs(包括執行ret指令的0.25μs時間),但這種方法要多使用1個8位的i/o口。第二種方法既提高c8051訪問外部sram的速度,使讀或寫1個位元組的時間由1.7μs縮短到1.15μs,同時,還不多占用i/o口線。

利用本文介紹的方法,可以顯著地提高微控制器c8051的系統效能。該方法不僅僅用於擴充套件外部ram,也可用於擴充套件微控制器的其它並行介面上。

本科畢設 基於C8051微控制器的身份識別系統設計

大四畢業之際,花了兩個月做的乙個身份識別系統。本系統主要由電源模組 微控制器控制模組 實時時鐘模組 儲存器模組 非接觸式ic讀卡器模組 led燈模擬模組 lcd液晶模組 按鍵模組等組成。本系統採用nxp公司的mfrc522作為13.56mhz射頻讀卡器晶元,mfrc522支援iso iec 1444...

c 介面與實現的分離

由於c 沒有明確的將介面和實現分離,檔案之間的編譯依賴關係很大,如果有乙個檔案 發生變化,則可能影響其他檔案,乃至整個專案。因此,將物件實現細目隱藏於乙個指標背後的目的,我們可以設計乙個介面類。乙個實現類,負責介面的實現。如下 class personimpl class date class ad...

C 介面與繼承的區別

類 定義新的資料型別以及這些新的資料型別進行相互操作的方法 定義方式 class cat class cat object c 中所有的類都是預設由object類派生來的,顯示指定或者省略效果是一樣的,所以上面的兩個例子是完全相同的。c 中類包括 抽象類 密封類 非抽象類 abstract 表示修飾...