① 51單片機作外部RAM擴展問題
在ALE信號的下降沿之後,P0口已經由輸出0的狀態轉變為輸入的狀態,或者說那兩個MOS管已經斷開了和地線的聯系,所以就沒有你擔心的問題了。
或者說,Intel在設計51單片機時已經替你考慮過這問題了。
② 51單片機的擴展原理
51單片機具有八位數據匯流排(p0口)和16為地址中線(p2p0口),所以其擴展原理就是利用數據和地址匯流排的方式來擴展外部rom或者ram的。且又專門的指令來讀寫擴展的存儲器數據。分別是movx和movc。
③ 51單片機內部ram,外部ram的區別
單片機的這 512 位元組的 RAM在地位上並不都是平等的,而是分塊的,塊與塊之間在物理結構和用法上都是有區別的,因此形成51單片機內部ram和外部ram的區別。
一、從使用位元組區別。標准 51單片機的片內 RAM 地址從 0x00H~0x7F 共 128 個位元組。而現在我們用的 51 系列的單片機都是帶擴展片內 RAM 的,即 RAM 是從 0x00~0xFF 共 256 個位元組。而片外 RAM 最大可以擴展到 0x0000~0xFFFF 共 64K 位元組。
二、從連接地址區別。片內 RAM 和片外 RAM 的地址不是連起來的,片內是從 0x00 開始,片外也是從 0x0000 開始的,分別形成data,即片內 RAM 從 0x00~0x7F;idata,即片內 RAM 從 0x00~0xFF;pdata,即片外 RAM 從 0x00~0xFF;xdata,即片外 RAM 從 0x0000~0xFFFF。
一般情況下,使用 data 區域,data 不夠用了,就用 xdata,如果希望程序執行效率盡量高一點,就使用 pdata 關鍵字來定義。其它型號有更大的 RAM 的 51 系列單片機,如果要使用更大的 RAM,就必須得用 xdata 來訪問了。
(3)51單片機ram擴展擴展閱讀:
51單片機對所有兼容Intel 8031指令系統的統稱,8004單片機成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用於工業測控系統之中。很多公司都有51系列的兼容機型推出,今後很長的一段時間內將佔有大量市場。51單片機屬於基礎入門的一個單片機,還是應用最廣泛的一種。需要注意的是51系列的單片機一般不具備自編程能力。
51單片機的RAM用以存放可以讀寫的數據,如運算的中間結果、最終結果以及欲顯示的數據,ROM用以存放程序、一些原始數據和表格。四個8位並行I/O口,既可用作輸入,也可用作輸出。T/C包括兩個定時/記數器,既可以工作在定時模式,也可以工作在記數模式。
④ 51單片機用線選法拓展外ram最多可拓展多少個6116晶元
6116晶元,是 2K*8 的,地址線有 11 條。
51單片機,有 16 條地址線。
用線選法拓展外ram最多可拓展 5 個6116晶元。
⑤ 51單片機定義數組太大RAM不夠用如何擴展
選用內存比較大的單片機或按8080匯流排擴展內存
不管是片上256B以外的內存還是外擴內存,編程中變數前都要加xdata 修飾
其實你只要用xdata 修飾,編譯就能通過,但如果你實際上沒有擴展內存,運行時才會出錯
⑥ 51單片機怎樣擴展32k的ram,使其地址范圍為2000H-5FFFH
1、地址范圍為2000H-5FFFH,只有16K。
2、將16KRAM的定址地址腳a0-a12連接到單片機的16位擴展後的低13位地址線A0-A12上。A14接到a13上。然後用異或邏輯,將單片機A13,A14這兩位做邏輯得到RAM的/CS=(A14^A13)。
=====
建議更換內部擴展RAM,或變換定址地址范圍。
⑦ 51單片機64kb擴展ram問題
看你的數組的大小,不過才有64個位元組,內部RAM足夠了,也不用擴展外部的RAM的。
再多點,選AT89C52,又可以增加128位元組的內部RAM了,根本就不用擴展RAM。
用AT89C52,要使用增加的128B,要聲明成idata變數就行。
再說你用xdata的問題,這不能只是聲明外部RAM變數,模擬圖中還必須真的擴展外部RAM存儲器晶元才行,估計你的模擬圖肯定沒有畫,那就不行的。
⑧ 51單片機RAM擴展
要讓51外擴展的RAM起作用,關鍵是要確保在MCU相關引腳上產生正確的外部讀寫時序(我這里默認你硬體連接全部正確).
首先很關鍵的一步是要仔細看你使用的MCU的資料,
下面我僅對C語言需要注意的地方講解(匯編這里就略了,因為對於新手來說,講的復雜並不是好事)
1、對於ATMEL、WINBOND等MCU,可以在C里,直接用 xdata 保留關鍵字來對變數進行聲明,這樣在訪問這些變數時就能直接產生外部讀寫信號。
2、對於STC的MCU(比較新的MCU類,我這里就列舉目前的STC類MCU內部用1024個位元組RAM擴展),這里有更多的功能選擇,位於內部8EH地址上的AUXR是RAM的擴展管理寄存器,其中的EXTRAM位(位1):
0 : 內部擴展的EXT_RAM可以存取
RD+ 系列單片機:
在00H 到3FFH 單元(1024 位元組),使用MOVX @DPTR 指令訪問,超過400H 的地址空間總是訪問外部數據存儲器(含400H 單元),MOVX @Ri 只能訪問00H 到FFH 單元。
RC 系列單片機:
在00H 到FFH 單元(256 位元組),使用MOVX @DPTR 指令訪問,超過100H 的地址空間總是訪問外部數據存儲器(含100H 單元),MOVX @Ri 只能訪問00H 到FFH 單元。
1: External data memory access.
外部數據存儲器存取,禁止訪問內部擴展RAM,此時MOVX @DPTR / MOVX @Ri 的使用同普通8052 單片機
下面是對於STC RD+的C語言簡單舉例子:
unsigned char xdata sum;
sum = 20;
這里在 EXTRAM 為0的情況下,如果sum的地址超過400H(含400H),那麼就能產生外部RAM的讀寫時序,如果sum的地址小於400H,那麼只能訪問內部擴展的RAM,但不會產生外部RAM的讀寫時序。
這里在 EXTRAM 為1的情況下,那麼就直接產生外部RAM的讀寫時序。
好了,就講這樣簡單吧,總之,在使用MCU硬體前,必須先對該硬體資料熟悉,使用的時候,才能游刃有餘。
⑨ 51單片機擴展RAM不用P0口可以嗎
你說的是P0口也外接了ADC嗎,那簡單接在一起就行了,P0可以同時接ADC和RAM,注意地址不要從了就行
實在不想用P0口也是可以的,用軟體實現,愛用哪個口就用哪個口,但佔用周期多,速度會受到一點影響
⑩ 關於51單片機外擴RAM的問題。請大俠們幫忙解答,先謝過。
現在的rom和ram都很豐富,rom有好幾k的,你寫程序肯定夠了,除非你要用大量的數據,才會使用大量的程序空間,比如幾十k,才會考慮去擴充。
擴充是用p0口和p2口擴充,p0口是數據,p2口是地址,用373鎖存就可以擴展了。地址如果不是很大,可以用138解碼,這樣可以擴展多片晶元,如果很大,就採用線選咯。