华中科大光电学院微机实验报告二分支程序设计.docx

上传人:b****5 文档编号:6219556 上传时间:2023-01-04 格式:DOCX 页数:8 大小:131.31KB
下载 相关 举报
华中科大光电学院微机实验报告二分支程序设计.docx_第1页
第1页 / 共8页
华中科大光电学院微机实验报告二分支程序设计.docx_第2页
第2页 / 共8页
华中科大光电学院微机实验报告二分支程序设计.docx_第3页
第3页 / 共8页
华中科大光电学院微机实验报告二分支程序设计.docx_第4页
第4页 / 共8页
华中科大光电学院微机实验报告二分支程序设计.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

华中科大光电学院微机实验报告二分支程序设计.docx

《华中科大光电学院微机实验报告二分支程序设计.docx》由会员分享,可在线阅读,更多相关《华中科大光电学院微机实验报告二分支程序设计.docx(8页珍藏版)》请在冰豆网上搜索。

华中科大光电学院微机实验报告二分支程序设计.docx

华中科大光电学院微机实验报告二分支程序设计

 

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

指导教师XXX

专业班级光信XXXX班

姓名XX

学号UXXXXXXXXX

联系方式Tel:

XXXXXXXXX

E-Mail:

******************

 

2012-10-10

【任务要求】

熟练掌握KeilC环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行IO口的使用。

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

2.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。

P3.0为低电平时开始计时,为高电平时停止计时。

【设计思路】

1、分段函数

根据变量X的值所处的区间进行相应的计算,可利用比较转移指令CJNE来判断X是否等于临界值(20,40),再根据执行CJNE指令后进位位CY的值来判断X与临界值的的大小关系(CY=0则X大于临界值,CY=1则X小于临界值),如此,再进行相应计算。

另外,除法计算可能产生余数,商和余数分开存储,乘方运算结果大于255,高八位与低八位分开存储。

2、二十四小时制电子时钟

此程序须构建两部分循环。

首先构建一个三重循环实现“一秒延时”,循环体利用NOP指令(单字节指令,1µs)调节延时时间。

再利用“一秒延时”,构建计时系统的三重循环,秒(0~59)、分(0~59)、时(0~23)。

此外,在计时至23:

59:

59时,返回至00:

00:

00,程序运行时修改P3.0的值可以实现暂停和继续的功能(利用JB指令进行判断和跳转)。

【流程图】

1、分段函数

2、二十四小时制电子时钟

【资源分配】

1、分段函数

寄存器DPTR用作数据指针。

变量X的值存于片外RAM的3000H单元,计算结果存于片外RAM的3001H~3002H单元,按位取反计算结果存于3001H单元,而除法计算结果的商与余数和乘方计算中结果的高、低八位分开存储于3001H~3002H单元。

2、二十四小时制电子时钟

工作寄存器R0、R1、R2分别用于秒、分、时循环次数的设定,R3、R4分别用于分与时的循环计数,R5~R7用于“一秒延时”中三重循环的循环次数设定。

秒、分、时数值分别由P0、P1、P2端口输出。

【源代码】

1、分段函数

ORG0000H

LJMP1000H

ORG1000H

MOVA,#30H;X赋值

MOVDPTR,#3000H

MOVX@DPTR,A;存X于片外RAM

CLRC

JUDGE1:

CJNEA,#14H,JUDGE2;X≠20,跳转至JUDGE2

ACCOUNT1:

CPLA;X≤20,计算Y,存于片外RAM

MOVDPTR,#3001H

MOVX@DPTR,A

SJMPDONE

JUDGE2:

JNCJUDGE3;C=0,则X>20,跳转至JUDGE3

SJMPACCOUNT1;C=1,则X<20,跳转至ACCOUNT1

JUDGE3:

CLRC

CJNEA,#28H,JUDGE4;X≠40,跳转至JUDGE4

ACCOUNT2:

MOVB,A;X≥40,计算Y,存于片外RAM,高、低八位分开

MULAB

MOVDPTR,#3001H

MOVX@DPTR,A

MOVDPTR,#3002H

MOVA,B

MOVX@DPTR,A;高、低八位分开储存

SJMPDONE

JUDGE4:

JNCACCOUNT2;C=0,X>40,跳转至ACCOUNT2

SJMPACCOUNT3;C=1,20

ACCOUNT3:

MOVB,#02H;20

DIVAB

MOVDPTR,#3001H

MOVX@DPTR,A

MOVDPTR,#3002H

MOVA,B

MOVX@DPTR,A;商、余数分开储存

SJMPDONE

DONE:

SJMP$

END

2、二十四小时制电子时钟

ORG0000H

LJMP2000H

ORG2000H

MOVP0,#00H;输出端口初始化

MOVP1,#00H

MOVP2,#00H

MOVR0,#3BH;计时循环次数赋值

MOVR1,#3BH

MOVR2,#18H

MOVR3,#00H;“分循环”计数

MOVR4,#00H;“时循环”计数

CLRC

CLRA

MOVP3.0,C

VOL:

JBP3.0,PAUSE;暂停功能跳转入口

VOL1:

MOVR5,#0AH;“一秒延时”循环次数赋值

VOL2:

MOVR6,#64H

VOL3:

MOVR7,#0FAH

DELAY:

NOP;“一秒延时”

NOP

DJNZR7,DELAY

DJNZR6,VOL3

DJNZR5,VOL2;“一秒延时”结束

INCA;“秒”数加1

DAA

MOVP0,A;通过P0输出“秒”数

DJNZR0,VOL;“秒循环”60次

MOVR0,#3BH;“秒循环”循环次数复位

CLRA

INCR3

MOVA,R3;“分”数加1

DAA

MOVR3,A;保存“分”的循环次数

MOVP1,#0FFH

MOVP1,R3;通过P1输出“分”数

MOVP0,#00H

CLRA

DJNZR1,VOL

MOVR1,#3BH

MOVR3,#00H

CLRA

INCR4

MOVA,R4

DAA

MOVR4,A;保存“时”的循环次数

MOVP2,#0FFH

MOVP2,R4;通过P2输出“时”数

MOVP0,#00H

MOVP1,#00H

CLRA

DJNZR2,VOL

MOVR4,#00H

MOVP2,#00H

SJMPVOL;时钟计时满二十四小时,跳转至初始时刻

PAUSE:

JBP3.0,PAUSE;暂停功能模块

SJMPVOL

END

【程序测试方法与结果、软件性能分析】

1、分段函数

截图:

X=16:

X=32:

X=48:

2、二十四小时制电子时钟

截图:

计时状态

暂停状态

功能分析:

该程序运行后可按正确的二十四小时制时钟进行计时,并通过手动修改P3.0

的值来控制暂停与否。

程序功能完整可靠。

【思考题】

●实现多分支结构程序的主要方法有哪些?

举例说明。

答:

一是利用条件转移指令实现,如DJNZ,JNC等等,二是利用分支表来实现,如分支地址表、转移指令表、地址偏移量表。

●在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?

怎样用十进制加法指令实现减1计数?

答:

十进制加一后需要在计算结果的基础上进行修正,运用DA指令,而十六进制加一指令所得结果即为最终结果,无需进行修正。

用十进制加法指令实现减1计数,可通过以下代码实现:

……

ADDA,#63H

DAA

……

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1