51單片機外部存儲連接
『壹』 51單片機與外部存儲器之間是怎麼通信的
51單片機與外部擴展存儲器之間是通過數據匯流排(P0)及其相應電路來實現讀寫操作的。使用的指令是MOVX
『貳』 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直接地址訪問方式與自動分配存儲空間方式最好不要混用,否則可能產生沖突。
摘自《單片機控制裝置安裝與調試》下冊,雷林均主編
『叄』 請問C51如何訪問外部存儲器,請用c程序說明,謝謝!
簡單地說,注意兩個方面:
軟體部分:
1.添加頭文件#include<absacc.h>
2.在需要讀寫的地方用XBYTE就行,具體做法如下:
比如要訪問0xA0B0這個地址(讀數據):變數名=XBYTE[0xA0B0]就行
反過來要給0xA0B0這個地址賦一個值(寫數據):XBYTE[A0B0]=變數名
硬體部分:
硬體連接,將51MCU的P2口接外部存儲器的高8位,P0口接數據並通過鎖存器接外部存儲器的低8位,鎖存器的鎖存端接51MCU的ALE,
51MCU的讀寫端要與外部存儲器的控制端相連,就可以了。
『肆』 單片機C51晶元用於控制存儲器的主要三個引腳是什麼說明連接方法及實現的功能。
應該是單片機用於控制外部數據存儲器的主要引腳有兩個,即是控制信號RD和WR,RD為讀信號,接到存儲器的OE端,WR為寫信號,接到存儲器的WE端。其實應該叫三組匯流排:地址匯流排、數據匯流排和控制匯流排,RD和WR為控制匯流排。
『伍』 51單片機有外部數據存儲器的時候怎麼開始AD轉換
movx @dptr,A,開啟AD轉換會與外部數據存儲器發生沖突,那是因為DPTR中的地址沒有指向AD轉換器的埠地址,或者AD埠地址與外部數據存儲器的地址重復了。沒有具體電路,真正原因不好確定。
單片機可採用埠模式與AD轉換器連接比較好,見下圖。