单片机 试编程将内部RAM50H~70中的数据由大到小进行原地排列
发布网友
发布时间:2022-04-29 14:55
我来回答
共1个回答
热心网友
时间:2023-10-13 05:24
TEMP1 EQU 30H
TEMP2 EQU 31H
RAM_STA EQU 50H
RAM_END EQU 70HORG 0000HAJMP MAINORG 0030HMAIN: ACALL MAX_SORT SJMP $
MAX_SORT: ;由大到小排序子程序,
MOV R0,#RAM_STA;
MOV R1,#RAM_STA+1;
LOOP: MOV A,@R0;
MOV TEMP1,A
MOV A,@R1
MOV TEMP2,A
ACALL MAX
INC R1;
CJNE R1,#RAM_END+1,LOOP;
INC R0;
MOV A,R0
INC A;
MOV R1,A
CJNE R0,#RAM_END,LOOP;
RET MAX: PUSH PSW ; 比较@R0与@R1二者大小,大的放@R0,小的放@R1
CLR C
MOV A,TEMP1
SUBB A,TEMP2
JNC MAX_END
MOV A,TEMP2
MOV @R0,A
MOV A,TEMP1
MOV @R1,A
MAX_END:POP PSW
RET 这程序我调试过了!理解起来会比较难些,大概的排序方式为:先找出最大的放到最低RAM中(50H),这里是用最低RAM(50H)与其他RAM逐一比较,比它大的话就两者交换(这样50H中就始终是最大的),得到最大的,再找第二大的...一直判断下去,最后就实现了你要的效果了!提示:一定要用心去读、去理解这段程序!加油!