单片机实验数据排序

单片机实验数据排序,第1张

原发布者:瀚海湛蓝

实验一、数据排序实验一、实验目的熟悉8031指令系统,掌握程序设计方法。二、实验内容编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。三、实验程序框图NNN四、实验步骤1把8032片内RAM区50H—5AH中放入不等的数据(用寄存器读写方法)。2用连续运行方式从起始地址0100H开始运行程序(输入0100后按EXEC键)。3排序结束,显示“P.”。4用寄存器读写方法检查50—5AH中内容应从小到大排列。五、参考程序DORDE:MOVSP,#60H设置栈指针MOVR3,#50HDORDE1:MOVA,R3MOVR0,A数据指针传送到R0MOVR7,#0AH长度送到R7CLR00H清零标志位MOVA,@R0DORDE2:INCR0MOVR2,ACLRC清零进位标志MOV22H,@R0CJNEA,22H,DORDE3是否相等SETBCDORDE3:MOVA,R2JCDORDE4小于或等于不交换SETB00HXCHA,@R0DECR0XCHA,@R0大于交换位置INCR0DORDE4:MOVA,@R0DJNZR7,DORDE2JB00H,DORDE1未完继续MOVR0,#7EH完,关显示器前三位MOVA,#0FFHMOVR4,#06HDORDE5:MOV@RO,ADECR0DJNZR4,DORDE5MOV7EH,#0CH

单片机实验,其实这就是典型的流水灯电路,P1口接8个流水灯,每个灯点亮1秒。用定时器T1定时50ms,中断20次就为1秒,可用_crol_()移位函数实现。仿真效果如下图所示。

:

ORG 0030H

MOV 30H, #34H

MOV 31H, #56H

MOV 32H, #23H

MOV 33H, #90H

MOV 34H, #32H

MOV 35H, #68H

MOV 36H, #09H

MOV 37H, #75H

CALL SORT

SJMP $

-----------------------------------------------------

SORT: 最简短、高效的排序程序.

MOV B, #7 第一轮排序时,比较7次.

S1: MOV R0, #30H数据区的起始地址.

MOV R7, B

CLR PSW.5 清除"交换"标志位.

S2: MOV A, @R0 取前一个数.

INC R0

CLR C

SUBB A, @R0 减后一个数,前<后时,Cy=1

S3: JCS4 有借位时,不用交换,转移.

MOV A, @R0 取后一个数,准备交换.

DEC R0

XCH A, @R0 交换到前一个.

INC R0

XCH A, @R0 交换到后一个.

SETB PSW.5 设定"交换"标志位.

S4: DJNZ R7, S2 继续本轮比较.

JNB PSW.5, ENDS 如本轮没有进行过交换,可提前结束.

DJNZ B, S1 下一轮,比较次数少一次.

ENDS:

RET

-----------------------------------------------------

END


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

原文地址: http://outofmemory.cn/yw/11083522.html

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

发表评论

登录后才能评论

评论列表(0条)

保存