实验一、数据排序实验一、实验目的熟悉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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)