51单片机中的外部RAM利用累加器对内部RAM进行寄存器间接寻址可以吗?
我们老师说,累加器是单片机内部和外部沟通的桥梁,内外部数据互访必须经过累加器,所以内外部RAM不能通过直接寻址访问对方,我个人产生了这么一个疑问:外部RAM可以利用累加器...
我们老师说,累加器是单片机内部和外部沟通的桥梁,内外部数据互访必须经过累加器,所以内外部RAM不能通过直接寻址访问对方,我个人产生了这么一个疑问:
外部RAM可以利用累加器进行寄存器间接寻址访问外部RAM的数据,那外部RAM 能不能通过寄存器间接寻址访问内部RAM的数据呢?
内部RAM又能不能通过寄存器间接寻址访问外部RAM呢?
本人初学单片机,词不达意的地方请高手见谅啊,先谢了!!
对了,请教高手这单片机相关的问题应该放到百度知道问题分类里面的哪个分类比较好呢?给个建议。。。呵呵
谢了 展开
外部RAM可以利用累加器进行寄存器间接寻址访问外部RAM的数据,那外部RAM 能不能通过寄存器间接寻址访问内部RAM的数据呢?
内部RAM又能不能通过寄存器间接寻址访问外部RAM呢?
本人初学单片机,词不达意的地方请高手见谅啊,先谢了!!
对了,请教高手这单片机相关的问题应该放到百度知道问题分类里面的哪个分类比较好呢?给个建议。。。呵呵
谢了 展开
1个回答
2013-09-20
展开全部
访问外部RAM只有4条指令而已,并且都与累加器A有联系:
movx A ,@DPTR ;DPTR中存放要访问外部RAM的16位地址
movx @DPTR,A
movx A,@Ri
;Ri为R0或R1,8位地址
movx @Ri,A
你的“外部RAM可以利用累加器进行寄存器间接寻址访问外部RAM的数据”我感觉说法有问题,不管是内部ram还是外部ram,都只有CPU(注意:CPU不是单片机)可以访问,而不是你所说互相访问,
举例:外部RAM(地址0x1000)的数据要送到内部RAM(地址0x40)中
mov DPTR,#1000H
movx A,@DPTR
mov 40H,A
反之亦然
mov DPTR,#1000H
mov A,40H
movx @DPTR,A
不知道我说清楚了没
你的问题补充:
比方说
mov a,#50H
movx @a,1000H
这样可以吗?
谢谢!!
回答:你例子中的寻址方式不存在,与其相似的是寄存器间接寻址
mov @Ri,direct;地址direct仅限于片内RAM
间接寻址用Ri,不能用累加器A的。。。
还是上面那些话,要与外部RAM打交道,必须要用DPTR(地址大于0xFF),就像某些51单片机,像STC的片内RAM为1K,但要寻址大于0xFF的地址部分还是要用到DPTR
最后改正你的例子
mov R0,#50
mov @R0,100;注意此处地址小于255,且是内部RAM之间的数据转移;
或
mov DPTR,#1000H
movx A,@DPTR ;访问大于255的外部地址只能用这条指令,切记切记
mov 50H,A
movx A ,@DPTR ;DPTR中存放要访问外部RAM的16位地址
movx @DPTR,A
movx A,@Ri
;Ri为R0或R1,8位地址
movx @Ri,A
你的“外部RAM可以利用累加器进行寄存器间接寻址访问外部RAM的数据”我感觉说法有问题,不管是内部ram还是外部ram,都只有CPU(注意:CPU不是单片机)可以访问,而不是你所说互相访问,
举例:外部RAM(地址0x1000)的数据要送到内部RAM(地址0x40)中
mov DPTR,#1000H
movx A,@DPTR
mov 40H,A
反之亦然
mov DPTR,#1000H
mov A,40H
movx @DPTR,A
不知道我说清楚了没
你的问题补充:
比方说
mov a,#50H
movx @a,1000H
这样可以吗?
谢谢!!
回答:你例子中的寻址方式不存在,与其相似的是寄存器间接寻址
mov @Ri,direct;地址direct仅限于片内RAM
间接寻址用Ri,不能用累加器A的。。。
还是上面那些话,要与外部RAM打交道,必须要用DPTR(地址大于0xFF),就像某些51单片机,像STC的片内RAM为1K,但要寻址大于0xFF的地址部分还是要用到DPTR
最后改正你的例子
mov R0,#50
mov @R0,100;注意此处地址小于255,且是内部RAM之间的数据转移;
或
mov DPTR,#1000H
movx A,@DPTR ;访问大于255的外部地址只能用这条指令,切记切记
mov 50H,A
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询