微机原理及应用实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理及应用实验报告
班级:
姓名:
学号:
中南大学
机电工程学院精密测控实验室
实验二软件程序设计
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.实验设备名称、型号:
4.画出软件程序流程图,写出上机调试通过的汇编语言程序清单:
程序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
MOV 2CH,#××H
MOV R0 #20H
MOV R1 #2AH
MOV R7 #03H
CLR C
LOOP0: MOV A ,@R0
MOV B ,@R1
ADDC A ,B
MOV @R0 ,A
INC R0
INC R1
DJNZ R7 ,LOOP0
NEXT : JNC HAL
INC R0
MOV @R0 ,#01H
HAL: SJMP $
END
5.思考题
1、如果题目1改为递增排序,如何修改程序,为什么?
答:将NEXT中的指令中的JC 指令换为JNC指令即可
2、如果题目1改为从30H单元开始的16个单元中无符号数排序,改哪几条指令?
答:改变R7的值为15,将值赋予30H到3FH上就可以了
3、如果题目2改为从50H开始的4字节数与60H开始的四字节数相加,如何修改?
答:MOV R0 #20H 改为MOV R0 #50H
MOV R1 #2AH 改为MOV R1 #60H
MOV R7 #03H 改为MOV R7 #04H
4、写出题目2中你处理最高位进位的相应指令。
答:NEXT : JNC HAL
INC R0
MOV @R0 ,#01H
HAL: SJMP $
5、循环程序中为何常用间接寻址方式(@Ri,@DPTR)?
答:因为间接寻址可以实现程序的循环,便于编写程序。