分支程序设计实验_第1页
分支程序设计实验_第2页
分支程序设计实验_第3页
分支程序设计实验_第4页
分支程序设计实验_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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为低电平时开始计时

2、,为高电平时停止计时。提高部分(选做):a. 实现4位十进制加、减1计数,千位、百位由p1口输出;十位、个位由p2口输出。利用p3.7状态选择加、减计数方式。b. 利用p3口低四位状态控制开始和停止计数,控制方式自定。二、 设计思路任务1:机器内存入的数默认为无符号数,所以应该先判断正负性。如果是负数则直接归到取反区间;如果是正数,则与20,40进行大小比较,即和20,40分别做减法,然后根据比较结果归到各个区间。任务2: 先将r0r2和p0p2清零,开始先判断控制位p3.0是否为0,当p3.0=1时原地踏步重复判断,当p3.0=0时开始计时。计时开始,进行秒钟r0计数,每次计数完成用bcd码

3、子程序转换,然后判断计数后r0值是否到60,若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的延时程序。就可以达到时钟的功能。三、 资源分配1.分支程序: 数据指针dpt

4、r:对片外ram进行读写操作 2000h:存放8bits符号数x 2010h:存放结果y(取反后的数,或者平方后的高8位,或者除法后的商) 2011h:存放结果y(平方后的低8位,或者除法后的余数) 2.时钟程序: r0、r1、r2:分别进行秒钟,分钟,时钟的计数 p2、p1、p0:分别输出秒钟,分钟,时钟 p3.0:是否计数的控制位 r3、r4、r5:为1s延时程序指定循环次数 b:bcd码转换子程序的操作数四、 流程图1, 分支程序设计2, 时钟程序 五、 源代码 (含文件头说明、资源使用说明、语句行注释) 任务一: file name : first.asm description :

5、多向分支程序设计 date : 2013.10.15 designed 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时,转到lp3取反comp2: jc lp3;c=1,a<20,转到l

6、p3取反cjne a,#40,comp3;c=0,a>20.当a40时,转到comp3lp1: mov b,a;a=40时,给b赋值为amul ab;计算x平方sjmp storecomp3: jnc lp1 ;c=0,a>40,转到lp1计算x平方mov b,#02h;c=1,a<40,赋值b=2div ab;计算x除以2store: mov dptr,#2010hmovx dptr,a ;存数:inc dptr ;对于平方,高位在前地位在后mov a,b ;对于除法,商在前余数在后movx dptr,asjmp $end任务二: org 0000h sjmp start

7、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不等于零,跳到next继续循环mov a,r3 ;将分钟数

8、赋给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 ;重置次循环数为六十djnz r2,next ;r2减一,若r2不为0,跳到最内层循环入口处继续循环

9、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 当分支比较多的时候,可以采用分支表法,常用的分支表法有三种:分支地址表,转移指令表,分支偏移量表。 分支地址表法: mov dptr,#bratab ;取表首地址 m

11、ov a,r3 add a,r3 ;ar3*2 jnc nadd inc dph ;r3*2的进位加到dph nadd: mov r4,a ;暂存a movc a,a+dptr ;取分支地址高8位 xch a,r4 inc a movc a,a+dptr ;取分支地址低8位 mov dpl,a ;分支地址低8位送dpl mov dph,r4 ;分支地址高8位送dph clr a jmp a+dptr ;转相应分支程序bratab: dw subr0 ;分支地址表 dw subr1 dw subr7转移指令表法: mov dptr,#jmptab ;取表首地址 mov a,r3 add a,r3

12、 ;ar3×2 jnc nadd inc dph ;有进位加到dph nadd: jmp a+dptr ;转相应分支程序jmptab: ajmp subr0 ;转移指令表 ajmp subr1 ajmp subr7 地址偏移量表法: mov dptr,#diatab ;取表首地址 mov a,r3 ;表的序号数送a movc a,a+dptr ;查表 jmp a+dptr ;转相应分支程序distab: db subr0-distab ;地址偏移量表 db subr1-distab db subr7-distabsubr0: subr1: 2. 在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?怎样用十进制加法指令实现减1计数? 答:十六进制

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论