《实验二布尔运算类指令练习和数据排序实验》由会员分享,可在线阅读,更多相关《实验二布尔运算类指令练习和数据排序实验(3页珍藏版)》请在金锄头文库上搜索。
1、实验二 3.3 布尔运算类指令练习和数据排序实验系别专业:电子系12级电信2班 学号:3121003210姓名:李书杰 指导老师:刘志群老师3.3.1 实验要求1. 进一步熟悉 Keil C51软件的使用。 2. 复习布尔运算类指令及冒泡排序的思想方法。 3.3.2 实验设备PC 机一台,TD-NMC+教学实验系统 3.3.3 实验目的1. 了解布尔处理机在设计逻辑电路中的应用。 2. 学会数据冒泡排序的方法。 3. 体会 8051单片机布尔运算类指令的功能,进一步掌握汇编语言设计和调试方法。 3.3.4 实验内容实验1程序: ORG 0000HSJMP STARTORG 0030HX BIT
2、 00HY BIT 01HZ BIT 02HF BIT 03HSTART: MOV C,ZANL C,/YMOV F,CMOV C,YANL C,/ZORL C,FMOV F,CMOV C,XANL C,YORL C,/FMOV F,CSJMP $END(1)X、Y、Z和 F代表内部 RAM20H的 00H、01H、02H和 03H的位地址。按下表修改内RAM数据窗口的值,从 00H开始直到 07H(即取X、Y和 Z的每种组合),调试结果填于下表。(2)分析上述程序,并把分析(理论)结果和实验结果进行比较,二者结果应该相同。 实验 1表实验2编写并调试一个排序程序,其功能为用冒泡法将内部 RA
3、M的50H56H中几个单元字节的无符号正整数,按从小到大的次序重新排列。其实验参考流程图如图 3.3.1所示。 ORG 0000H SJMP START ORG 0030HSTART:;-下面先准备6个数字 MOV 50H, #03H MOV 51H, #01H MOV 52H, #08H MOV 53H, #02H MOV 54H, #07H MOV 55H, #04H CALL SORT6 ;调用排序子程序 SJMP $ ;停止,此时可以观察排序结果;-SORT6: ;排序子程序 MOV R6, #5 ;6个数字,比较5次S1: MOV R0, #50H ;起始地址 MOV B, R6 M
4、OV R7, B CLR PSW.5 ;交换标志清零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 PSW.5 ;设立交换标志位N_JH: DJNZ R7, S2 JNB PSW.5, S_END ;没有交换过,就结束 DJNZ R6, S1S_END: RET;-END3.3.5 思考题1. 分析实验程序1,写出 F的表达式,并画出其逻辑电路图。简单分析布尔处理器在单片机中的作用。
5、答:可用于位数据传送,位清零,位清1,位取反,为逻辑“与”指令,为逻辑“或”指令,判布尔累加器C转移,判位变量转移,判位变量并清0转移。2. 简述冒泡排序的思想。 答:第一次: 从一个数组的最后一个元素到该数组的第一个元素进行扫描,比较后一个元素与前一个元素的大小,如果后一个小于前一个,交换顺序。通过这样的交换,那么我们就可以把该数组的最小元素换位到该数组的第一个位置。第二次: 从该数组的最后一个元素到该数组的第二个元素进行扫描,比较后一个元素与前一个元素的大小,如果后一个小于前一个,交换顺序。通过这样的交换,那么我们就可以把该数组的最小元素换位到该数组的第二个位置。 依次这样的循环。 如果是有n个元素的话,那么我们就要进行n-1次的冒泡,就可以把该数组从小到大排好序。(但是这样循环的次数太多了,程序的效率比较的低)3. 在排序程序中添加排序标志位(即若发现在某轮排序中,相邻两数未进行任何交换,说明数据已经排序完毕,就无需再继续排序了,这样可以节省排序时间),程序该如何编写?