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

下载本文档

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

文档简介

1、实验二 分支程序设计实验实验报告实验名称:分支程序设计实验 专业班级 光电1106 姓名 刘轮 学号u201115096 联系方式一、任务要求:熟练掌握keilc环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行io口的使用。1. 设有8bits符号数x存于外部ram单元,按以下方式计算后的结果y也存于外部ram单元,请按要求编写程序。2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过p0、p1、p2端口输出(以压缩bcd码的形式)。p3.0为低电平时开

2、始计时,为高电平时停止计时。提高部分(选做):a. 实现4位十进制加、减1计数,千位、百位由p1口输出;十位、个位由p2口输出。利用p3.7状态选择加、减计数方式。b. 利用p3口低四位状态控制开始和停止计数,控制方式自定。二、设计思路:1.分支函数程序设计:首先将x赋给累加器a,与40比较大小,将大于或等于40的执行乘方操作;小于40的再与20做比较,大于20的执行取除法操作,小于或等于20的执行取反操作。最后将计算结果y存于片外的ram上。2.电子时钟程序设计思路:首先用循环程序的嵌套实现一个1s的延时,同时让记秒的端口p2同步加一,到60后清零;再让此循环执行60次实现1min的延时,同

3、时让p1同步加一,到60后清零;再让分钟的循环执行24次,实现1hour的延时,同时让p0同步加一。至此循环,即可实现24小时的时钟功能。(注:本计算机的晶振频率为12mhz)3.4位十进制加、减1计数程序思路:低位的个位和十位赋给一个寄存器,而将高位即百位千位赋给另外一个寄存器,通过循环程序使低位数循环100次即向高位进位或借位,高位循环100次后即回归初始状态,同时设计两个子函数分别执行加一、减一操作。其中,用p3的第7位的状态实现对计数与否的控制。三、资源分配:1.分支函数程序:a:累加器c:位操作b:做乘方的寄存器dptr:片外寻址指针2000h、2001h、2002h:片外存储空间2

4、.电子时钟程序:a:累加器c:位操作p0、p1、p2:分别电子时钟的时、分、秒输出r0、r1、r2:分别时分秒计数用存储器r3、r4、r5:完成1s延时的相关数据存储3.四位十进制加、减1计数程序:a:累加器c:位操作p0:低位输出口 p1:高位输出口 r0:高位寄存器 r1:低位寄存器 r7 r6:分别临时储存低位和高位的寄存器四、流程图:1. 分支函数程序流程图2电子时钟程序流程图3四进制加、减1计数程序流程图各图形如下:开始取数比较x与40的大小 大于或等于40比较x与20的大小 小于或等于20 大于20求平均值执行取反运算执行平方运算 存结果于y结束电子时钟:开始r0,r1,r2置零p

5、0,p1,p2置零r2<-0r1<-0 r0<-0 空操作延时1秒r0加1,输出p2r0=60? no yesr1+1,输出p1 r1=60? no yesr2+1,输出p0r2=24? no yes清零结束开始加减计数器流程图:p0, p1, p2<-0p3.7=0?执行1计数执行+1计数 yesr0=0?高两位r1-1,转换为十进制,输出p0r0<-99r0=0?r1<-99低位r01,转换为十进制,输出p1p0, p1<-99p0, p1<-0r1<-0r0<-0低两位r0+1,转换为十进制,输出p1r0=99? no no y

6、es yes高两位r1+1,转换为十进制,输出p0r0=99? yes yes no no清零结束五、源代码:1)org 0000hmov a,#50hmov dptr,#2000hmovx dptr,a ;将数存入片外rammov dptr,#2000hmovx a,dptr ;从片外ram中取数xmov r7,aclr cmov r0,#40h ;对x的值进行比较subb a,r0jnc mutimov r1,#20hclr cmov a,r1subb a,r7jc divimov a,r7cpl a ;对x进行取反mov dptr,#2001hmovx dptr,a ;存入片外ramlj

7、mp stopdivi:mov b,#2h ;除法子程序 mov a,r7 div ab mov dptr,#2001h movx dptr,a ljmp stopmuti:mov a,r7 ;平方子程序 mov b,a mul ab mov dptr,#2001h ;低位存入片外ram中2001h movx dptr,a inc dptr mov a,b movx dptr,a ;高位存入片外ram中2002hstop:sjmp $ end2)org 0000h mov r0,#0;r0,r1,r2置0mov r1,#0mov r2,#0mov p0,#0;p0,p1,p2置0mov p1,

8、#0mov p2,#0 input:jnb p3.0,step start: acall delay inc r0;秒钟计数 mov a,r0 acall output;转化为bcd码 mov p2, a cjne r0,#60,start;60进制判断进1 mov r0,#0; mov p2,#0; inc r1;分钟计数 mov a,r1 acall output;转化为bcd码 mov p1,a cjne r1,#60,start;60进制判断 mov r1,#0; mov p1,#0; inc r2;时钟计数 mov a,r2; acall output;计算bcd码 mov p0,a

9、 cjne r2,#24,start;判断是不是溢出了 mov r2,#0;溢出清0 mov p0,#0;输出清0 sjmp input;跳出循环 delay:mov r3,#19h;循环次数loop:mov r4,#28hloop1:mov r5,#0fah;循环次数loop2:nop nop djnz r5,loop2 djnz r4,loop1 djnz r3,loop sjmp start ret output:mov b,#0ah; div ab swap a orl a,b ret done:sjmp $step:sjmp step end3)org 0000hmov p0,#0h

10、mov p1,#0hmov p2,#0hjudge:clr c mov c,p3.7 jnc adddonesubddone:mov p0,#99h mov p1,#99h mov r0,#63h ;千,百位 mov r1,#63h ;十,个位start: mov a,r1 acall delay dec a mov r7,a acall output mov p1,a mov b,r7 mov r1,b cjne a,#0h,start;低位循环 mov a,#63h mov r7,a acall output mov p1,a mov b,r7 mov r1,b mov a,r0 mov

11、r7,a dec a acall output mov p0,a mov b,r7 mov r0,b cjne a,#0h,start ;高位循环 sjmp $;原地踏步adddone:mov p0,#00h mov p1,#00h mov r0,#00h ;千,百位 mov r1,#00h ;十,个位mov r0,#0hstart1: mov a,r1 acall delay inc a mov r7,a acall output mov p1,a mov b,r7 mov r1,b cjne a,#99h,start1 ;低位循环 mov a,#0h mov r7,a acall outp

12、ut mov p1,a mov b,r7 mov r1,b mov a,r0 inc a mov r6,a acall output mov p0,a mov b,r6 mov r0,b cjne a,#99h,start1 ;高位循环 sjmp $;原地踏步 output:mov b,#0ah;转化为bcd码 div ab swap a orl a,b ret delay:mov r3,#32h;循环次数loop:mov r4,#14h;循环次数loop1:mov r5,#0fah;循环次数loop2:nop nop djnz r5,loop2 djnz r4,loop1 djnz r3,l

13、oop ret end 六、 程序测试方法与结果、软件性能分析 1) 分段函数测试 分别令x=10、30、50测试个分段函数,再使用x=20、40测试分界点,其对应结果如下:x=40时,得到x,y存入片外ramx=20时,x=30时,x=40时,y的高位存入片外ram 2002h,低位存入2001hx=50时,y的高位存入片外ram 2002h,低位存入2001h2)、电子时钟测试当p3.0为高电平时,不记时,如图:当p3.7为低电平时计时开始,其计时效果如下:由于小时等待时间太长,故在此不再截图显示3)、4位十进制加、减1计数:当p3.7为低电平时执行加一计数p0输出千位和百位 p1输出十位

14、和各位当p3.7为高电平时执行减一计数p0输出千位和百位 p1输出十位和各位七、思考题1 1实现多分支结构程序的主要方法有哪些?举例说明。答:实现方法大致如下:1. 1.使用条件转移指令实现,如djnz,jnc2. 2.使用分支表法,如分支地址表、转移指令表、地址偏移量表。2 2在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?怎样用十进制加法指令实现减1计数?答:十进制加一后需要在计算结果的基础上进行修正,运用da指令;而十六进制加一指令所得结果即为最终结果,无需进行修正。 写十进制加法指令时,首先将结果与#0相加,即adda,0;然后运用daa指令,修正a为十进制,最后再执行减一操作,即dec a。如此便可得到结果。八、心得与体会本次实验主要进行了分支程序的设计实验,并涉及到了函数的多分支,与子函数间的嵌套,加深了我们对如何运用子函数进行程序的分支的方法。其中,分支函数的实现过程不是很复杂,但是电子时钟的24小时制程序设计需要对多级函数的嵌套有深刻的理解

温馨提示

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

评论

0/150

提交评论