
TEMP1 EQU 30H
TEMP2 EQU 31H
RAM_STA EQU 50H
RAM_END EQU 70HORG 0000HAJMP MAINORG 0030HMAIN: ACALL MAX_SORT SJMP $
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中就始终是最大的),得到最大的,再找第二大的一直判断下去,最后就实现了你要的效果了!提示:一定要用心去读、去理解这段程序!加油!
ORG
0000H
MOV
40H,
#8AH
MOV
41H,
#3BH
MOV
42H,
#0B9H
CALL
SORT6
;调用排序子程序
NOP
NOP
SJMP
$
;-------------------------------------
SORT6:
;排序子程序
MOV
R6,
#2
;数据量减一
S1:
MOV
B,
R6
MOV
R7,
B
MOV
R0,
#40H
;起始地址
S2:
MOV
B,
@R0
INC
R0
MOV
A,
@R0
CJNE
A,
B,
S3
S3:
JC
N_JH
MOV
@R0,
B
DEC
R0
MOV
@R0,
A
INC
R0
N_JH:
DJNZ
R7,
S2
DJNZ
R6,
S1
RET
;-------------------------------------
END
程序可对任意多内存数据进行从大到小排序,这里是将40h-42h的数据进行从大到小排序
程序复制自网络,略作修改
以上就是关于单片机 试编程将内部RAM50H~70中的数据由大到小进行原地排列全部的内容,包括:单片机 试编程将内部RAM50H~70中的数据由大到小进行原地排列、单片机 三个数比较大小并从大到小排序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)