
ORG 0000H
;------------------------下面先准备6个数字
MOV 40H, #8AH
MOV 41H, #3BH
MOV 42H, #0B9H
MOV 43H, #47H
MOV 44H, #29H
MOV 45H, #0AFH
CALL SORT6 ;调用排序子程序
SJMP $ ;停止,此时可以观察排序结果
;-------------------------------------
SORT6: ;排序子程序
MOV R6, #5 ;6个数字,比较5次
S1:
MOV R0, #40H ;起始地址
MOV B, R6
MOV R7, B
CLR PSW5 ;交换标志清零
S2:
MOV B, @R0 ;取出前一个数
INC R0
MOV A, @R0 ;取出后一个数
CJNE A, B, S3 ;后-前
S3:
JNC N_JH ;够减就不用交换
MOV @R0, B ;交换存放
DEC R0
MOV @R0, A
INC R0
SETB PSW5 ;设立交换标志位
N_JH:
DJNZ R7, S2
JNB PSW5, S_END ;没有交换过,就结束
DJNZ R6, S1
S_END:
RET
;-------------------------------------
END
:
mov A, X
cjne A, #7, QQQ ;A 试减7
QQQ: jnc DY6 ;无借位(即大于6)转移
cjne A, #2, AAA ;A 试减2
AAA: jc XY2 ;有借位(即小于2)转移
add A, X
add A, X ;A=3X
clr C
subb A, #5
mov Y, A ;Y = 3X - 5
sjmp _END
DY6:
mov B, X
mul AB ;乘
mov Y, A ;Y = XX
sjmp _END
XC2:
add A, X ;2X
add A, #1
mov Y, A ;Y = 2X+1
_END: sjmp $
对于MCS—51单片机,由于定义了6个特殊用途的单元0000H ~ 002AH,若主程序从0000H单元开始,则必须在0003H单元之前存放一条无条件转移指令(LJMP),以便直接转去执行指定的程序。所以一般主程序应从002AH后的某个单元开始存放。再考虑到串行口中断服务程序入口地址0023H ~ 002AH只有8个单元,难以存下一个完整的中断服务程序,因此可以考虑将主程序从0050H之后的某个单元开始。主要在于个人习惯或者程序要求而定。希望满意~
当EA/VPP引脚接地(低电平)时,只执行片外ROM程序。当EA/VPP引脚接VCC(高电平)时,如果自带EEPROM则从片内ROM0000H开始执行,直到片内存储区用完接着在片外存储区执行程序。
将以 R2、R3 为首地址的源 RAM 区的 R6、R7 字节的数据
传送到以 R4、R5 为首地址的目的 RAM 区。
设定 R2、R3 所存储的源 RAM 首地址为 2000H(即 R2、R3 分别为 20H、00H),
R4、R5 所存储的目的 RAM 首地址为 4000H(即 R4、R5 分别为 40H、00H),
R6、R7 所存储 的字节数为 1FFFH(即 R6、R7 分别为 1FH、0FFH)。
---------------------
MOV R2,#20H
MOV R3,#00H
MOV R4,#40H
MOV R5,#00H
MOV R6,#1FH
MOV R7,#0FFH
LOOP:
MOV DPH,R2
MOV DPL,R3
MOVX A,@DPTR
INC DPTR
MOV R2,DPH
MOV R3,DPL
MOV DPH,R4
MOV DPL,R5
MOVX @DPTR,A
INC DPTR
MOV R4,DPH
MOV R5,DPL
DJNZ R7,LOOP
DJNZ R6,LOOP
SJMP $
END
以上就是关于求MCS51单片机冒泡法排序程序!高手进!全部的内容,包括:求MCS51单片机冒泡法排序程序!高手进!、MCS-51单片机,简单的一个汇编语言程序,计算分段函数的函数值。、MCS-51单片机的主程序应该从哪个单元开始存放,为什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)