線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:8397
推到 Plurk!
推到 Facebook!

8051外擴記憶體以及程式中的宣告Xdata位址之問題

答題得分者是:DavidLo
jerichowang
一般會員


發表:17
回覆:27
積分:8
註冊:2005-07-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-12-04 12:01:42 IP:211.76.xxx.xxx 未訂閱
如題.小弟我是用89C51ED2的chip.並且是使用.Keil C的C語言編譯器. 最近需要做外擴記憶體的應用..我的記憶體是 ISSL61256的32K*8bit的sram 參考以下的接線圖 當8051對外部記憶體讀/寫資料時,P0埠首先送出待讀寫記憶體位址之低位元組位址碼(A0~A7),隨即配合位址閂鎖效能(ALE)信號將此低位元組位址碼閂鎖於外加之閂鎖器(74LS373)上,然後P0埠馬上又當成資料匯流排以便傳遞待讀入/寫出之資料。當ALE為高電位期間,位址閂鎖器74LS373被致能,此時來自P0埠的信號A0~A7將會呈現在74LS373的輸出端上。緊接著當ALE從高電位變成低電位時,74LS373被禁能,此時會使得先前出現的位址信號A0~A7被鎖住於74LS373輸出端上,直到下一個ALE的高電位脈衝信號來臨時才會改變。 74LS373只有在ALE從高電位變成低電位,才能鎖住位址信號於其輸出端上。而將位址信號A0~A7鎖住的理由是因為他們在整個讀取週期中並非一直保持有效的緣故,而A8~A15由於在整個讀取週期中一直保持有效,所以就不必閂鎖。在P0送出低位元組位址碼之同時,P2亦送出待讀寫記憶體位址之高位元組位址碼(A8~A15),待位址碼穩定時,8051會因執行MOVX A,@Ri或MOVX A,@DPTR指令而產生低電位之RD(P3.7)信號以讀取外部資料記憶體之資料,或者8051因執行MOVX @Ri,A或MOVX @DPTR,A之指令而產生低電位之WR(P3.6)信號以寫資料到外部資料記體。 在C中要宣告對外部記憶體的存取使用 xdata unsigned char temp _at_位址 現在的問題是 1.當我是用如圖的硬體接線時候.我宣告了Xdata變數,8051相關給記憶體用的接腳電位時脈是否就如同MOVX A,@Ri或MOVX A,@DPTR一樣..ALE RD WR,皆相同呢??? 2.我的記憶體其實是要用來先儲存外部裝置所丟出的資料.當外部裝置丟完後會產生一個訊號接到8051,通知8051說"你可以開始接收ram的資料了",如此循環. 而總共從記憶體位址0000H 開始會有19200 BYTE要接收..所以我在8051端 是否要像這樣宣告一個指標 xdata unsigned char* pointer _at_0x0000 用這指標的位址開始讀取sram的值然後透過RS232給電腦.讀完一次後 pointer++;讀取下一個位址...直到pointer加到19200次 請問是這樣做嗎...但是89C51ED2有1792byte的記憶體也是被宣告成外部記憶體 xdata的形式...所以說我是否必須跳過這1792byte才能做上述的接收呢 謝謝大家
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-12-04 16:07:48 IP:218.169.xxx.xxx 未訂閱
1. xdata C指令會轉成MOVX指令.KEIL中可以將C轉ASM,你可以驗證看看. 2. 請參考CPU規格中,Expanded RAM(XRAM)有詳細說明.AUXR bit1 EXTRAM決定. http://www.atmel.com/dyn/resources/prod_documents/doc4235.pdf
jerichowang
一般會員


發表:17
回覆:27
積分:8
註冊:2005-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-12-05 16:07:38 IP:211.76.xxx.xxx 未訂閱
那麼我的記憶體其實是要用來先儲存外部裝置所丟出的資料.當外部裝置丟完後會產生一個訊號接到8051,通知8051說"你可以開始接收ram的資料了",如此循環. 而總共從記憶體位址0000H 開始會有19200 BYTE要接收..所以我在8051端 是否要像這樣宣告一個指標 xdata unsigned char* pointer _at_0x0000 用這指標的位址開始讀取sram的值然後透過RS232給電腦.讀完一次後 pointer ;讀取下一個位址...直到pointer加到19200次 請問是這樣做嗎...但是89C51ED2有1792byte的記憶體也是被宣告成外部記憶體 xdata的形式...所以說我是否必須跳過這1792byte才能做上述的接收呢
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-12-06 00:07:31 IP:218.169.xxx.xxx 未訂閱
   sfr AUXR=0x8E;//define
   unsigned char xdata *ptr;;//宣告一個指標
   ...
   AUXR|=0x02;//Set to access external memory
   ...
   ptr=0;//start from address 0
   for(i=0;i<19200;i  )//loop 19200 times
      {
      SBUF=*ptr;//資料送出
      //加delay或判定傳輸完成
      ptr  ;//指標加1
      }
系統時間:2024-04-26 8:42:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!