?? 編了一段華邦77e58擴(kuò)展ram的代碼.txt
字號(hào):
編了一段華邦77e58擴(kuò)展ram的代碼,供參考(曉奇)
C文件:
//////////////////////////////////////////////////////////////////
// winbond w77e58擴(kuò)展RAM以及雙數(shù)據(jù)指針的編程方法演示。 //
// -- xiaoqi //
// ----------------------------------------------------------- //
// 片內(nèi)有1K的擴(kuò)展RAM,并且有兩個(gè)數(shù)據(jù)指針,dptr/dptr1,但是在實(shí)際 //
// 操作中,dptr1并不明顯地出現(xiàn),采用另外一個(gè)指針選擇器DPS進(jìn)行選 //
// DPS=0選擇dptr,DPS=1選擇dptr1,選擇了dptr1以后表面上所用的符號(hào) //
// 依然是dptr, 并沒(méi)有dptr1這個(gè)指針出現(xiàn),所以要知道當(dāng)前所用的究 //
// 竟是哪一個(gè),就必須查詢DPS. //
// 外部ram擴(kuò)展部分將與內(nèi)部擴(kuò)展ram重疊了前面的第一K空間,但可以 //
// 通過(guò)設(shè)定DME0(PMR.0)進(jìn)行內(nèi)外選擇,所以RAM不會(huì)被浪費(fèi)。當(dāng)DME0 //
// =1時(shí),內(nèi)部擴(kuò)展RAM被打開(kāi),在內(nèi)部擴(kuò)展RAM空間范圍內(nèi)操作時(shí),外部 //
// 總線P0/P2上不會(huì)出現(xiàn)選址和數(shù)據(jù)信號(hào);當(dāng)DME0 =0時(shí),內(nèi)部擴(kuò)展RAM //
// 被關(guān)閉,所有與xdata操作有關(guān)的指令都建立在外部擴(kuò)展ram上。 //
//--------------------------------------------------------------//
// 在較大批量的數(shù)據(jù)傳遞的時(shí)候,還是用匯編比較爽 //
// PMR不支持位尋址操作,只能用數(shù)據(jù)對(duì)PMR進(jìn)行與或操作 //
// 頭文件選用在winbond目錄下的頭文件W77C32.H //
//////////////////////////////////////////////////////////////////
#include
#include
#define uchar unsigned char
// 搞了半天,還是編一段匯編來(lái)得爽快
extern void xdatamov(uchar xdata *ptr1,uchar xdata *ptr2,uchar len);
uchar xdata nxTemp[128]; // 服從系統(tǒng)分配地址
uchar xdata nxTemp1[128] _at_ 0x300; // 自定義數(shù)據(jù)地址
void main()
{
register uchar i; // 必須是unsigned..,否則無(wú)限循環(huán)
PMR |= 1; // 片內(nèi)SDRAM打開(kāi)
for(i=0;i<128;i++) // 賦初值
{
nxTemp[i] = i+128;
}
xdatamov(nxTemp1,nxTemp,128); // 使用雙數(shù)據(jù)指針進(jìn)行數(shù)據(jù)傳遞匯編代碼
_nop_(); // 軟件仿真時(shí)察看數(shù)據(jù)傳遞結(jié)果
while(1);
}
asm文件:
#include"77e58.inc"
?PR?_xdatamov?DATAMOV SEGMENT CODE
?DT?_xdatamov?DATAMOV SEGMENT DATA OVERLAYABLE
PUBLIC _xdatamov
RSEG ?DT?_xdatamov?DATAMOV
?_xdatamov?BYTE:
ptr1?040: DS 2
ptr2?041: DS 2
; C語(yǔ)言調(diào)用格式:
; void xdatamov(uchar xdata *ptr1,uchar xdata *ptr2,uchar len)
RSEG ?PR?_xdatamov?DATAMOV
_xdatamov:
USING 0
; R3 = len
MOV DPH1,R6 ;ptr2
MOV DPL1,R7
MOV DPH,R4 ;ptr1
MOV DPL,R5
CLR A
MOV R7,A
?C0001:
MOV A,R7
CLR C
SUBB A,R3
JNC ?C0004
MOV DPS,#0 ; dps = 0指向dptr
MOVX A,@DPTR ; 讀取數(shù)據(jù)
INC DPTR
INC DPS ; dps = 1指向dptr1
MOVX @DPTR,A ; 實(shí)際上它就是dptr1
INC DPTR
INC R7
SJMP ?C0001
?C0004:
RET
; END OF _xdatamov
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -