51单片机编程题。

把片外数据存储器0100H开始的20个单元中的数据,按从大到小的顺序放在片内数据存储器0030H开始的20个单元中。
求完整程序啊

ORG 0000H
MOV DPTR, #0100H
MOV R0, #30H
LOOP:MOVX A, @DPTR
MOV @R0, A
INC R0
INC DPTR
DJNZ R7,LOOP
MOV 44H, #29H
MOV 45H, #0AFH
CALL SORT ;调用排序子程序
SJMP $
;-------------------------------------
SORT: ;排序子程序
MOV R6, #19 ;20个数字,比较19次
S1:
MOV R0, #30H ;起始地址
MOV B, R6
MOV R7, B
CLR PSW.5 ;交换标志清零
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
SETB PSW.5 ;设立交换标志位
N_JH:
DJNZ R7, S2
JNB PSW.5, S_END ;没有交换过,就结束
DJNZ R6, S1
S_END:
RET
;-------------------------------------
END
本程序未试验。部分程序参考自:做而论道的空间。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-06
汇编啊,有难度,只会C语言。
相似回答