单片机 试编程将内部RAM50H~70中的数据由大到小进行原地排列

单片机 试编程将内部RAM50H~70中的数据由大到小进行原地排列,第1张

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中就始终是最大的),得到最大的,再找第二大的一直判断下去,最后就实现了你要的效果了!提示:一定要用心去读、去理解这段程序!加油!

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中的数据由大到小进行原地排列、单片机 三个数比较大小并从大到小排序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9317818.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存