⑴ 51單片機如何擴展512K的程序存儲器(EPROM)晶元是M27C4001
51單片機最大定址空間是64K,超過64K可以用P1口對存儲器進行分頁,512K 存儲器,可用P1.0,P1.1,P1.2接EPROM的A16,A17,A18;將其分成8個64K 的存儲器頁.
在頁間跳轉必須精確定位,在頁間跳轉指令後面加入幾條NOP空操作,在跳入的頁面也加入幾條NOP空操作,如果你擴展ROM只是為了擴充數據存儲空間,那麼你可以在每頁開始的一段內都放入(相同的)指令程序。
如從0頁換1頁,當前PC=FFF0H,ROM地址:00FFF0H
SET P1.0
NOP
NOP
NOP
NOP
SET P1.0切換後:PC=FFF2H,ROM地址:01FFF2H
要特別注意的是,中斷子程序必須放在每頁相同的位置安排入口,單片機上電時P1.0,P1.1,P1.2都是高電平,所以,你的初始化程序入口應在ROM的070000H處。
這么高難度,您只有5分,哎!!!!
⑵ MCS-51單片機可擴展的程序存儲器和數據存儲器的地址空間各為多少
51的存儲器從功能上來說可以分為程序存儲器和數據存儲器,至於到底能擴展多少存儲空間,要看你擴展的是哪一類存儲器。
訪問存儲空間時,需要用到兩個指針變數,為DPTR何PC。其中pc為程序計數器,指向下一條需要執行的指令的地址,DPTR為數據指針寄存器,這兩個變數的長度都為16位,這是51單片機內部結構決定的,無法改變。所以這兩個指針的定址能力都為64K。這樣看來,兩類存儲器的擴展能力都為64K
。但是,如果你實際擴展過存儲器,你就可以發現程序存儲器的擴展能力並沒有64K!!!
這是為什麼呢????
這得從51單片機的存儲空間的編址說起。這里僅作簡單說明,具體可以看教科書。簡單地說,內部程序存儲器和外部程序存儲器是一起編址的,它們分別佔用64K地址的一部分,所以外部擴展時要減去內部的地址空間,當然小於64K啦。而數據存儲器是內外部分別編址,內外部數據存儲器用不同的指令進行訪問,所以不用擔心單片機會混淆內外部數據存儲器,所以外部數據存儲器擴展能力有64K
⑶ mcs 51系列單片機在擴展了外部程序存儲器時,為何需要在P0口接地址鎖存器
MCS-51單片機與外部擴展的存儲器相連時,P0口是作為地址/數據准雙向口(可輸入又可輸出),ALE輸出信號的負跳變用於單下機發出的低8位地址鎖存器的鎖存控制信號。如果地地址超過8位,由P2口的A8-15來選取外部存儲器,其中又可作為訊問外部存儲器的控制端,你想想看,我要對外擴充的存儲器進行讀或者寫,首先是不是要讓單片機知道外部存儲器的地址,這個地址就是由單片機從P0口輸出(如果地址超過8位,由P0、P2組合),以選通外部器件,接下來,就是傳送數據,但在傳送數據之前,單片機是不是要把之前傳送的地址要進行鎖存呢,這個任務就是由ALE口的負跳變來完成的。一旦知道地址了,那麼,單片機就可以方便麵的和外設進行交流了。
但願,我的解說,能夠對你有幫助。
⑷ 51單片機的內存擴展
你先告訴你們這出題 的老師,現這2764可是不好購買了,也可能你們以後一輩子用不上的了。如真是在學習的最好選用一片存貯器再加一片I/O晶元來做那才更實在點。
⑸ 在51單片機的外部,需要擴展2KB的程序存儲器,請將以下電路原理圖連接完整
因為是在模擬軟體上畫,樓主耐心點看。
註:1.你圖中的74LS373的G端就是連我圖中的LE端;
2.其地址范圍是:0000H~07FFH。
⑹ 51單片機需要擴展程序存儲器嗎
不用擴展。
程序存儲器是用來存儲「程序代碼」的,還沒有見到誰編寫的「程序代碼」能超過32K位元組。
有人編寫的大規模的程序,說是超過了多少多少K,其實往往都是包括了大量的數據表格,如漢字點陣等等,根本不是程序代碼。
這樣的內容,都可以用IIC匯流排的EEPROM來存儲,這樣就可以代替三匯流排的程序存儲器。
⑺ 51單片機程序儲存器擴展。
你定義一個xdata類型的變數就可以了。
例
unsigned char xdata *p;//p就是你的RAM地址,
你要取地址為addr的數據,你可以這樣。
p=addr;
temp=*p;
⑻ 51單片機程序存儲器擴展的一些問題
RAM還是RAM,當然有起作用了,如果RAM不夠就要擴展,51RAM只有128B,有時確實不夠用,也可以用52、53的單片機,看看程序有沒寫錯了。
有點奇怪,為什麼要用AT28C64呢,可以用AT89S52內部就有8KB的FLASH,而且兩種價格相當,我這52跟51是一樣的。
還是建議你不要用擴展的ROM,用來玩還可以,用來做設計不實用,佔用太多IO口不說,安全性不高,你也不想自己苦寫的程序被人盜走吧。
你可以提高編程技巧,使程序簡捷,減少佔用空間。或改用其它內帶大容量ROM的晶元。
51的ROM確實小,不過我還沒寫出超出8K的(匯編),用AVR的吧如:ATmega32吧,內部就有32K的FLASH,2KBRAM,1KBEEPROM跟51一樣40個腳,速度大約是51的8倍。ATmega128有128K的FLASH(不過管腳有點多),跟AT89S51是同一個廠家.
⑼ C51單片機外部中斷擴展程序設計
外部中斷0設置為低電平觸發,去掉while循環後一直按下按鍵實際代碼為
delay();
p1=0xfe;
delay();
ex0=0;
p1=_crol_(p1,1);
delay();
ex0=1;
p1=0x00;
一直重復.
之前的代碼進入中斷後會一直循環,並不會退出中斷。正確做法中斷應該改為:
void
tx0()
interrupt
0
using
0
{
unsigned
char
i;
delay();
p1=0xfe;
delay();
ex0=0;
while(1)
{
p1=_crol_(p1,1);
delay();
if(p3&0x04)
//判斷是否松開中斷0的按鍵
{
break;
}
}
ex0=1;
p1=0x00;
}
⑽ 51單片機串列口擴展並行輸入口的C語言程序
那需要看你用什麼晶元了,不同的晶元程序也就 不同,沒有晶元怎麼能編程呢?