對外部RAM單元只能使用寄存器間接尋址方式,與累加器A之間進行數(shù)據(jù)傳送,外部RAM數(shù)據(jù)傳送指令有4條。
前2條采用DPTR作間址寄存器,因DPTR為16位地址指針,所以這兩條指令可尋址外部RAM的整個64KB空間,占用P0口和P2口作地址總線。后2條采用R0,R1作8位地址指針,尋址范圍只限于外部RAM最低256個單元,只占用P0口。即此時P2口可作其他用途。外部RAM數(shù)據(jù)傳送指令的助記符采用MOVX。以區(qū)別于內(nèi)部RAM數(shù)據(jù)傳送指令MOV,這樣才能實現(xiàn)8051對內(nèi)部RAM和外部RAM的獨立編址。
指令MOV A,@DPTR將地址指針DPTR指向的外部數(shù)據(jù)存儲器單元中的數(shù)據(jù)送入累加器A中。該指令所占空間為1字節(jié),執(zhí)行時間為2周期,機器碼為EO。
假定指令運行前累加器A中內(nèi)容為45H,DPH中為01H,DPL中為22H,外部數(shù)據(jù)存儲器0122中為23H。下面我們看看指令的運行過程:
指令運行后,累加器A中的內(nèi)容變?yōu)?3H,P的值的變?yōu)?
指令MOV @DPTR,A將累加器A中數(shù)據(jù)送入地址指針DPTR指向的外部數(shù)據(jù)存儲器單元中。該指令所占空間為1字節(jié),執(zhí)行時間為2周期,機器碼為F0。
假定指令運行前累加器A中內(nèi)容為79H,DPH中為10H。DPL中為46H,外部數(shù)據(jù)存儲器1046H中為15H。下面我們看看指令的運行過程:
指令運行后,外部數(shù)據(jù)存儲器1046H單元中的內(nèi)容變?yōu)?9H
指令MOV A,@RO將地址指針R0指向的外部數(shù)據(jù)存儲單元中的數(shù)據(jù)送入累加器A中。該指令所占空間為1字節(jié),執(zhí)行時間為2周期,機器碼為E2
假定指令運行前累加器A中內(nèi)容為72H,R0中為59H。指令運行后,外部數(shù)據(jù)存儲器59H中為14H,P的值變?yōu)?
指令MOV A,@R1將地址指針R1指向的外部數(shù)據(jù)存儲器單元中的數(shù)據(jù)送入累加器A中。該指令所占空間為1字節(jié),執(zhí)行時間為2周期,機器碼為E3
假定指令運行前累加器A中內(nèi)容為63H,R1中為32H,外部數(shù)據(jù)存儲器32H中為34H。下面我們看看指令的運行過程:
指令運行后,累加器A中的內(nèi)容變?yōu)?4H,P的值變?yōu)?
指令MOV @RO,A將累加器A中的數(shù)據(jù)送入地址指針R0指向外部數(shù)據(jù)存儲器單元中。該指令所占空間為1字節(jié),執(zhí)行時間為2周期,機器碼為 F2
假定指令運行前累加器A中內(nèi)容為61H,R0中為51H,外部數(shù)據(jù)存儲器51H中為38H。下面我們看看指令的運行過程:
指令運行后,外部數(shù)據(jù)存儲器51H單元中的內(nèi)容變?yōu)?1H。
指令MOV @R1,A將累加器A中的數(shù)據(jù)送入地址指針R1指向的外部數(shù)據(jù)存儲器單元中。該指令所占空間為1字節(jié),執(zhí)行時間為2周期,機器碼為 F3
假定指令運行前累加器A中內(nèi)容為83H,R1中為25H,外部數(shù)據(jù)存儲器25H中為11H。下面我們看看指令的運行過程:
指令運行后,外部數(shù)據(jù)存儲器25H單元中的內(nèi)容變?yōu)?3H
從上述指令我們還可以看出外部RAM單元只能與累加器A之間進行數(shù)據(jù)傳送。
例如要將外部RAM中的110H單元的數(shù)據(jù)傳送到外部RAM的1231H單元,須執(zhí)行以下指令:
MOV DPTR,#1110H
MOVX A,@DPTR
將外部數(shù)據(jù)存儲器1110H單元中的數(shù)據(jù)取回累加器A中
MOV DPTR,!1231H
MOVX @DPTR,A
將累加器A中的數(shù)據(jù)送入外部數(shù)據(jù)存儲器1231H單元中。