单片机数据传送程序 20分

来源:百度知道 编辑:UC知道 时间:2024/05/22 12:26:12
把源RAM区首地址为X,字节数为N的数据,传送到目的首地址为Y的RAM区,其中X放在R2,R3中,N放在R6,R7中,Y放在R4,R5中
流程图:(开始)——(源地址内容送A)——((A)送目的地址)——(源地址加1)——(目的地址加1)——(字节数到吗?)返回到开始 ——(结束)

在R2,R3中输入源首址(例如1000H),R4,R5输入目的地址(例如2000H),R6.R7中输入字节数(例如FFH),在1000H-10FFH中放入内容为00的数,调试,运行程序,检查1000H-10FFH中的内容是否和2000H-20FFH中的内容完全一致

最终调试结果,前面几次都有BUG,这个好了。。。哎。。调试比写好花时间
orihi equ 10H ;源高8位地址
ORILO EQU 00H ;源8低位地址
TARHI EQU 20H ;目的高8位地址
TARLO EQU 00H ;目的低8位地址
CONHI EQU 01H ;字节数高8位
CONLO EQU 0FFH ;字节数地8位
ORG 0000H
LJMP MAIN
MAIN:
setb rs0
setb rs1
MOV R2, #ORIHI
MOV R3, #ORILO
MOV R4, #TARHI
MOV R5, #TARLO
MOV R6, #CONHI
MOV R7, #CONLO

MOV DPH, R2;将源的高位地址放入DPTR高位
MOV DPL, R3;将源的低位地址放入DPTR低位
inc auxr1;转换成目的指针
MOV DPH,R4;将目的的高位地址放入DPTR高位
MOV DPL,R5;将目的的低位地址放入DPTR低位
inc auxr1;转换回源指针
LOOP:

MOVx A,@DPTR;将源地址里的数据放入A
INC DPTR ;源自加1

INC AUXR1 ;转换DPTR,使用双DPTR

MOVx @DPTR,A;将A内的数放入目的地址内,即将源放入目的
INC DPTR;目的加1
INC AUXR1;转换回源专用DPTR
DJNZ R7,LOOP;循环
DJNZ R6,LOOP;r6赋值时应赋比原来大1的数,当R6=1时,djnz不跳转
SJMP $

楼上的写的不错,注释也挺多的,多努力学习吧,这种程序是非常简单的!