交通C133班08组第3次实验报告

上传人:20****03 文档编号:152612236 上传时间:2020-11-24 格式:DOC 页数:10 大小:173.50KB
返回 下载 相关 举报
交通C133班08组第3次实验报告_第1页
第1页 / 共10页
交通C133班08组第3次实验报告_第2页
第2页 / 共10页
交通C133班08组第3次实验报告_第3页
第3页 / 共10页
交通C133班08组第3次实验报告_第4页
第4页 / 共10页
交通C133班08组第3次实验报告_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《交通C133班08组第3次实验报告》由会员分享,可在线阅读,更多相关《交通C133班08组第3次实验报告(10页珍藏版)》请在金锄头文库上搜索。

1、实验三实验三分支程序和循环程序设计分支程序和循环程序设计 班级:交通 C133组号:08学号:姓名:刘强同组人:刘一帆() 1.实验目的实验目的 掌握分支结构程序设计的方法;学会用条件转移指令来编写二分支、三分支和多分支 程序。掌握 KEIL 与 PROTEUS 联机调试的方法。掌握单片机试验仪的使用方法。掌握循 环结构程序设计的方法以及单循环及多重循环控制过程。掌握循环程序退出的方法和循环 控制的方法。 2.实验设备实验设备 PC 机一台,DP-51PROC 单片机综合仿真实验仪器一台或 DICE-598H+增强型单片机 开发实验仪器一台 3.实验内容实验内容 (1) 三分支程序。用汇编语言

2、实现 c 语言中的 sign(VB 中叫 SGN)函数 y=sign(x), 当 x 取值为正、负、零时,函数返回值分别为 1,-1,0。 (2) 多分支程序(用转移指令表的实现散转)。根据 R2 的取值不同,分别转向不同的 分支执行。R2 取值有效范围为 8-15。 (3)编写汇编语言程序,计算 16 个无符号数的均值。要求:无符号数放在内部 RAM30H3FH 中,结果存入 R4。 (4)对外部 RAM 3600H3609H 中的 10 个无符号数按照降序排序。 4.实验参考程序实验参考程序 1.三分支结构程序实现: ; 根据 R0 中的值(正、负、零),设置 R1 ; 需要执行三次,在

3、R0 中分别置入正数、负数和零 ORG 0000H MOVA,R0 JZZERO CJNE R0,#80H,MP1 SJMPMP2 ZERO: MOV R1,#00H LJMP MP3 MP1: JNC MP2 MOV R1,#01H LJMP MP3 MP2: MOV R1,#0FFH MP3: SJMP $ END 2.多分支结构程序实现: ORG 0000H ;需要事先给 R2 赋值(范围:8-15),然后再去跟踪程序执行到了哪个分支,不 同的分支会将不同的单元(30H-37H)中的数值加 1 ;这个程序用的是 LJMP 跳转表,完成后可以按实验书中的程序,建立一个 AJMP 跳转表,并

4、实现多分支 MOV DPTR,#TM ;将 DPTR 指向跳转表头 MOV A,R2 CJNE A,#8,$+3 ;注:$+3 就是转到下条指令!; =8 JC ERR CJNE A,#16,$+3 ; 注意一下是如何判断数值要界于8,16)之间的。 ;16 JNC ERR CLR C SUBB A,#8 MOV B,#3 MUL AB ; 因为 LJMP 是三字节指令,所以要乘 3 JMP A+DPTR TM: LJMP PCM8 LJMP PCM9 LJMP PCMA LJMP PCMB LJMP PCMC LJMP PCMD LJMP PCME LJMP PCMF ERR: LJMP P

5、ERR PCM8: INC 30H LJMP TEND PCM9: INC 31H LJMP TEND PCMA: INC 32H LJMP TEND PCMB: INC 33H LJMP TEND PCMC: INC 34H LJMP TEND PCMD: INC 35H LJMP TEND PCME: INC 36H LJMP TEND PCMF: INC 37H LJMP TEND PERR: TEND: SJMP $ END 3、16 个无符号数的均值 Org 0h Start:mov R0,#30H mov R7,#10H clr A mov R6,A mov R5,A clr C

6、Loop: MOV a,r5 addc A,R0 mov R5,A clr A addc A,R6 mov R6,A inc R0 djnz R7,Loop mov A,R5 anl A,#0F0H swap A mov R4,A mov A,R6 anl A,#0FH swap A orl A,R4 mov R4,A sjmp $ END 4、3600H3609H 中的 10 个无符号数按照降序排序 ;分析程序,看一下数据应该放入内存中的什么地方,共 10 个数。程序完成后 记录原始数据和排序后的结果。 ;程序单步执行比较麻烦,可以试一下执行到断点的功能,可在最外层循环结尾 处设置断点 SF

7、lagBIT7FH ORG 0000H MOV PSW,#00H ; 确保使用第一组工作寄存器,即:R3 = 03H MOV P2,#36H ; 指定外部地址的高 8 位,即数据存放于 XDATA 区 3600H 开始的地方 MOV R2,#10-1 ; 共 10 个数,循环 9 次 LOOP0: MOV R0,#0 MOV R1,#1 MOV 03H,R2 ; R3 = R2 CLR SFlag ; 排好序标志清 0,假设没有交换 LOOP1: MOVX A,R0 MOV 30H,A MOVX A,R1 CJNE A,30H,LOOP2 SJMP L1; 相等,不用交换 LOOP2: JC

8、L1;JNC 小到大,JC 大到小 MOVX R0,A ;顺序不对,交换 XCH A,30H MOVX R1,A SETB SFlag;有交换,说明还没排好序,标志置 1 L1: INC R0 INC R1 DJNZ R3,LOOP1 JNB 7FH,SORTOK; 排好序标志为 0 说明本轮没有发生交换, 完成 DJNZ R2,LOOP0 SORTOK: SJMP $ END 实验过程及结果分析实验过程及结果分析 安装好 KEIL 软件后,新建工程,设备选取 8051CPU,新建一文件,另存成 ASM 类 型,并将文件加入到工程的源代码组中。对源程序和内存窗口的字体进行适当设置,适合 机器配

9、置和个人习惯后: 输入实验用的程序,进行编译,无错。 创建目标,成功! 1、在寄存器分别输入正数与负数和零,观察输出结果 2、给 r2 赋值 8-f 数与之外的数观察 30 H-37H 结果 输入 5 时,结果为 1 输入 0 时,结果为 0 输入时-5,结果为-1 3、在 30H-3FH 输入 16 个数字,运行程序观察 r4 数值 给 r2 输入 a 时,跳转指 向 32H 给 r2 输入 f 时,跳转指 向 38H 给 r2 输入 ad 时,没有 跳转指向任何地址 4、在外存 x:3600H 处输入 10 个任意数字降序排序循环内观察一组数的变换 运行到结束 加入语句 MOV A,R5,

10、在 30H-3FH 输 入数值在 R4 输出结果 进行一次内循环 R0,R1 指向数 进行排序并交换 思考题思考题 1 如何把上面的三分支程序转变为子程序的形式? ORG 0000H MOVA,R0 JZZERO acall sfz LJMP MP3 ZERO: MOV R1,#00H MP3: SJMP $ sfz: CJNE R0,#80H,MP1 SJMPMP2 MP1: JNC MP2 MOV R1,#01H ret MP2: MOV R1,#0FFH ret END 2 上面的多分支程序中,如果转移指令表使用 AJMP 指令,程序应该如何修改,试 实现之。 将 LJMP 改为 AJM

11、P,将 MOV B,#3 改为 MOV B,#2 (3)在实验 5 的排序程序中,如果是带符号数排序,怎样修改程序?修改程序并通过实验 验证。 (80-FF 为负数 ,也可以直接输入负数,会自动变成补码表示,用命令行赋值的时 候使用类似这样的命令:“E Char X:3600H=1,2,3,4,-5,-6,7,-8,9,10” ) SFlag BIT 7FH ORG 0000H mov PSW,#00H 通过内循环好外循环,所有程序 进行交换,降序排序 mov p2,#36h mov R2,#10-1 Loop0: mov R0,#0 mov R1,#1 mov 03H,R2 clr SFla

12、g MAIN: MOV 30H,R0 MOV 31H,R1 MOV A,30H CJNE A,31H,CMPT SJMP L0 ;两个数相同,不用交换 CMPT: JB ACC.7,CMPT1;(R1)0,判断(R1)正负 JNB ACC.7,CMPT2 ;(R0)0,(R1)0,跳到 CMPT2 MOV R1,30H ;(R0)0,(R1)(R1),则交换 MOV R0,A SJMP L0 CMPT1: MOV A,31H JB ACC.7,CMPT1_1 ;(R1)0,则跳到 CMPT1_1 SJMP L0 ;(R0)0,则(R0)(R1),不用交换 CMPT1_1: CPL A ;(R0)0,(R1)(R1),故交换. SJMP L0 ;C=0,即 R0 中数值位大于 R1 的数值位,所以(R0)(R1)时跳 SJMP L0 ;C=0 时,即(R0)(R1)时不用交换 EXCHANGE2:MOV A,30H MOV R0,31H MOV R1,A SJMP L0 L0:setb SFlag;有数据交换,置位标志 L1:INC R0 INC R1 DJNZ R3,MAIN JNB SFlag,Loop3;没有数据交换,结束排序 DJNZ R2,Loop0 Loop3:SJMP $ END

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号