微机原理及应用实验报告
班级: 姓名: 学号:
中南大学
机电工程学院 精密测控实验室
-/
实验二 软件程序设计
1.实验目的:
1、掌握MCS-51单片机指令系统及用汇编语言编程技巧; 2、了解和熟悉用MCS-51单片机仿真开发机调试程序的方法。
2.实验内容:
1、编写排序程序并上机调试通过。
已知8031内部RAM60H~69H单元中,依次存放了FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。
2.、编写多字节加法程序并上机调试通过。 8031内部RAM20H~22H单元中,存放了3字节被加数(低字节在前),在2AH~2CH
单元中存放3字节加数(低字节在前),求两数之和,并将结果存入以20H为起始地址的区域中(低字节在前)。
3.实验设备名称、型号:
台式微型计算机 MCS-51仿真开发机
4.画出软件程序流程图,写出上机调试通过的汇编语言程序清单:
THKSCM-2A
程序1、 编写排序程序并上机调试通过。
已知8031内部RAM60H~69H单元中,依次存放了
FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。
解:本设计采用冒泡排序法,使用双重循环,并在内循环中进行比较如果合乎从大到小
的顺序则不动,否则两两交换,这样比较下去,比较9次后,最小的那个数就会沉底,在下一次比较时将减少一次比较次数。如果一次比较完毕,没有发生交换,说明已经按照从大到小的顺序排列了。则可以退出循环,结束程序。
程序结构框图和程序代码如下:
-/
-/
ORG 1000H TEM DATA 50H MOV R7 , #9 MOV 60H , #0FFH MOV 61H , #99H MOV 62H , #77H MOV 63H , #0CCH MOV 64H , #33H MOV 65H , #0DDH MOV 66H , #88H MOV 67H , #0BBH MOV 68H , #44H MOV 69H , #0EEH LOOP0: CLR F0 MOV A , R7 MOV R6, A MOV R0 , #60H MOV R1, #60H INC R1
LOOP1: MOV A , @R0 MOV TEM , A MOV A , @R1
CJNE A ,TEM , NEXT SJMP NOCHA NEXT: JC NOCHA SETB F0 MOV @R0 , A XCH A , TEM MOV @R1 , A NOCHA:INC R0 INC R1
DJNZ R6, LOOP1 JNB F0, HAL DJNZ R7, LOOP0 HAL: SJMP $ END
程序2:编写多字节加法程序并上机调试通过。
8031内部RAM20H~22H单元中,存放了3字节被加数(低字节在前),在2AH~2CH单元中存放3字节加数(低字节在前),求两数之和,并将结果存入以20H为起始地址的区域中(低字节在前)。
-/
解:改程序由三个字节数相加,其结果不会超过4个字节,可以采用循环求和的办法,
吧加数和被加数依次从低位带进位相加,当然加最低位时必须先对进位位清零。可以采用线性结构,也可以采用循环结构。我在设计该程序采用单重循环,结构简单,特别是当相加的数较长时,优势更加明显。
程序结构框图和源代码如下:
ORG 1000H
MOV 20H,#××H MOV 21H,#××H MOV 22H,#××H MOV 2AH,#××H MOV 2BH,#××H
相关推荐: