简单的单片机实验题目!编了下,不知道对不对!麻烦指点!

将外部数据存储器中首地址为1000H的连续存放的八个数与首地址为1010H的间隔存放的八个数进行交换。(以下地址为十六进制)10001001100210031004100... 将外部数据存储器中首地址为1000H的连续存放的八个数与首地址为1010H的间隔存放的八个数进行交换。(以下地址为十六进制)
1000 1001 1002 1003 1004 1005 1006 1007
↓↑
1010 1012 1014 1016 1018 101A 101C 101F
这个程序我编了下,但是不知道对不对,电脑没在身边,用手机打的,麻烦高手指教下,而且感觉自己编的比较麻烦。。。。。我是将外地址1000H的内容先放到片内30H的内容里了,然后将外地址1010H的内容放到1000H内,之后再将30H的内容放到1010H内。
MOV DPTR, #1000H
MOV R7, #10H
MOV R6, #00H
MOV R2, #8
MOV R0, #30H
LOOP: MOVX A, @DPTR
MOV @R0,A ;将外地址1000H的内容放到内存储器内
PUSH DPH
PUSH DPL
MOV DPH, R7
MOV DPL,R6 ;将(DPTR)=1010H
MOVX A,@DPTR
POP DPH
POP DPL
MOVX @DPTR, A ;将首地址1010H的内容放到1000H
INC DPTR
PUSH DPH
PUSH DPL
MOV A,@R0 ;将片内存储器(即外地址1000H)的内容放到A内
MOV DPH, R7
MOV DPL, R6
MOVX @DPTR, A ;将外地址1000H的内容放到外1010H中
INC DPTR
MOV R7,DPH
MOV R6,DPL
POP DPL
POP DPH
DJNZ R2,LOOP
展开
 我来答
做而论道
高能答主

2009-10-18 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3.2万
采纳率:86%
帮助的人:8812万
展开全部
本题目涉及到两个片外地址。
传统的单片机,只有一个片外数据指针DPTR,地址的处理就比较麻烦。
稍新一些的单片机,如AT89S52,就有两个DPTR。
楼主的题目,像是学校里面的作业,一般是不使用两个DPTR的。
本题目,数据量很小,可以先全部倒到片内,再传送到片外的目的地。
这样便于大批数据的修改,但是,为了解决现在的小问题,程序未免嫌长。
还是在楼主的程序上,稍加修改。
程序如下:
;
MOV DPTR, #1000H ;第一块地址
MOV R7, #10H ;第二块地址
MOV R6, #10H ;此处修改了,原为00H
MOV R2, #8
LOOP:
MOVX A, @DPTR ;取第一地址内容
MOV B, A ;暂时存放
PUSH DPH
PUSH DPL
MOV DPH, R7
MOV DPL, R6 ;DPTR = 1010H
MOVX A,@DPTR ;取第二地址内容
XCH A, B
MOVX @DPTR, A ;交换存放
INC DPTR
MOV R7, DPH ;保存第二地址
MOV R6, DPL
POP DPL ;恢复第一地址
POP DPH
XCH A, B
MOVX @DPTR, A ;将首地址1010H的内容放到1000H
INC DPTR
DJNZ R2,LOOP
;完
一万光年MEGn0
2009-10-18 · TA获得超过3713个赞
知道大有可为答主
回答量:4602
采纳率:67%
帮助的人:1266万
展开全部
1010 1012 1014 1016 1018 101A 101C 101F

最后一个地址应该是 101E 才对
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式