分支程序设计实验

上传人:mg****85 文档编号:34198037 上传时间:2018-02-21 格式:DOC 页数:14 大小:692KB
返回 下载 相关 举报
分支程序设计实验_第1页
第1页 / 共14页
分支程序设计实验_第2页
第2页 / 共14页
分支程序设计实验_第3页
第3页 / 共14页
分支程序设计实验_第4页
第4页 / 共14页
分支程序设计实验_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《分支程序设计实验》由会员分享,可在线阅读,更多相关《分支程序设计实验(14页珍藏版)》请在金锄头文库上搜索。

1、微机实验报告实验名称 分支程序设计实验 专业班级 xxxxx 姓名 xxxxx 学号 xxxxxx联系方式 xxxxxxxxxxxxxxxxxxxxxxx 一、 任务要求1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序。X2 当 X40Y= X/2 当 20X40 /X 当X20 2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。 P3.0为低电平时开始计时,为高电平时停止计时。提高部分(选做):a. 实现4位十进制加、减1计数,千位、百位由P1口输

2、出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。b. 利用 P3 口低四位状态控制开始和停止计数,控制方式自定。二、 设计思路任务 1:机器内存入的数默认为无符号数,所以应该先判断正负性。如果是负数则直接归到取反区间;如果是正数,则与20,40 进行大小比较,即和 20,40 分别做减法,然后根据比较结果归到各个区间。任务 2:先将 R0R2 和 P0P2 清零,开始先判断控制位 P3.0是否为 0,当 P3.0=1 时原地踏步重复判断,当 P3.0=0 时开始计时。计时开始,进行秒钟 R0 计数,每次计数完成用 BCD 码子程序转换,然后判断计数后 R0 值是否到 60,若

3、R0 的值不足60,就直接输出给 P2,若 R0 的值为 60,就把 R0 和 P2 进行清零后,开始分钟计数部分。同理,每次分钟计数完之后用 BCD码子程序转换,然后判断计数后 R1 的值是否为 60,若不为60,就直接输出给 P1,若 R1 的值为 60,就把 R1 和 P1 清零后开始时钟计数部分。时钟计数完后同样用 BCD 码子程序转换,然后判断计数后的 R2 的值是否为 24,若不为 24,就直接输出给 P0,若 R2 为 24,就吧 R2 和 P0 清零后直接跳出计数部分,从判断 P3.0 部分再开始.每两次计数输出之间穿插一个 1s 的延时程序。就可以达到时钟的功能。三、 资源分

4、配1.分支程序:数据指针 DPTR:对片外 RAM 进行读写操作2000H:存放 8bits 符号数 X2010H:存放结果 Y(取反后的数,或者平方后 的高 8 位,或者除法后的商)2011H:存放结果 Y(平方后的低 8 位,或者除 法后的余数)2.时钟程序:R0、R1、R2:分别进行秒钟,分钟,时钟的计数P2、P1、P0:分别输出秒钟,分钟,时钟P3.0:是否计数的控制位R3、R4、R5:为 1s 延时程序指定循环次数B:BCD 码转换子程序的操作数四、 流程图1, 分支程序设计2, 时钟程序五、 源代码 (含文件头说明、资源使用说明、语句行注释)任务一:File name : firs

5、t.asmDescription : 多向分支程序设计Date : 2013.10.15Designed by : 陈欣雨ORG 0000HLJMP MAINORG 0100HMAIN: MOV DPTR,#2000HMOV A,#10MOVX DPTR,A ;存数MOV B,0 ;寄存器 B 清零MOVX A,DPTR ;从 R0 中取出数 xJNB ACC.7,COMP1 ;判断符号位,符号位为 0 时转到 COMP1LP3: CPL A ;对 x 取反SJMP STORECOMP1: CJNE A,#20,COMP2 ;A20 时,转到 COMP2SJMP LP3 ;A=20 时,转到

6、LP3 取反COMP2: JC LP3 ;C=1,A20.当 A40 时,转到 COMP3LP1: MOV B,A ;A=40 时,给 B 赋值为 AMUL AB ;计算 x 平方SJMP STORECOMP3: JNC LP1 ;C=0,A40,转到 LP1 计算 x 平方MOV B,#02H ;C=1,A40,赋值 B=2DIV AB ;计算 x 除以 2STORE: MOV DPTR,#2010HMOVX DPTR,A ;存数:INC DPTR ;对于平方,高位在前地位在后MOV A,B ;对于除法,商在前余数在后MOVX DPTR,ASJMP $END任务二:ORG 0000H SJM

7、P START ORG 0030HSTART: MOV SP,#40HMOV P1,#0MOV R3,#0 ;设定 R3 初值为 0,用 R3 保存分钟数MOV R4,#0 ;设定 R4 初值为 0,用 R4 保存小时数MOV R0,#60 ;设定内循环次数为 60MOV R1,#60 ;设定中循环次数为 60MOV R2,#24 ;设定外循环次数为 24CLR ANEXT: JNB P3.0,DONE ;如果 P3.0 等于 0,则结束计数ADD A,#1 ;BCD 码加 1 计数DA A ;对 A 进行修正MOV P2,A ;显示计数DJNZ R0,NEXT ;R0-R0-1,R0 不等于

8、零,跳到 NEXT 继续循环MOV A,R3 ;将分钟数赋给 AADD A,#1 ;分钟数加 1DA AMOV R3,A ;分钟数用 R3 保存MOV P1,A ;显示计数CLR AMOV R0,#60 ;重置内循环次数为 60DJNZ R1,NEXT ;R1 减一,若 R1 不为 0,跳到最内层循环入口处继续循环MOV R3,#0 ;分钟数满六十,小时开始计数,同时将分钟数 R3 清零MOV A,R4 ;将小时数赋给 AADD A,#1 ;小时数加一DA AMOV R4,A ;用 R4 保存小时数MOV P0,AMOV R0,#60 ;重置内循环数为六十MOV R1,#60 ;重置次循环数为

9、六十DJNZ R2,NEXT ;R2 减一,若 R2 不为 0,跳到最内层循环入口处继续循环DONE: SJMP $END程序测试方法与结果、软件性能分析实验一:(1) 取 X=5,则最后结果应为 FA。编译结果如下图:(2) 取 X=36,则最后结果应为 12。编译结果如下图:(3) 取 X=60,则最后结果应为 3600,即(2010H)=10H,(2011H)=0EH。编译结果如下图:实验二:(1) P3.0 设为低电平,开始计时,达 60 秒时,分从 0 变为 1分增加1,秒清零P3.0置1则计数停止六、 心得与体会做分支程序的设计一定需要一个清醒的头脑,必须在开始写程序之前想好在什么

10、地方进行跳转,什么时候跳转回来等等。在做第二个实验时,则需要很清楚循环的次数以及数据的存储,不能混淆。总而言之,在写完这两个程序之后,我觉得,写复杂一点的程序必须有足够的经验,这也就要求我们多锻炼,多写程序,才能够有一个清晰的思路,不至于在编写过程中陷入混乱。七、 思考题1实现多分支结构程序的主要方法有哪些?举例说明。答:当分支比较少的时候,可以直接采用条件转移指令,例如:JB P3.7,SUBJS;P3.7 为 1 时,跳到 SUBJS 进行减 1 计数;P3.7为 0 时,进行 ADDJS 加 1 计数ADDJS: MOV A,P2 SUBJS: CLR C 当分支比较多的时候,可以采用分

11、支表法,常用的分支表法有三种:分支地址表,转移指令表,分支偏移量表。分支地址表法:MOV DPTR,#BRATAB ;取表首地址MOV A,R3ADD A,R3 ;AR3*2JNC NADDINC DPH ;R3*2 的进位加到 DPHNADD: MOV R4,A ;暂存 AMOVC A,A+DPTR ;取分支地址高 8 位XCH A,R4INC AMOVC A,A+DPTR ;取分支地址低 8 位MOV DPL,A ;分支地址低 8 位送 DPLMOV DPH,R4 ;分支地址高 8 位送 DPHCLR AJMP A+DPTR ;转相应分支程序BRATAB: DW SUBR0 ;分支地址表D

12、W SUBR1 DW SUBR7转移指令表法:MOV DPTR,#JMPTAB ;取表首地址MOV A,R3ADD A,R3 ;AR32JNC NADDINC DPH ;有进位加到 DPHNADD: JMP A+DPTR ;转相应分支程序JMPTAB: AJMP SUBR0 ;转移指令表AJMP SUBR1AJMP SUBR7 地址偏移量表法:MOV DPTR,#DIATAB ;取表首地址MOV A,R3 ;表的序号数送 AMOVC A,A+DPTR ;查表JMP A+DPTR ;转相应分支程序DISTAB: DB SUBR0-DISTAB ;地址偏移量表DB SUBR1-DISTAB DB SUBR7-DISTABSUBR0: SUBR1: 2. 在编程上,十进制加 1 计数器与十六进制加 1 计数器的区别是什么?怎样用十进制加法指令实现减 1 计数?答:十六进制加 1 计数器可以直接对计数器进行加 1 的操作,相当于单字节或者多字节的加法运算,其中被加数为当前计数器值,加数始终为 1;但是十进制加 1 计数器不能直接对计数器直接进行加 1 操作,而必须在对加 1 操作后紧跟一条DA A 指令对其进行二十进制修正才能实现。用十进制加法进行减 1 计数时,应讲计数器当前值与1 的十进制补码 99H 进行想加,然后用 DA A 指令进行二十进制修正,从而实现十进制减 1 计数功能。

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

当前位置:首页 > 生活休闲 > 科普知识

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