华中科技大学单片机实验二报告

上传人:小** 文档编号:57369592 上传时间:2018-10-21 格式:DOCX 页数:11 大小:239.89KB
返回 下载 相关 举报
华中科技大学单片机实验二报告_第1页
第1页 / 共11页
华中科技大学单片机实验二报告_第2页
第2页 / 共11页
华中科技大学单片机实验二报告_第3页
第3页 / 共11页
华中科技大学单片机实验二报告_第4页
第4页 / 共11页
华中科技大学单片机实验二报告_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《华中科技大学单片机实验二报告》由会员分享,可在线阅读,更多相关《华中科技大学单片机实验二报告(11页珍藏版)》请在金锄头文库上搜索。

1、单片机实验报告 实验名称 分支程序设计 指导教师 刘 冬 生 专业班级 学 号 联系方式 一任务要求 熟练掌握 KeilC 环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻 址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行 IO 口的 使用。 1. 设有 8bits 符号数 X 存于外部 RAM 单元,按以下方式计算后的结果 Y 也存于外部 RAM 元,请按要求编写程序。 2 40 /22040 20 XX YXX XX 当 当 当 2.利用 51 系列单片机设计一个 24 小时制电子时钟,电子时钟的时、分、秒数值分别通 过 P0、P1、P2 端口输出(以压

2、缩 BCD 码的形式) 。P3.0 为低电平时开始计时,为高电平时 停止计时。 提高部分(选做): a. 实现 4 位十进制加、减 1 计数,千位、百位由 P1 口输出;十位、个位由 P2 口输出。 利用 P3.7 状态选择加、减计数方式。 b. 利用 P3 口低四位状态控制开始和停止计数,控制方式自定。 二设计思路 1.分段函数设计 对于第一个任务,根据变量 X 的值的不同进行相应的计算。所以我们首先要判断 X 的 值属于那个范围。我们可利用比较转移指令 CJNE 来判断 X 是否等于临界值 20,40,若不等, 再根据执行 CJNE 指令后的进位位 CY 的值来判断 X 与临界值的的大小关

3、系,如:CY=0 则 X 大于临界值,CY=1 则 X 小于临界值;然后根据 X 的值所在的区间进行相应的计算。应该注 意的是,除法计算中可能产生余数,商和余数应该分开存储,若乘方运算结果大于 255, 高八位与低八位应分开存储 224 进制时钟 本程序须可以构建两部分循环。首先构建一个三重循环实现“一秒延时” ,循环体利 用 NOP 指令(单字节指令,1s)经多次循环达到延时一秒的效果。再利用已经构建好的 “一秒延时”部分,设计计时系统的三重循环,秒(0-59) 、分(0-59) 、时(0-23) 。秒和 分计 60 次,小时计 24 次,但,是从 0 开始计,所以在分、秒达到 59,小时达

4、到 23 时, 下一次应该为零。程序运行时修改 P3.0 的值可以实现暂停和继续的功能 三资源分配 1. 分段函数 根据题目的条件,首先,设该 8 位无符号数为 30H,把片外地址 4000H 分配给它,把 片外地址 4001H 和 4002H 分配给经分段函数计算得到的结果 Y。按位取反计算结果存于 4001H 单元,而除法计算结果的商与余数和乘方计算中结果的高、低八位分开存储于 4001H-4002H 单元。用寄存器 A,B 来存放在乘除运算中所得的中间结果。 2. 二十四进制时钟 工作寄存器 R0、R1、R2 分别用于秒、分、时循环次数的设定,R3、R4 分别用于分与 时的循环计数,R5

5、-R7 用于“一秒延时”中三重循环的循环次数设定。秒、分、时数值分 别由 P2、P1、P0 端口输出。 四流程图 N Y 开始 给定 X,并把 X 的值赋到 A 中 设置一个数据指针 将 X 的值存在外部存储 器中 CY1? A20? N Y N Y Y N N Y A40?CY1? Y=X/2 Y=2 将 A 的值存到 4001H 将 B 的值存到 4002H 结束 对 X 取反并 赋给 Y 将 A 的值存到 4001H CY 清零 开始 将 P0,P1,P2,P3 清 零 P3.0=0? 延时 1S 秒计数,R0 加 1 并存入 A 中,转换成 BCD 码 N Y Y N N Y 五源代码

6、 1. 分段函数 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV A, #29H ;将 8 位无符号数赋给 A MOV DPTR, #4000H ;定义数据指针 MOVX DPTR, A ;将 X 存于片外 RAM CLR C ;将进位位清零 KIND1:CJNE A, #14H, KIND2 ;将 A 与 14H 比较,若不等于 14H,跳转至 KIND2 OUT1: CPL A ;对 A 中内容取反 R0=60H? R0,P2 置零 分计数,R1 加 1,并存 入 A 中,转换成 BCD 码 R1=60H? 将 R1,P1 置零 小时计数,R2 加 1 并存

7、 入 A,转换成 BCD 码 R2=R4? 将 A 赋给 P1 将 R2,P0 置零将 A 赋给 P0 将 A 赋给 P2 MOV DPTR, #4001H ;定义数据指针 MOVX DPTR, A ;将计算结果存于片外地址 4001H SJMP DONE KIND2:JNC KIND3 ;判断进位位 CY 是否为 0,若为 0,跳转至 KIND3 SJMP OUT1 ;否则跳转至 OUT1 KIND3:CLR C ;将进位位清零 CJNE A,#28H, KIND4 ;将 A 中内容与 28H 比较,若不等于 28H,跳转至 KIND4 OUT2: MOV B,A ;将 A 中内容赋给 B

8、MUL AB ;计算 X 的平方,将结果高八位存于 B,低八位存于 A MOV DPTR, #4001H ;定义数据指针 MOVX DPTR,A ;将结果低八位存于片外地址 4001H INC DPTR ;数据指针加一 MOV A,B ;将 B 中内容赋给 A MOVX DPTR,A ;将结果高八位存于片外地址 4002H SJMP DONE KIND4:JNC OUT2 ;判断进位位是否为 0,若为 0,跳转至 OUT2 SJMP OUT3 ;否则跳转至 OUT3 OUT3: MOV B,#02H DIV AB ;计算 X/2,将商存于 A,余数存于 B MOV DPTR,#4001H ;定

9、义数据指针 MOVX DPTR,A ;将商存于片外地址 4001H INC DPTR ;数据指针加 1 MOV A,B MOVX DPTR,A ;将余数存于片外地址 4002H SJMP DONE DONE: SJMP $ END 2. 24 小时时钟 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R0,#00H MOV P0,#00H ;时钟位清零 MOV P1,#00H ;分钟位清零 MOV P2,#00H ;秒钟位清零 START: JB P3.0,START ;P3.0 为低电平开始计数,高电平停止计数 MOV R2,P2 ;P2 的值存入 R2 CJ

10、NE R2,#60H,DEL ;秒钟达到 60 继续,不足 60 跳转 MOV P2,#00H ;秒钟清零 MOV A,P1 ADD A,#01H ;分钟位加 1 DA A ;分钟位改为 BCD 码 MOV P1,A MOV R1,P1 ;P1 的值存入寄存器 R1 CJNE R1,#60H,DEL;分钟达到 60 继续,不足 60 跳转 MOV P1,#00H;分钟清零 MOV A,R0 ADD A,#01H;时钟位加 1 DA A;时钟位改为 BCD 码 MOV R0,A MOV P0,A CJNE R0,#24H,DEL;时钟达到 24 继续,不足 24 跳转 MOV P0,#00H ;

11、时钟位清零 MOV R0,#00H DEL: MOV R7,#24 ;延时程序 LOOP1: MOV R6,#61 LOOP2: MOV R5,#170 LOOP3: NOP NOP DJNZ R5,LOOP3 DJNZ R6,LOOP2 DJNZ R7,LOOP1 MOV A,P2 ADD A,#01H;秒钟位加 1 DA A MOV P2,A SJMP START END 六. 程序测试方法与结果、软件性能分析 1.分段函数 改变 X 的值,分别在不同的 X 值时运行程序,结果如下截图 (1)X=29H (2)X=21H (3)X=0CH 结果与预测相符合,程序正确。 2.24 小时时钟程

12、序 暂停时 思考题: 1实现多分支结构程序的主要方法有哪些?举例说明。 答:1.是利用条件转移指令实现,如 DJNZ,JNC 等等 例如:例如,判断两个单字节无符号数的大小(分别存于片内 RAM 的 40H 和 41H 单元)并把大数存入 42H 单元。可以用判断 CY 的转移指令 JNC 来实现,程序如下: JUDGE:MOV A,40H CLR C SUBB A,41H JNC LP MOV 42H,41H RET LP: MOV 42H,40H RET 2.利用分支表来实现,如分支地址表、转移指令表、地址偏移量表。例如:根据 R3 的 值控制转向 8 个分支程序。采用分支地址表实现: M

13、OV DPTR,#BRATAB ;取表首地址 MOV A,R3 ADD A,R3 ;AR32 JNC NADD INC DPH ;R32 进位加到 DPH NADD:MOV A,R4 ;暂存 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 SUBR DW SUBR7 2在编程上,十进制加 1 计数器与十六进制加 1 计数器的区别是什么?怎样用十进制加法 指令实现减 1 计数? 答:十进制加一后需要在计算结果的基础上进行修正,运用 DA 指令,而十六进制加一指令 所得结果即为最终结果,无需进行修正。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

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