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

将外部数据存储器中首地址为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

本题目涉及到两个片外地址。
传统的单片机,只有一个片外数据指针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
;完
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-18
1010 1012 1014 1016 1018 101A 101C 101F

最后一个地址应该是 101E 才对