求解释下下面单片机程序的每一步是什么意思,谢谢了

1、 试编程序实现把外RAM的2000H单元后的30H个字节转存入外RAM地址3000H,以后连续存放。(10分)
MOV R2,#30H
MOV DPL,#00H
LOOP:MOV DPH,#20H
MOVX A,@DPTR
MOV DPH,#30H
MOVX @DPTR,A
INC DPL
DJNZ R2,LOOP
RET

既然你还没学汇编,我就不用专业术语给你解释了,用好理解的方法帮你简单解释下,如果有必要我们再讨论

org 0000h ;表示下一条指令的地址是0000h
ljmp 0030h ;跳转到30h处的指令
org 0030h
cword:mov a,#0c5h ;cword:人为定义的标号,mov a,#0c5h :把0c5h放入a寄存器里
mov dptr,#0030h ;把30h放入dptr寄存器中
movx @dptr,a ;@表示存储器地址,地址数为@后的寄存器中的内容(30h),即把a中的内容放如地址数为30h的存储区
mov r0,#20h
mov @r0,a
mov r0,a
push acc ;把a寄存器压入堆栈
anl a,#1fh ;a和1fh做“和”运算
movc a,@a+dptr
inc dptr ;dptr做+1处理
movx @dptr,a
mov b,a
pop acc ;弹出a
cword1:sjmp cword1 ;跳到sword1处,即做自循环
end ;结束

注:
mov:访问片内RAM
movx:访问片外RAM
movc:访问ROM

RAM:数据存储区
ROM: 程序存储区

mov a,#0c5h 与 mov a,0c5h 是不同的,前者是将0c5h放入a;后者是将RAM地址数为0c5h处的数据放入a。

mov r0,a 与 mov @r0,a 是不同的,前者将a的内容放入r0寄存器;后者将a的内容放入数据存储区某处,其地址为r0的内容。

这段指令把数据挪来挪去,貌似没具体的意图,结果不重要

希望对你有帮助,不明白的我们可以再讨论
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-25
MOV R2,#30H;R2=30H,作为DJNZ指令中,LOOP程序段循环的次数
MOV DPL,#00H;DPTR低8位为00H
LOOP:MOV DPH,#20H;DPTR高8位为20H,因为前一条指令设定DPTR低8位为00H,所以此处DPTR=2000H
MOVX A,@DPTR;把地址2000H的数据传给A
MOV DPH,#30H;DPTR高8位为20H,因为前一条指令设定DPTR低8位为00H,所以此处DPTR=2000H

MOVX @DPTR,A;把A的数据传给地址为3000H的单元,即地址2000H的数据传给了3000H地址单元
INC DPL;DPTR低8位增1,使得传送下一个单元的数据,即2001H传给3001H,依次类推
DJNZ R2,LOOP;传送30H次,完成要求
RET本回答被提问者采纳
第2个回答  2011-06-25
MOV R2,#30H (将立即数30H送R2寄存)
MOV DPL,#00H(将00H送DPL寄存(低位))
LOOP:MOV DPH,#20H(将20H送DPH寄存(高位))
MOVX A,@DPTR (将表DPTR首地址送累加器A)
MOV DPH,#30H(将30H送DPH)
MOVX @DPTR,A(将A寄存的内容送表DPTR首地址单元)
INC DPL(DPL加一)
DJNZ R2,LOOP(若R2!=0转LOOP循环)
RET
相似回答