增強型51系列單片機W77E58的存儲器訪問
程序2:訪問數(shù)據(jù)存儲器的方法
#define mem ((unsigned char xdata)0x0) /*定義數(shù)據(jù)指針,片內(nèi)或片外*/
PMR 1 =1; /*選擇片內(nèi)SRAM*/
Mem[12]=0x34; /*數(shù)據(jù)0x34存入片內(nèi)SRAM地址為12的單元中*/
Mem[1200]=0x56; /*由于地址超出1FFH,數(shù)據(jù)0x56存入片外SRAM*/
PMR =0xfe; /*選擇片外SRAM*/
Mem[12]=0x78; /*數(shù)據(jù)0x78存入片外SRAM地址為12的單元中*/
3 W77E58雙數(shù)據(jù)指針的應(yīng)用
與標(biāo)準的8052相同,W77E58也使用MOVX指令訪問外部數(shù)據(jù)存儲器。MOVX指令有兩種:MOVX@Ri和MOVX@DPTR。用MOVX@Ri 指令對數(shù)據(jù)存儲器進行訪問時,16位的尋址地址由兩部分組成,其中地址的低8位存在Ri中,而地址的高8位由P2口提供。用MOVX@DPTR指令對數(shù)據(jù)存儲器進行訪問時,16位地址全部由數(shù)據(jù)指針DPTR提供。
W77E58有兩個數(shù)據(jù)指針,一個是所有51系列CPU所共有的DPTR,另一個是W77E58增加的DPTR1。用MOVX@DPTR對數(shù)據(jù)存儲器訪問時,究間是DPTR起作用,還是DPTR1起作用,應(yīng)由數(shù)據(jù)指針選擇位DPS來決定。當(dāng)DPS=0時,DPTR有效;DPS=1,DPTR1有效。改變 DPS的最快捷的方法是使用INC指令。
下面的程序段是使用兩個數(shù)據(jù)指針進行數(shù)據(jù)塊移動的例子,我們可以發(fā)現(xiàn)兩個數(shù)據(jù)指針的使用為程序編寫帶來了極大方便。
程序3:兩個數(shù)據(jù)指針的應(yīng)用
MOV R2,#CNT ;R2是循環(huán)變量,裝入需要移動的字節(jié)數(shù)
MOV DPS,#00H ;清除DPS,使DPTR有效
MOV DPTR,#DHDL ;DPTR中裝入塊移動的目的地址
INC DPS ;設(shè)置DPS,使DPTR1有效
MOV DPTR,#SHSL ;DPTR中裝入塊移動的源地址
LOOP:
MOVC A,@DPTR ;從源地址中取數(shù)據(jù)
INC DPTR ;源地址+1
DEC DPS ;清除DPS,使DPTR有效
MOVX @DPTR,A ;數(shù)據(jù)存入目的地址
INC DPTR ;目的地址+1
INC DPS ;設(shè)置DPS,使DPTR1有效
DJNZ R2,LOOP ;循環(huán)直到所有移動操作完成
在進行塊長度為50的數(shù)據(jù)移動時,如果用標(biāo)準的8052,需要15720個機器周期;如果用W77E58和一個數(shù)據(jù)指針,則需要5240個機器周期;而上例中W77E58使用兩個數(shù)據(jù)批針,因而只需要3048個機器周期就可以了。很明顯,隨著數(shù)據(jù)塊的增大,節(jié)省時間的效果將更加明顯。
評論