简单的单片机实验题目!编了下,不知道对不对!麻烦指点!
将外部数据存储器中首地址为1000H的连续存放的八个数,与首地址为1010H的间隔存放的八个数进行交换。(以下地址为十六进制)
1000 1001 1002 1003 1004 1005 1006 1007
↓↑
1010 1012 1014 1016 1018 101A 101C 101E
这个程序我编了下,但是不知道对不对,电脑没在身边,用手机打的,麻烦高手指教下,而且感觉自己编的比较麻烦。。。。。
程序略。
悬赏分:0 - 解决时间:2009-10-18 13:09
;------------------------------------------------
最佳答案:
本题目涉及到两个片外地址。
传统的单片机,只有一个片外数据指针DPTR,处理两个地址就比较麻烦。稍新一些的单片机,如AT89S52,有两个DPTR了,就方便多了。
楼主的题目,像是学校里面的作业,这样的环境一般是不使用两个DPTR的。
本题目,数据量很小,可以先全部倒到片内,再传送到片外的目的地。
这样便于大批数据的修改,但是,为了解决现在的小问题,程序未免嫌长。
还是在楼主的程序上,稍加修改。
程序如下:
;------------------------------------------------
MOV DPTR, #1000H ;第一块地址
MOV R7, #10H ;R7 R6是
MOV R6, #10H ;第二块地址
MOV R2, #8
LOOP:
MOVX A, @DPTR ;取第一地址内容
MOV B, A ;暂时存放
PUSH DPH
PUSH DPL ;保存地址
MOV DPH, R7
MOV DPL, R6 ;DPTR = 第二块地址
MOVX A, @DPTR ;取第二地址内容
XCH A, B ;交换
MOVX @DPTR, A ;存放
INC DPTR ;第二地址要加二
INC DPTR ;变为1012H
MOV R7, DPH ;保存第二地址
MOV R6, DPL
POP DPL ;恢复第一地址
POP DPH
XCH A, B
MOVX @DPTR, A ;将首地址1010H的内容放到1000H
INC DPTR ;变为1001H
DJNZ R2, LOOP
;完
;------------------------------------------------
回答者: 做而论道 - 八级 2009-10-18 10:20
提问者对于答案的评价:好的!
原文网址:http://zhidao.baidu.com/question/121870211.html
;------------------------------------------------