单片机实验报告分支程序设计实验Word文档下载推荐.docx

上传人:b****7 文档编号:22003921 上传时间:2023-02-02 格式:DOCX 页数:19 大小:706.61KB
下载 相关 举报
单片机实验报告分支程序设计实验Word文档下载推荐.docx_第1页
第1页 / 共19页
单片机实验报告分支程序设计实验Word文档下载推荐.docx_第2页
第2页 / 共19页
单片机实验报告分支程序设计实验Word文档下载推荐.docx_第3页
第3页 / 共19页
单片机实验报告分支程序设计实验Word文档下载推荐.docx_第4页
第4页 / 共19页
单片机实验报告分支程序设计实验Word文档下载推荐.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机实验报告分支程序设计实验Word文档下载推荐.docx

《单片机实验报告分支程序设计实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机实验报告分支程序设计实验Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。

单片机实验报告分支程序设计实验Word文档下载推荐.docx

小于28H时,再与14H比较,大于14H时除二,否则取反。

地址存于片外0040H和0041H,低位存于0040H,高位存于0041H。

2.电子时钟

电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。

P3.0=0时开始计时。

秒满60进位,为了60秒时直接显示1分钟0秒,需先将A赋给P2,再加一,再与60H比较,看是否进位。

同理,分满60进位。

时满24重新开始,由于P0端口的位置错误,A与P0相互赋值时,需加中间变量RO。

3.双向计数

P3的底四位全为1时开始计数;

用P3.7状态控制加、减计数方式;

千位、百位由P1口输出,十位、个位由P2口输出(以压缩BCD码的形式)。

P3.7为1时加计数,需先将进位C清零,用ADD语句给P2加一,并用DA语句进行十进制修正;

再用ADDC语句给P1加一再十进制修正。

P3.7为0时减计数,需先判断P2是否为00H,不是00H则P2减一,是00H则给P2赋99H;

同理,再判断P1是否为00H,不是00H则P1减一,是00H则给P1赋99H。

延时可以用上面程序的延时1s子程序。

三、资源分配

初始数据X存于片外0010H;

取反和除二操作,结果都存于片外0040H中;

平方操作低位存于0040H中,高位存于0041H中。

2.电子时钟

P3.7为0时开始计数,为1时停止;

P2显示秒,P1显示分,P0显示时;

R3、R4、R5用于进行延时的装载循环次数。

3.双向计数

P1口显示千位、百,P2口显示十位、个位。

四、流程图

图1为分支计算程序流程图

图2为电子时钟程序流程图

图3为双向计数程序流程图

五、源代码(含文件头说明、资源使用说明、语句行注释)

1.分支计算

/*

Filename:

分支计算

Description:

8bits符号数X存于片外0010H,当X>

=40时,取平方,高位存于0040H,

低位存于片外0041H中;

当20<

X<

40时,除二,结果存于片外0040H中;

当X<

=20时,对X取反,结果存于片外0040H中。

Date:

2012.10.10

Designedby:

gxy

Sourceused:

0010H:

片外RAM存储的数X

0040H:

除二和取反结果、平方结果的平方的低八位

0041H:

平方结果的高八位

*/

ORG0000H

LJMPMAIN

ORG0010H

MAIN:

MOVDPTR,#0010H;

x存于片外0010H中

MOVXA,@DPTR

CLRC

CJNEA,#7FH,TO1;

与7FH比较,判断正负

SJMPPLACE1

TO1:

JNCPLACE3

CJNEA,#28H,TO2;

与28H比较

TO2:

JNCPLACE1

CJNEA,#14H,TO3;

与14H比较

SJMPPLACE3

TO3:

JNCPLACE2

SJMPPLACE3

PLACE1:

MOVB,A;

当x大于等于40时,取平方

MULAB

SJMPSAVE

PLACE2:

CLRC

RRCA;

当x大于20小于40时,通过右移实现X除以2

PLACE3:

CPLA;

当x小于等于20时,取反

SAVE:

MOVDPTR,#0040H

MOVX@DPTR,A;

低位存入片外0040H

MOVA,B

INCDPTR

MOVX@DPTR,A;

高位存入片外0041H

HERE:

SJMPHERE;

踏步

END

电子时钟

24小时电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。

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

P2显示秒,P1显示分,P0显示时

P3.7为0时开始计数,为1时停止

R3、R4、R5:

进行延时装载循环次数

ORG0000H

LJMPSTART

START:

MOVSP,#40H

MOVP0,#00H

MOVP1,#00H

MOVP2,#00H

MOVR0,#00H

MOVR1,#00H

MOVR2,#00H

WAIT:

JBP3.0,WAIT;

P3.0为0时开始,为1时停止

SEC:

MOVA,R2;

MOVP2,A;

将A值赋给P2端口

ADDA,#01H

DAA

MOVR2,A

ACALLDLY;

跳转到1s延时子程序

CJNEA,#60H,WAIT;

满60秒进位1分钟

MIN:

MOVR2,#00H;

MOVA,R1

ADDA,#01H

MOVP1,A;

将A值赋给P1端口

MOVR1,A

满60分钟进位1小时

HOUR:

MOVP2,#00H;

MOVP1,#00H

MOVA,R0

MOVP0,A;

将A值赋给P0端口

MOVR0,A

CJNEA,#24H,WAIT;

判断是否满24小时

SJMPSTART;

满24小时,重新开始计时

DLY:

MOVR4,#46;

延时1s,误差1us

L3:

MOVR5,#152

L1:

MOVR3,#70

L2:

DJNZR3,L2

DJNZR5,L1

DJNZR4,L3

RET

END

3.双向计数

/*

双向计数

4位十进制加、减1计数,千位、百位由P1口输出;

P3.7为1时加计数,为0时减计数。

P3的底四位全为1时开始计数。

P3.7为1时加计数,为0时减计数

P3的底四位全为1时开始计数

P1口输出千位、百位

P2口输出十位、个位由

*/

LJMPMAIN

MOVP3,#00H

MOVP2,#00H

MOVP1,#00H

ACALLDLY;

延时1s

MOVA,P3

ANLA,#0FH

CJNEA,#0FH,WAIT;

P3低四位全为1则开始计数

JBP3.7,INCREACE;

P3.7为1进行加计数

LJMPDECREACE;

P3.7为0进行减计数

INCREACE:

CLRC

MOVA,P2

ADDA,#01H

DAA;

P2十进制修正修正

MOVP2,A

MOVA,P1

ADDCA,#00H;

P1加上P2的进位

P1十进制修正修正

MOVP1,A

AJMPWAIT

DECREACE:

MOVA,P2

CJNEA,#0,DECREACE_1;

P2不为0时,P2减1

MOVP2,#99H;

P2为0时,向百位借位,减一为99H

MOVA,P1

CJNEA,#0,DECREACE_2;

由于借位,P1不为0时,P1减一

MOVP1,#99H;

P1为0时,减一为99H

AJMPWAIT

DECREACE_1:

;

十位个位减一

ADDA,#99H

DAA

MOVP2,A

DECREACE_2:

千位百位减一

ADDA,#99H

DAA

MOVP1,A

MOVR6,#70

DJNZR6,L2

END

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

1.分支计算

程序运行测试:

如图所示,在片外0010H中给X赋值7FH,运行结果在片外0040H和0041中显示,为013F

7FH取平方为3F01H,所以X执行取平方操作,正确。

在Register中

A和B都为3FH,因为执行代码

MOVB,A

MULAB

DPTR最后地址为0041H

与存储地址相符

分支功能测试:

X为7FH时,取平方,预期结果3F01

X为07H时,取反,预期结果

FB

X为15H时,除二,预期结果

0A

X为27H时,除二,预期结果

13

X为28H时,取平方,预期结果0640

X为14H时,取反,预期结果

EB

X为F9H时,取反,预期结果

06

X存于片外0010H中,取反和除二操作,结果都存于片外0040H中,平方操作低位存于0040H中,高位存于0041H中。

所得结果均符合分支计算的预期结果,而且在7FH、28H、14H这三个转折点计算结果也正确。

ProgramSize:

data=8.0xdata=0code=48

所以本程序性能良好,运行正常。

总体运行测试:

端口显示的是6分21秒,实际精确运行时间为381.00312500s,相差0.003125s

1s延迟子程序测试:

断点设置如下

两断点间运行时间为0.99999900s,说明1s延迟子程序误差为1us。

60秒时直接显示1分钟0秒测试:

由图可知,由00:

00:

59直接变为00:

01:

00,符合要求。

时钟误差测试:

如上图,运行一分钟,误差为0.0005s

如上图,运行一小时,误差为0.029422s

如上图,运行24小时,误差为0.705901s

data=8.0xdata=0code=81

程序稍加改进,还可以添加计天,甚至计月的功能

加法测试:

P3.7=1

如上图所示,从4799到4800,两端口间进位正常

如上图所示,从9999到0000再到0001,加法进位正常

减法测试:

P3.7=0

如上图,从0000到9999,减一借位正常

如上图,从9600到9599,减一,两端口间借位正常

data=8.0xdata=0code=86

七、思考题

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

举例说明。

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

当前位置:首页 > 考试认证 > 公务员考试

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

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