此篇文章中涉及的新指令如下:
数量 助记符 说明 字节数 执行时间 指令代码
31,CLR A 累加器A清零 1 1 E4H
32,MOV A,#data 将立即数data送累加器A 2 1 74H,data
33,INC DPTR 数据指针增1 1 2 A3H
34,DJNZ Rn,rel 寄存器中的内容减1,不为零转移 2 2 D8H-DFH,rel
35,MOV direct,@Ri 寄存器内为内部RAM地址,将该地址中的内容送至direct中 2 2 86H-87H,direct
36,DEC Rn 寄存器中的内容减1 1 1 18H-1FH
37,MOV @Ri,direct 寄存器内为内部RAM地址,将direct中的内容送至该地址中 2 2 A6H-A7H,direct
38,MOVX A,@DPTR 将DPTR寄存器所指外部RAM地址单元内的数据送到累加器A中 1 2 E0H
39,MOVX @DPTR,A 将累加器A中的内容送至DPTR寄存器所指外部RAM地址单元内 1 2 F0H
40,MOVX @Ri,A 将累加器A中的内容送至Ri寄存器所指外部RAM地址单元内 1 2 F2H-F3H
41,MOVX A,@Ri 将Ri寄存器所指外部RAM地址单元内的数据送到累加器A中 1 2 E2H-E3H
42,DJNZ direct,rel direct中的内容减1,不为零转移 3 2 D5H,direct,rel
题7:数据的拷贝或移动
题7.1 外部RAM数据传送到外部RAM
将存于外部 RAM 4000H 开始的 50H个数据传送外部RAM 0000H开始 的区域,请编程实现。
解析:对于外部RAM数据传外部RAM这类题型,注意传送地址是否超过8位位宽,如果超过请使用MOVX @DPTR,A指令替代MOVX @R0,A 。例如:扩展题7.1
程序源码:
ORG 0000H
MOV DPTR,#4000H
MOV R2,#50H
MOV R0,#00H
MOV A,#00H
LOOP:
MOVX A,@DPTR
MOVX @R0,A ;-----1
INC R0 ;-----2
INC DPTR
DJNZ R2,LOOP
SJMP $
END
扩展题7.1
将存于外部 RAM 4000H 开始的 50H个数据传送外部RAM 0200H 开始的区域,请编程实现。
程序源码:
ORG 0000H
MOV R2,#50H
MOV R0,#40H
MOV R1,#42H
MOV 40H,#00H
MOV 41H,#40H
MOV 42H,#00H
MOV 43H,#02H
CLR A
LOOP:
MOV DPL,@R0
INC R0
MOV DPH,@R0
MOVX A,@DPTR
INC DPTR
DEC R0
MOV @R0,DPL
INC R0
MOV @R0,DPH
MOV DPL,@R1
INC R1
MOV DPH,@R1
MOVX @DPTR,A
INC DPTR
DEC R1
MOV @R1,DPL
INC R1
MOV @R1,DPH
DEC R0
DEC R1
DJNZ R2,LOOP
SJMP $
END
题7.2 外部RAM数据传送到内部RAM
将存于外部 RAM 4000H 开始的 50H个数据传送内部RAM 60H 开始的区域,请编程实现。
解析:注意细节,原理遇上题差不多
程序源码:
;将存于外部 RAM 4000H 开始的 50H个数据传送内部RAM 60H 的区域,请编程实现。
ORG 0000H
MOV R2,#50H
MOV R0,#60H
MOV DPTR,#4000H
CLR A
LOOP:
MOVX A,@DPTR
INC DPTR
MOV @R0,A
INC R0
DJNZ R2,LOOP
SJMP $
END
题7.3 内部RAM数据传送到内部RAM
将存于内部 RAM 40H 开始的 10H个数据传送内部RAM 60H 开始的区域,请编程实现。
解析:注意数据存放原始地址和数据存放目的地址是否重叠,如果重叠需要预先保护,例子:见扩展7.2
程序源码:
ORG 0000H
MOV R2,#10H
MOV R0,#60H
MOV R1,#40H
CLR A
LOOP:
MOV A,@R0
INC R0
MOVX @R1,A
INC R1
DJNZ R2,LOOP
SJMP $
END
扩展7.2
将存于内部 RAM 40H 开始的 10个数据传送内部RAM 45H 开始的区域,请编程实现。
解析:数据原始地址和目的地址有重叠,需要提前保护
程序源码:
ORG 0000H
CLR A
CLR RS0
CLR RS1
MOV R2,#5
MOV R0,#40H
MOV R1,#45H
CLR RS0
SETB RS1
MOV R2,#5
MOV R0,#70H
MOV R1,#4AH
AJMP SAVE
START:
CLR RS0
CLR RS1
LOOP1:
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP1
CLR RS0
SETB RS1
LOOP2:
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP2
SJMP $
ORG 0060H
SAVE:
SETB RS0
CLR RS1
MOV 36H,#05H
MOV R0,#45H
MOV R1,#70H
LOOP3:
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ 36H,LOOP3
AJMP START
END
题7.4 内部RAM数据传送到外部RAM
将存于内部 RAM 60H 开始的 50H个数据传送外部RAM 4000H 开始的区域,请编程实现。
程序源码:
;将存于内部RAM 60H 开始的 50H个数据传送外部 RAM 4000H的区域,请编程实现。
ORG 0000H
MOV R2,#50H
MOV R0,#60H
MOV DPTR,#4000H
CLR A
LOOP:
MOV A,@R0
INC R0
MOVX @DPTR,A
INC DPTR
DJNZ R2,LOOP
SJMP $
END