《分支程序设计实验实验报告.docx》由会员分享,可在线阅读,更多相关《分支程序设计实验实验报告.docx(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、分支程序设计实验实验报告 分支程序设计实验实验报告 作者:日期: ? 实验二分支程序设计实验实验报告 实验名称:分支程序设计实验 指导教师罗志祥 专业班级光信1006 姓名张博学号U210139 联系方式 一、任务要求: 熟练掌握K il 环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行O 口的使用。 设有8bits 符号数X 存于外部R M 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写程序。 240/2204020X X Y X X X X ? =? ?当当当 利用51系列单片机设计一
2、个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P 、P 、2端口输出(以压缩B D 码的形式)。P30为低电平时开始计时,为高电平时停止计时。 提高部分(选做): a 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P 口输出。利用P3.状态选择加、减计数方式。 b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。 二、设计思路: 1.分支函数程序设计:首先将X 赋给累加器A ,与4比较大小,将大于或等于40的执行乘方操作;小于40的再与20做比较,大于0的执行取除法操作,小于或等于20的执行取反操作。最后将计算结果Y 存于片外的RAM 上。 2.电子时钟程序设
3、计思路:首先用循环程序的嵌套实现一个1s 的延时,同时让记秒的端口P2同步加一,到6后清零;再让此循环执行60次实现1min 的延时,同时让P1同步加一,到6后清零;再让分钟的循环执行24次,实现1hour 的延时,同时让P 同步加一。至此循环,即可实现24小时的时钟功能。(注:本计算机的晶振频率为1MHz) 3.4位十进制加、减1计数程序思路:低位的个位和十位赋给一个寄存器,而将高位即百位千位赋给另外一个寄存器,通过循环程序使低位数循环100次即向高位进位或借位,高 位循环10次后即回归初始状态,同时设计两个子函数分别执行加一、减一操作。其中,用P的第7位的状态实现对计数与否的控制。 三、资
4、源分配: 1.分支函数程序::累加器?C:位操作?B:做乘方的寄存器PTR:片外寻址指针 ?2000H、01H、2022H:片外存储空间 2.电子时钟程序:A:累加器C:位操作?P、1、2:分别电子时钟的时、分、 秒输出?R0、R1、R2:分别时分秒计数用存储器? 3、R4、R5:完成1s延时的相关数据存储 3.四位十进制加、减计数程序::累加器?C:位操作?0:低位输出口 P:高位输出口 R0:高位寄存器:低位寄存器 R R6:分别临时储存低位和高位的寄存器 四、流程图: 1. 分支函数程序流程图 2.电子时钟程序流程图 .四进制加、减计数程序流程图 各图形如下: 大于或等于0 小于或等于0
5、 大于20 取数 开比较X 与40的大小 执行平 比较X 与20 的大小 执行求平 存结结 电子时钟: NO Y S NO ES NO YES 开R0,R1,R2-0 R1-0 R0-0 空操作R0加1,R0=6 R1=6 R2=2R1+1,输R2+1,输清结 加减计数器流程图: YE NO NO YES ES YES ES NO 开P0, P3.7执行+1计P0, 低两位R1-R0=9 R0-高两位 R0=9 清零 执行1P0, 低位R0R1-R0=0 R0-高两位 R0=0 结 五、源代码: 1) ORG 000 OV A,#0H MO DPTR,#2000 MOX DPTR,A ;将数存
6、入片外RAM MOV DPTR,#00H MOVX ,D;从片外M中取数MO R,A CLR C OV R,4H ;对X的值进行比较SUBB ,R J MUTI MOV R,#20 CR C MOV ,R1 SUB A,R7 JC DVI MOV A,R7 CP A ;对X进行取反 MO DPTR,#201 MOX DT, ;存入片外RAM LJMP OP V:MOB,;除法子程序 MV A,R7 IV AB M DPTR,#201H MOX PR, LJMP STO MU:MOV A,R;平方子程序 OV ,A MUL AB MV DPTR,#2022H ;低位存入片外RAM中0H OVDP
7、,A IN DPTR ? MOV A, ?MOVX DPTR,A ;高位存入片外AM中2022 TOP:SJMP $? END 2) RG 0000H MOV R0,#;0,R,R2置0 OV R1,#0 MO R2,#0 OV P0,#;P0,P1,P2置0 MOV 1,#0 OV ,#0 IPUT:JNB P.0,STEP TART:ALL DELAY IN0;秒钟计数 MOV ,0 ACAL OUTPUT;转化为b码 ? MOV P, A CJNE R0,#6,TAT;进制判断进 MV 0,#; MOV P2,#0; C R1;分钟计数 MV A,1 ACAL UTPUT;转化为bcd码 MOV , CJNE R1,60,SRT;6进制判断 OV R1,; MOV P1,#; INC R2;时钟计数 MOV ,2; ACALL U;计算bcd码 V ,A CJN R2,#4,START;判断是不是溢出了OV R,0;溢出清0 MV P,#;输出清0 JMP IP;跳出循环 DELAY:MV ,#19H;循环次数 LOP:OV R4,#28 LOOP1:MOV 5,#FH;循环次数 OOP:O NOP JN R5,LOP2 DJNZ R4,LOO1 DN R,O MP SART