單片機數據存儲器擴展
❶ 為單片機拓展外部程序存儲器時,多片ROM晶元的容量不同如何拓展
拓展外部存儲器,通常都會選擇相同容量的晶元,因為這樣構建解碼電路會比較簡單。如果因一些特殊需要,必須使不同容量的器件,那要看擴展的存儲空間是否要求連接的地址。若必須是連接地址,地址解碼電路比較復雜,適合採用CPLD或FPGA等可編程器件來實現。如果每片擴展存儲器之間,並不要求連續地址,也可考慮按最大容量器件的地址范圍來設計解碼。
❷ 51單片機擴展外部數據存儲器6264,怎麼用C語言實現對其操作
2.擴展RAM編程基礎
(1)弄清擴展器件的地址
在圖7.2.5中,U3的ABC接單片機A13,A14,A15,所以片選信號對應地址最高位,即:「CBAxxxxx xxxxxxxx」(x為任意)。U4片選接CS1,即Y1,CBA=001,可得U4的地址范圍是0x2000~0x3fff。U5接CS3,即Y3,CBA=011,地址為0x6000~0x7fff。U6接CS4,即Y4,CBA=100,地址為0x8000~0x9fff。知道了器件地址,可以利用直接地址、外部數據指針來訪問存儲器。通過設置,也可以讓編譯器在擴展RAM中自動分配存儲單元。
(2)直接地址訪問
①向U4寫數據:
XBYTE[0x2000+addr]=dat; //addr為U4內部地址,取值為0~0x1fff;dat為數據。
②讀出U4數據:
dat=XBYTE[0x2000+addr];
也可以用頁訪問方式。頁訪問方式,實際就是先把16位地址高8位送P2口,通過低8位地址讀寫。
③按頁讀寫U4:
P2=0x20+page; // page為頁,取值為0x00~0x1F。
PBYTE[addr]=dat; // addr為頁內地址,取值為0x00~0xFF。
dat=PBYTE[addr];
④讀U6
dat=XBYTE[0x8000];//讀U6,地址取0x8000~0x9fff任何值,都一樣。
⑤寫U5
XBYTE[0x6000]=dat; //寫U5,地址取0x6000~0x7fff任何值,都一樣。
(3)數據指針
如,讀寫U4,可以這樣寫:
unsigned char xdata *p=0x3000; //聲明指針p,並初始指向0x3000單元
x=*p; //讀指針所指向的位置
p=p+1; //指針指向下一單元
*p=0x16; //向指針所指向的位置寫入數據
(4)讓編譯器自動分配存儲空間
①為了能讓編譯器自動分配存儲空間,並使用擴展RAM,必須設置擴展RAM地址。在Keil編程軟體中,點擊工具欄快捷圖標「 」,彈出目標選項對話框。按圖7.2.6所示,設置RAM起始地址和長度。
②變數聲明時使用xdata關鍵詞。如:
unsigned char xdata a;//變數a使用擴展RAM空間。
特別注意,擴展RAM直接地址訪問方式與自動分配存儲空間方式最好不要混用,否則可能產生沖突。
摘自《單片機控制裝置安裝與調試》下冊,雷林均主編
❸ 存儲器的擴展方式哪三種
存儲器的擴展方式有字擴展、位擴展、字位同時擴展。存儲器晶元與單片機擴展連接具有共同的規律。即不論何種存儲器晶元,其引腳都呈三匯流排結構,與單片機連接都是三匯流排對接。另外,電源線接電源線,地線接地線。
目前生產的存儲器晶元容量有限,在字數或字長方面與實際存儲器要求有所差距,所以要在字向與位向兩方面進行擴充,才能滿足實際存儲器的要求。
cpu對存儲器進行讀寫操作時,首先由地址匯流排給出地址信號,然後再發出有關進行讀操作與寫操作的控制信號,最後在數據匯流排上進行信息交換。
(3)單片機數據存儲器擴展擴展閱讀:
存儲器的擴展技術:
總片數=總容量/(容量/片)。
例:存儲器容量為8K×8b,若選用2114晶元(1K×4b),則需要的晶元數為:(8K×8b)/(1K×4b)=16(片)。
(1)位擴展。
只在位數方向擴展(加大字長),而晶元的字數和存儲器的字數是一致的。即b前面不一樣,K前面保持一樣。
例:用64K×1b的SRAM晶元組成64K×8b的存儲器,所需晶元數為:(64K×8b)/(64K×1b)=8(片)。
位擴展的關鍵就是將兩個存儲晶元當成一個存儲晶元來用,讓兩個存儲晶元同時工作,同時被選中,同時做讀操作,同時做寫操作,要想保證同時,就是把兩個晶元的片選,用相同的信號進行連接。
(2)字擴展。
僅在字數方向擴展,而位數不變。即K前面不一樣,b前面保持一樣。
例:用16K×8b的SRAM組成以64K×8b的存儲器,所需晶元數為:(64K×8b)/(16K×8b)=4(片)。
(3)字和位同時擴展。
參考資料來源:網路-位擴展
參考資料來源:網路-字擴展
❹ 為什麼要對單片機系統進行存儲器擴展
如果單片機系統原有的資源不夠充足、不能滿足應用所需的要求,那麼就需要進行存儲器的擴展。
可能需要擴展片外的程序存儲器,也可能需要擴展片外的數據存儲器,某些情況下還需要結合軟體進行更復雜的存儲器介面擴展(例如大容量的SPI Flash或者走SPI子協議的SD卡等等)。
❺ 單片機系統擴展的主要擴展
單片機的系統擴展主要有程序存儲器(ROM)擴展,數據存儲器(RAM)擴展以及I/O口的擴展。
外擴的程序存儲器與單片機內部的程序存儲器統一編址,採用相同的指令,常用晶元有EPROM和EEPROM,擴展時P0口分時地作為數據線和低位地址線,需要鎖存器晶元,控制線主要有ALE、。
擴展的數據存儲器RAM和單片機內部RAM在邏輯上是分開的,二者分別編址,使用不同的數據傳送指令。常用的晶元有SRAM和DRAM以及鎖存器晶元,控制線主要採用ALE、、。
常用的可編程I/O晶元有8255和8155。用8255擴展並行I/O口時需要鎖存器,8155則不用。對擴展I/O口的定址採用與外部RAM相同的指令,因此在設計電路時要注意合理分配地址。8255和8155的工作方式是通過對命令控制字的編程來實現的,在使用時首先要有初始化程序。
MCS-51單片機有很強的擴展功能,外圍擴展電路、擴展晶元和擴展方法都非常典型、規范。