人人范文网 范文大全

实验二分支程序 豆丁

发布时间:2020-03-04 02:38:45 来源:范文大全 收藏本文 下载本文 手机版

微机《实验》报告

实验名称 分支程序设计实验

指导教师 曹 丹 华

专业班级 光电1007班 姓名 余 冬 学号 U201013524 序号 16 联系方式 18627065149

一、任务要求

1.设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序。

X2当X40YX/2当20X40

当X20X2.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P

1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。 提高部分(选做):

a.实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。

b.利用P3口低四位状态控制开始和停止计数,控制方式自定。

二、设计思路

任务1:将位于2000H中的X取出,判断是否为负数,若为负数,则对X按位取反,结果送入3000H单元。若为正数,则将X的值与40比较,若大于等于40,则将X平方后的结果送入3000H低字节和高字节单元中。若X小于40,则将X的值与20比较,若X>20,则将除以2后存入3000H单元。否则对X按位取反,结果送入3000H单元。

其中,按位取反使用CPL指令实现:除以2运算使用2进制位带左移实现:平方运算使用MUL指令实现。并且平方运算后的结果用2个存储单元保存。 任务2:

先将P

2、P1和P0端口置0,注意P0没有锁存功能,用R5存储P0的内容,并将R5也置0.然后根据P3.0的值来判断是否开始计时,计时开始后等待一秒,而后P2加1,判断P2与60的大小,若P2小于60,则重新判断P3.0的值来决定是否开始计时。若P2等于60,则将P2置0,同时P1加1.再判断P1与60的大小,若小于60,则重新看P3.0的值是否开始计时。若P1等于60,则将P1置0,同时R5加1后将其值赋给P0。再判断R5与24的大小,若R5小于24,则重新判断P3.0的值来看是否开始计时。若R5等于24,则将置1后将其值赋给P0。等待一秒后又再次判断P3.0的值,目的是保证当改变P3.0后程序能立即做出反应。

三、资源分配

1.2000H:存入8bits符号数X 3000H、3001H:保存计算后的结果 DPTR:对片外RAM进行读写操作 R1:减法运算时保存A的值 2.R5:暂时存储P0端口的值

R0、R

1、R

2、R

3、R4:为实现延时一秒而指定操作的周期数 P0、P

1、P2:分别输出时、分、秒数值 P3:起计时控制作用

四、流程图

1、

2.

五、源代码 (含文件头说明、资源使用说明、语句行注释) 1.M EQU 10H ORG 0000H LJMP MAIN ORG 0100H MAIN:MOV DPTR,#2000H MOV A,#10H

MOVX @DPTR,A ; MOVX A,@DPTR

JB ACC.7,LOOP2 MOV R1,A

CLR C

SUBB A,#40H

MOV A,R1

JC LOOP1

MOV B,A MUL AB

MOV DPTR,#3000H MOVX @DPTR,A

MOV A,B INC DPTR MOVX @DPTR,A

DONE:SJMP DONE LOOP1:MOV R1,A

CLR C SUBB A,#20H

MOV A,R1

JC LOOP2

JZ LOOP2

CLR C

RRC A

将初始值存入2000H单元

;从2000H单元读出M的值

;判断M是否为负,若为负,跳转LOOP2 ;暂时保存A的值

;将M的值与40进行比较 ;将减法运算之前的值再赋给A ;若M的值小于40,跳转LOOP1

;进行M的平方运算

;低位存入3000H单元

;高位存入3001H单元 ;暂时保存A的值

;将M的值与20进行比较 ;将减法运算之前的值再赋给A ;若M小于20,跳转LOOP2 ;若M等于20,跳转LOOP2 ;进行除了操作 OVER:MOV DPTR,#3000H MOVX @DPTR,A SJMP DONE

;字节取反

;将结果存于3000H单元

LOOP2:CPL A

SJMP OVER END

2、ORG 0000H LJMP MAIN ORG 0300H MAIN:MOV P2,#00H ;将P2端口置0 MOV P1,#00H MOV P0,#00H MOV R5,#00H

;将P1端口置0 ;将P0端口置0

;将P0端口的暂时存储器置0 START:JB P3.0,START ;判断P3.0是否为0,若为0,则向下执行 LCALL DELAY ;调用延时子程序 HERE: JB P3.0,HERE MOV A,P2

ADD A,#01H DA A MOV P2,A MOV A,P1 ADD A,#01H DA A MOV P1,A CLR C SUBB A,#60H JC LOOP2 MOV P1,#00H MOV A,R5 ADD A,#01H

;将秒钟值加强,并作十进制修正

DA A MOV R5,A MOV P0,R5 CLR C SUBB A,#24H

JC LOOP3 MOV R5,#00H MOV P0,R5 MOV R0,#13 DELAY9:NOP NOP DJNZ R0,DELAY9 AJMP START LOOP3:MOV R0,#13 DELAY8:NOP NOP

DJNZ R0,DELAY8 NOP NOP NOP LJMP START LOOP2:MOV R0,#16 DELAY7:NOP

NOP DJNZ R0,DELAY7 NOP NOP NOP AJMP START LOOP1:MOV R0,#19H DELAY6:NOP NOP

DJNZ R0,DELAY6 NOP AJMP START DELAY:MOV R2,#6H DELAY3:MOV R1,#255 DELAY2:MOV R0,#255 DELAY1:NOP

NOP NOP DJNZ R0,DELAY1 DJNZ R1,DELAY2 DJNZ R2,DELAY3 MOV R4,#58 DELAY5:MOV R3,#255 DELAY4:NOP DJNZ R3,DELAY4

DJNZ R4,DELAY5 RET END

六、程序测试方法与结果、软件性能分析 1.a.赋值X为-2,截图如下 :

B.赋值X为16,截图如下:

C.赋值X为22,截图如下:

D.赋值X为42,截图如下:

2.第一步,当程序刚开始运行的时候,时分秒全部清零,如下图:

第二步,当秒向分进位时,前后对比如下:

运行前

运行后 由上可以看出前后刚好延时一秒。

第三步,当分向时进位时,前后对比如下:

运行前

运行后

由上可以看出分向时进位时,前后延时一秒。 第四步,到23:59:59时,运行前后如下:

运行前

运行后

由上也可以看出,分向时进位也延时一秒。综上,软件性能良好。

七、思考题

1.实现多分支结构程序的主要方法有哪些?举例说明、答:若分支比较少,则通常用条件转移指令来实现。

例如,判断两个单字节无符号数的大小,分别存于片内RAM的40H和41HUJ单元)并把人数存入单元。可以用判断CY的转移指令来实现,程序如下: JUDGE: MOM A,40H CLR C SUBB A,41H JNC LP MOV 42H,41H RET LP:MOV 42H RET 若分支比较多,则可采用的有三种形式:分支地址表、转移指令表、地址偏移量表。具体例子不详述。

2.在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?怎样用十进制加法指令实现减1计数?

答:十进制加法1计数器进行加1操作时,每加一次1,就得将每一字节进行十进制修正;而十六进制加法是相当于单字节或多字节的加法运算,其中被加数是计数器的当前值,加数始终是1.十进制加法进行减1计数时,应该将计数器的当前值与-1的补码FFH相加,然后将每一字节进行修正,从而实现十进制减1计数。

八、心得

本次实验遇到的问题包括时钟的程序设计和流程图的绘制。看出来,单片机的基础知识还没掌握好,应复习相应的课件,补充缺陷的地方。下次实验再继续努力。 说明:

标题:黑体,小四号

正文:宋体,五号,1.5倍行距

流程图使用 SmartDraw7

或Visio软件绘制

实验二分支程序 豆丁

工作总结(豆丁上传)

豆丁产品与服务

豆丁网人力资源管理程序

观《豆丁奇遇记》有感

观《豆丁奇遇记》有感

实验二小升旗仪式程序

考勤与请假制度豆丁

单片机实验9 多分支程序设计

豆丁网使用常见问题帮助手册

实验二分支程序 豆丁
《实验二分支程序 豆丁.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档