MCS—51单片机的数据传送指令

我不太明白外部RAM和内部RAM的数据传送

我记得51里对片外的访问只有四条指令:
MOVX A, @DPTR
MOVX A, @Ri
MOVX @DPTR, A
MOVX @Ri, A

一碰到直接地址的我就懵了

举一例子:片外RAM 20H单元传送到片内RAM 20H单元 的指令

有人告诉我是这个:
mov r0,20h (关键就这儿 要访问片外不是带X吗 这样 mov r0,20h 不就是把片内的20H单元 传送到R0)
movx a,@r0
mov 20h,a

关键是我不明白用什么指令把 片外的直接地址 传到寄存器
(因为我记得 带X为访问外部RAM的指令 那不带X不就是片内的吗 可是带X的指令就这四条···· 咱小白一个········· )

51单片机全部的数据传送指令如下图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-08-29
应该是这样:

mov r0,#20h ;立即数0x20 --> r0
movx a,@r0 ;以r0为地址(0x20),从片外读数值到a
mov 20h,a ;把a的值move到片内地址0x20处。

对,movx,都是片外。。

MOVX @DPTR,A ;A送外部数据(16位地址)
MOVX @R0,A ;A送R0间址即外部数据(8位地址)
MOVX @R1,A ; A送R1间址即外部数据(8位地址)

MOVX A, @DPTR ;外部数据 ->A(16位地址)
MOVX A, @R0 ;R0间址即外部数据->A(8位地址)本回答被提问者采纳
第2个回答  2008-08-29
举一例子:片外RAM 20H单元传送到片内RAM 20H单元 的指令
有人告诉我是这个:
mov r0,20h //这里不是访问片外,而是将地址20H赋给内部寄存器R0
movx a,@r0 //这里才是访问片外,而片外要访问的地址已经在R0中.
mov 20h,a

你说对了,访问片外的就只有那四条指令.访问片外实际上是对P2口赋上相应的地址,再从P0口读出该地址的值.一般用在片外扩展的用途上.

关键是我不明白用什么指令把 片外的直接地址 传到寄存器.
如果是用C语言的话,基本上一条语句就搞定了,这样就可以说直接了.
用汇编,就只有象上面这样,赋地址值,访问外部地址,取其值.这三步曲了.
相似回答