分支程序设计实验-单片机第二次试验

上传人:汽*** 文档编号:487646850 上传时间:2022-09-14 格式:DOC 页数:8 大小:94KB
返回 下载 相关 举报
分支程序设计实验-单片机第二次试验_第1页
第1页 / 共8页
分支程序设计实验-单片机第二次试验_第2页
第2页 / 共8页
分支程序设计实验-单片机第二次试验_第3页
第3页 / 共8页
分支程序设计实验-单片机第二次试验_第4页
第4页 / 共8页
分支程序设计实验-单片机第二次试验_第5页
第5页 / 共8页
点击查看更多>>
资源描述

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

1、微机实验报告 一、任务要求1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序。 2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。 提高部分(选做):a. 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。 b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。二、设计思路 1. 将8bits符号数从外部RAM单元取出至A中,符号位为1的

2、时候为负数,进行取反运算;当符号位为0的时候为正数,因此将A与20进行比较,当A20时跳至取反运算那一步;当A20时将A与40进行比较,如果当A40时则对其进行平方运算那一步,当A40时则进行除法运算那一步。每次算完之后直接储存,最后再分配储存于外部RAM单元的指定位置。 2. 清零R0R2和P0P2,开始先判断控制位P3.0是不是0,当P3.0=1时原地踏步重复判断,当P3.0=0时开始运行程序。计时开始,进行秒钟R0计数,每次计数完成用BCD码子程序转换,然后判断计数后R0值是否到60,若R0的值不足60,就直接输出给P2,若R0的值为60,就把R0和P2进行清零后,开始分钟计数部分。同理

3、,每次分钟计数完之后用BCD码子程序转换,然后判断计数后R1的值是否为60,若不为60,就直接输出给P1,若R1的值为60,就把R1和P1清零后开始时钟计数部分。时钟计数完后同样用BCD码子程序转换,然后判断计数后的R2的值是否为24,若不为24,就直接输出给P0,若R2为24,就把R2和P0清零后直接跳出计数部分,从判断P3.0部分再开始.每两次计数输出之间穿插一个1s的延时程序。就可以达到时钟的功能。 三、资源分配 1.分支程序: 数据指针 DPTR:对片外RAM进行读写操作 2000H:存放8bits符号数X 2010H:存放结果Y(取反后的数,或者平方后的高8位,或者除法后的商) 20

4、11H:存放结果Y(平方后的低8位,或者除法后的余数) 2.时钟程序: R0、R1、R2:分别进行秒钟,分钟,时钟的计数 P2、P1、P0:分别输出秒钟,分钟,时钟 P3.0:是否计数的控制位 R3、R4、R5:为1s延时程序指定循环次数 B:BCD码转换子程序的操作数四、流程图 1.分支程序流程图: 2.时钟程序的流程图:五、源代码 (含文件头说明、语句行注释)1.分支程序代码如下: ORG 0000HSJMP START START: MOV DPTR, #2000H MOV A, #31 MOVX DPTR, A ; 存数 MOV B, 0 ; 寄存器B清零 MOVX A,DPTR ;

5、从R0中取出数x JNB ACC.7, COMP1; 判断符号位,符号位为0时转到COMP1 LP3: CPL A; 对x取反 SJMP STORE COMP1: CJNE A, #20, COMP2 ; A20时,转到COMP2 SJMP LP3; A=20时,转到LP3取反 COMP2: JC LP3;C=1,A20.当A40时,转到COMP3 LP1: MOV B,A;A=40时,给B赋值为A MUL AB;计算x平方 SJMP STORE COMP3: JNC LP1 ;C=0,A40,转到LP1计算x平方 MOV B,#02H;C=1,A40,赋值B=2 DIV AB;计算x除以2

6、STORE: MOV DPTR,#2010H MOVX DPTR,A ;存数: INC DPTR ;对于平方,高位在前地位在后 MOV A,B ;对于除法,商在前余数在后 MOVX DPTR,A SJMP $ END 2.时钟程序代码如下: ORG 0000H SJMP MAIN MAIN: MOV R0,#0 ;R0,R1,R2初始化 MOV R1,#0 MOV R2,#0 MOV P0,#0 ;P0,P1,P2置0 MOV P1,#0 MOV P2,#0 INPUT: JB P3.0,INPUT;延时程序 DELAY: MOV R3,#64H ;循环次数100 LOOP: MOV R4,#

7、64H ;循环次数100 LOOP1: MOV R5,#31H;循环次数49 LOOP2: NOP NOP DJNZ R5,LOOP2 ;晶振频率设为23.8836Hz DJNZ R4,LOOP1;(4*49+3)*100+3*100=1990300乘以0.502437us DJNZ R3,LOOP ;差不多1s START: INC R0 ;秒钟计数 MOV A,R0 ACALL OUTPUT ;计算bcd码 CJNE R0,#60,X2 ;60进制判断进1 MOV R0,#0 ;进位之后清0 MOV P2,#0 ;输出清0 INC R1 ;分钟计数 MOV A,R1 ACALL OUTPU

8、T ;计算bcd码 CJNE R1,#60,X1 ;60进制判断 MOV R1,#0 ;进位之后清0 MOV P1,#0 ;输出清0 INC R2 ;时钟计数 MOV A,R2 ACALL OUTPUT ;计算bcd码 CJNE R2,#24, X0 ;判断是不是溢出了 MOV R2,#0 ;溢出之后清0 MOV P0,#0 ;输出清0 SJMP INPUT ;跳出循环 X2:MOV P2, A ;输出 SJMP INPUT X1:MOV P1,A SJMP INPUT X0:MOV P0,A SJMP INPUT OUTPUT:MOV B,#0AH ;BCD码转换程序 DIV AB ;相除得

9、到高位,低位 SWAP A ;得到高位 ORL A,B RET STEP:SJMP STEP END六、程序测试方法与结果实验一:第一次令A为10H,进行运算后得到的结果是EFH,即取反成功 第二次令A为20H,进行运算后得到的结果是10H,即除以2后的结果 第三次取A为50,进行运算后的结果为09C4H=2500,即平方后的结果 因此可以判断程序没有问题实验二:第一次不进行任何操作开始运行程序,程序没有反应 第二次将P3.0改为0后,程序开始运行 第三次将P3.0改为0后再运行程序,经过一段时间后停止,发现此时程序运行的时间为1分41秒,即101秒;而实际经过的时间为100.85897秒,两

10、者误差很小,说明程序设计以及运行正常思考题1实现多分支结构程序的主要方法有哪些?举例说明。主要方法有:分支地址表 如:BRATAB: DW SUBRO DW SUBR1 DW SUBR2 转移地址表 如:JMPTAB: AJMP SUBR0 AJMP SUBR1 AJMP SUBR2 地址偏移量表 如:DISTAB: DB SUBRO-DISTAB DB SUBR1-DISTAB DB SUBR3-DISTAB 2. 在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?怎样用十进制加法指令实现减1计数? 十六进制加一直接用INC加一,十进制加一时需先判断该位上是否是9,若是则清零。用十进制加法进行减1计数时,应讲计数器当前值与1的十进

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

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