分支程序设计实验实验报告
更新时间:2023-03-21 01:29:01 阅读量: 实用文档 文档下载
实验二分支程序设计实验实验报告
实验名称:分支程序设计实验
指导教师罗志祥
专业班级光信1006 姓名张博学号U9 联系方式
1
2 一、任务要求:
熟练掌握KeilC 环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行IO 口的使用。
1. 设有8bits 符号数X 存于外部RAM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写程序。
240/2204020X X Y X X X
X ?≥?=<?≤?当当当
2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD 码的形式)。为低电平时开始计时,为高电平时停止计时。
提高部分(选做):
a. 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用状态选择加、减计数方式。
b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。
二、设计思路:
1.分支函数程序设计:首先将X 赋给累加器A ,与40比较大小,将大于或等于40的执行乘方操作;小于40的再与20做比较,大于20的执行取除法操作,小于或等于20的执行取反操作。最后将计算结果Y 存于片外的RAM 上。
2.电子时钟程序设计思路:首先用循环程序的嵌套实现一个1s 的延时,同时让记秒的端口P2同步加一,到60后清零;再让此循环执行60次实现1min 的延时,同时让P1同步加一,到60后清零;再让分钟的循环执行24次,实现1hour 的延时,同时让P0同步加一。至此循环,即可实现24小时的时钟功能。(注:本计算机的晶振频率为12MHz )
位十进制加、减1计数程序思路:低位的个位和十位赋给一个寄存器,而将高位即百位千位赋给另外一个寄存器,通过循环程序使低位数循环100次即向高位进位或借位,高位循
环100次后即回归初始状态,同时设计两个子函数分别执行加一、减一操作。其中,用P3的第7位的状态实现对计数与否的控制。
三、资源分配:
1.分支函数程序:A:累加器C:位操作B:做乘方的寄存器DPTR:片
外寻址指针2000H、2001H、2002H:片外存储空间
2.电子时钟程序:A:累加器C:位操作P0、P1、P2:分别电子时钟的时、
分、秒输出R0、R1、R2:分别时分秒计数用存储器
R3、R4、R5:完成1s延时的相关数据存储
3.四位十进制加、减1计数程序:A:累加器C:位操作P0:低位输出
口 P1:高位输出口 R0:高位寄存器 R1:低位寄存器 R7 R6:分别临时储存低位和高位的寄存器
3
四、流程图:
1. 分支函数程序流程图
2.电子时钟程序流程图
3.四进制加、减1计数程序流程图
各图形如下:
4
电子时钟:
5
6
NO
NO
五、源代码:
1)
ORG 0000H
MOV A,#50H
MOV DPTR,#2000H
MOVX @DPTR,A ;将数存入片外RAM MOV DPTR,#2000H
MOVX A,@DPTR ;从片外RAM中取数X MOV R7,A
CLR C
MOV R0,#40H ;对X的值进行比较SUBB A,R0
JNC MUTI
MOV R1,#20H
CLR C
MOV A,R1
SUBB A,R7
JC DIVI
MOV A,R7
CPL A ;对X进行取反
MOV DPTR,#2001H
MOVX @DPTR,A ;存入片外RAM
LJMP STOP
DIVI:MOV B,#2H ;除法子程序
MOV A,R7
DIV AB
MOV DPTR,#2001H
MOVX @DPTR,A
7
LJMP STOP
MUTI: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中2002H
STOP:SJMP $
END
2)
ORG 0000H
MOV R0,#0;R0,R1,R2置0
MOV R1,#0
MOV R2,#0
MOV P0,#0;P0,P1,P2置0
MOV P1,#0
MOV P2,#0
INPUT:JNB ,STEP
START: ACALL DELAY
INC R0;秒钟计数
MOV A,R0
ACALL OUTPUT;转化为bcd码
MOV P2, A
8
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
CJNE R2,#24,START;判断是不是溢出了 MOV R2,#0;溢出清0
MOV P0,#0;输出清0
SJMP INPUT;跳出循环
DELAY:MOV R3,#19H;循环次数
LOOP:MOV R4,#28H
LOOP1:MOV R5,#0FAH;循环次数
LOOP2:NOP
NOP
DJNZ R5,LOOP2
DJNZ R4,LOOP1
DJNZ R3,LOOP
SJMP START
RET
OUTPUT:MOV B,#0AH;
DIV AB
9
SWAP A
ORL A,B
RET
DONE:SJMP $
STEP:SJMP STEP
END
3)
ORG 0000H
MOV P0,#0H
MOV P1,#0H
MOV P2,#0H
JUDGE:CLR C
MOV C,
JNC ADDDONE
SUBDDONE: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
10
ACALL OUTPUT
MOV P1,A
MOV B,R7
MOV R1,B
MOV A,R0
MOV 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,#0H
START1: 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 OUTPUT
11
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,LOOP
RET
END
12
六、
程序测试方法与结果、软件性能分析
1)
分段函数测试
分别令X=10、30、50测试个分段函数,再使用X=20、40测试分界点,其对应
结果如下:
X=40时,得到X,Y存入片外RAM
X=20时,
13
X=30时,
14
X=40时,Y的高位存入片外RAM 2002H,低位存入2001H
X=50时,Y的高位存入片外RAM 2002H,低位存入2001H
15
2)、电子时钟测试
当为高电平时,不记时,如图:
16
当为低电平时
计时开始,其计时效果如下:
由于小时等待时间太长,故在此不再截图显示3)、4
位十进制加、减1计数:
当为低电平时执行加一计数
P0输出千位和百位 P1输出十位和各位
17
当为高电平时执行减一计数
P0输出千位和百位 P1输出十位和各位
七、思考题
1.1.实现多分支结构程序的主要方法有哪些举例说明。
答:实现方法大致如下:
1. 1.使用条件转移指令实现,如DJNZ,JNC……
2. 2.使用分支表法,如分支地址表、转移指令表、地址偏移量
表。
2.2.在编程上,十进制加1计数器与十六进制加1计数器的区别是什么怎样用十进制加法指令实现减1计数
答:十进制加一后需要在计算结果的基础上进行修正,运用DA指令;而十六进制加一指令所得结果即为最终结果,无需进行修正。
写十进制加法指令时,首先将结果与#0相加,即ADD A ,#0;
然后运用DA A指令,修正A为十进制,最后再执行减一操作,即DEC A。
如此便可得到结果。
八、心得与体会
本次实验主要进行了分支程序的设计实验,并涉及到了函数的多分支,与子函数间的嵌套,加深了我们对如何运用子函数进行程序的分支的方法。其中,分支函数的实现过程不是很复杂,但是电子时钟的24小时制程序设计需要对多级函数的嵌套有深刻的理解,在这个程序的设计过程中,的确锻炼了我们对于子函数、延时程序、系统频率等相关概念有了多
18
的了解。在电子时钟设计中,要指出的是,程序在考虑一些延时的循环函数时,一些耗时比较少的指令没有加入计算,这就导致了,程序在执行过程中会出现一定的误差,在所难免,但总体而言,精确度还算比较高,满足了设计的要求。
总而言之,本次实验在自己一人的努力下,基本完成了实验任务,岁耗时较长,但有其自己的效果,也提高了我通过单片机实现一些小型功能的能力,这些对以后的学习必将大有裨益!
19
正在阅读:
分支程序设计实验实验报告03-21
农村2021年人居环境整治工作情况报告08-17
职业技能实训平台经济数学基础1206-24
浙江乡土旅游章节练习题(第一、二章)06-04
2018年第1学期《管理学原理》平时作业题2018.101-30
财政部会计司解读《企业内部控制应用指引第10号——研究与开发》04-30
我是山姆英文观后感12-11
各省军区独立师历史沿革04-25
中国舞四级教学资料01-19
《此房是我造》观后感04-02
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 实验
- 程序设计
- 分支
- 报告
- 初中英语作文:英语自我介绍8篇
- 五年级英语上册Unit6whoseTshirtisthatLesson33教案人教精通版(三起)
- 公司人力资源外包服务方案
- 幼儿园副园长个人工作总结三篇
- 演讲稿范文初二语文演讲稿范文_022
- 广告设计与制作合同范本
- 项目部各级安全生产责任书
- 人教版小学六年级升初中数学模拟试题及答案 (典型题) (8)
- 南京市政府采购合同范本新
- 电信员工年终工作总结范文
- 2020年高考政治时事政治复习:2020年政府工作报告关键句知识解读
- 二年级音乐上册第三单元《儿童在游戏》教学设计苏少版
- 2013年公需科目:职业道德和创新能力建设考试试卷(同名28636)
- 2017年年产5万吨不锈钢工业管项目可行性研究报告(编制大纲)
- 三下乡暑期实践报告
- 高考语文阅读常见题型答题公式
- 2019通用技术设计应用题专题练习(四)
- 节粮节水节电主题班会教案
- Python调用GDAL计算地形耐用指数TRI地形位置指数TPI粗糙度Roughness的方法
- 某供水工程施工组织设计(doc 51页)