单片机报告分支与循环程序设计实验.docx

上传人:b****1 文档编号:1624730 上传时间:2022-10-23 格式:DOCX 页数:16 大小:644.30KB
下载 相关 举报
单片机报告分支与循环程序设计实验.docx_第1页
第1页 / 共16页
单片机报告分支与循环程序设计实验.docx_第2页
第2页 / 共16页
单片机报告分支与循环程序设计实验.docx_第3页
第3页 / 共16页
单片机报告分支与循环程序设计实验.docx_第4页
第4页 / 共16页
单片机报告分支与循环程序设计实验.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

单片机报告分支与循环程序设计实验.docx

《单片机报告分支与循环程序设计实验.docx》由会员分享,可在线阅读,更多相关《单片机报告分支与循环程序设计实验.docx(16页珍藏版)》请在冰豆网上搜索。

单片机报告分支与循环程序设计实验.docx

单片机报告分支与循环程序设计实验

一、任务要求

实验目的:

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

实验内容:

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

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

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

设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。

提高部分(选做):

a.实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。

利用P3.7状态选择加、减计数方式。

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

 

二、设计思路

实验一:

X存于片外RAM0070H单元,先对X的正负进行判断。

若为负数,则取反;若为正数,则用CJNE语句判断其与14H、28H的大小,若小于14H,取反;若小于28H,大于14H,则除2,;若大于28H,则平方。

若大于28H,其结果低四位存在片外RAM0071H单元,高四位存在0072H单元;若小于28H,大于14H,其结果的商存于片外RAM0071单元,余数存在0072单元;若小于14H,其结果存于片外RAM0071单元,片外RAM0072单元置零。

实验二:

先判断P3.0口的电平高低。

若为低电平,则开始计时;若为低电平,则停止计时。

设计一延时1s的程序,每满1s,秒数值加一,每满60s,分数值加一,每满60min,时数值加一。

时数值满24时,重新计数。

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

实验三(提高部分):

此处使P3口低四位全为一时开始计数。

先判断P3.7的状态,此处使若P3.7为0时进行加计数,先C清零,用ADD对P2加一,再用ADDC对P1加进位位,再用DAA对A进行BCD码修正;若P3.7为1时进行减计数,减计数后,再对P0、P1位进行BCD码修正。

特别是当P2为00H时,将P2赋值99H,再将P1减一,而当P1为00H时,将P1赋值99H即可。

三、资源分配

实验一:

数据X存于片外RAM0700单元;

对X分类:

若大于28H,其结果低四位存在片外RAM0071H单元,高四位存在0072H单元;若小于28H,大于14H,其结果的商存于片外RAM0071单元,余数存在0072

单元;若小于14H,其结果存于片外RAM0071单元,片外RAM0072单元置零。

实验二:

时钟时分秒分别存放于P1、P1、P3口,P0口是控制位。

寄存器R1、R2、R3存放1s延时程序的循环次数。

累加器A作为要输出端口的数据缓存。

实验三:

P3作为控制位,P3.7控制加、减计数,后四位控制是否开始。

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

四、流程图

实验一:

 

 

实验二:

 

实验三(提高实验):

 

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

实验一:

Filename:

实验一

Description:

8bits符号数X存于片外0700H,当X>=40时,取平方,高位存于片外RAM0701H,低位存于片外0702中;当20

Date:

2014.10.18

Designedby:

曹紫葳

Sourceused:

0700H:

片外RAM存储的数X

0701H:

平方结果的平方的低八位,除2结果的商,取反结果;

0702H:

平方结果的高八位,除2结果的余数。

ORG0000H

AJMPMAIN

ORG0100H

MAIN:

CLRA;累加器A清零

CLRC;进位位清零

MOVDPTR,#0700H;将X的值赋值给片外RAM0700单元

MOVXA,@DPTR

JBACC.7,STEP1

CJNEA,#14H,ON1;判断X与20的大小关系

STEP1:

CPLA;若X小于20,取反

MOVB,#0H

AJMPDONE

ON1:

JCSTEP1

CJNEA,#28H,ON2;判断X与40的大小关系

STEP2:

MOVB,A

MULAB;若A大于40,取A的平方

AJMPDONE

ON2:

JNCSTEP2

MOVB,#2

DIVAB;若A小于40大于20,取A的一半

DONE:

INCDPTR

MOVX@DPTR,A

INCDPTR

MOVA,B;将结果的低八位赋值给片外RAM0701单元

MOVX@DPTR,A;将结果的高八位赋值给片外RAM0702单元

SJMP$

END

实验二:

Filename:

实验二

Description:

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

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

Date:

2014.10.18

Designedby:

曹紫葳

Sourceused:

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

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

R3、R4、R5:

进行延时装载循环次数

 

ORG0000H

AJMPMAIN

ORG0100H

MAIN:

MOVP0,#00H;全体清零

MOVP1,#00H

MOVP2,#00H

MOVP3,#00H

MOVR0,#00H

MOVR1,#00H

MOVR2,#00H

MOVR3,#00H

LOOP:

JBP3.0,LOOP;通过判断P3.0判断是否开始运行时钟

SEC:

MOVA,R2

MOVP2,A

LCALLDELAY;1s延时

ADDA,#01H

DAA

MOVP2,A

MOVR2,A;输出秒数到P2

CJNEA,#60H,LOOP;每60s进1min

MIN:

MOVP2,#00H

MOVR2,#00H

MOVA,R1

MOVP1,A

ADDA,#01H

DAA

MOVP1,A

MOVR1,A;输出分钟数到P1

CJNEA,#60H,LOOP;每60min进1h

HOUR:

MOVR1,#00H

MOVP1,#00H

MOVA,R0

ADDA,#01H

DAA

MOVP0,A;输出小时数到P0

MOVR0,A

CJNEA,#24H,LOOP;每24h重新启动时钟程序

LJMPMAIN

DELAY:

MOVR3,#90;1s延时程序

DELAY1:

MOVR4,#18

DELAY2:

MOVR5,#153

DELAY3:

NOP

NOP

DJNZR5,DELAY3

NOP

NOP

DJNZR4,DELAY2

NOP

NOP

DJNZR3,DELAY1

NOP

NOP

NOP

NOP

NOP

RET

END

实验三(提高部分):

Filename:

实验一

Description:

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

利用P3.7状态选择加、减计数方式。

当P3.7为0时,执行加计数;当P3.7为1时,执行减计数。

利用P3口低四位状态控制开始和停止计数,当P3口低四位全为1时开始计数。

Date:

2014.10.18

Designedby:

曹紫葳

Sourceused:

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

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

P1口输出千位、百位

P2口输出十位、个位

累加器A、工作寄存器R0用于数据储存缓冲单元

ORG0000H

AJMPMAIN

ORG0100H

MAIN:

MOVP1,#00H

MOVP2,#00H

MOVP3,#00001111B

LOOP:

MOVA,P3

ORLA,#11110000B

CJNEA,#11111111B,LOOP;P3低四位为全0时开始计数

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

ADDX:

CLRC;加计数

MOVA,P2

ADDA,#1H

DAA

MOVP2,A

MOVA,P1

ADDCA,#0H

DAA;加计数十进制修正

MOVP1,A

AJMPLOOP

DECX:

MOVA,P2;减计数

CJNEA,#0H,DECX1

MOVP2,#99H

MOVA,P1

CJNEA,#0H,DECX2;当P1为0时,给其赋值99,再将P1减一

MOVP1,#99H

AJMPLOOP

DECX1:

CLRC;减计数十进制修正

MOVA,#9AH

SUBBA,#1H

MOVR0,A

MOVA,P2

ADDA,R0

DAA;减计数十进制修正

MOVP2,A

AJMPLOOP

DECX2:

CLRC

MOVA,#9AH

SUBBA,#1H

MOVR0,A

MOVA,P1

ADDA,R0

DAA;减计数十进制修正

MOVP1,A

AJMPLOOP

END

六、程序测试方法与结果

实验一:

结果如上图。

人为输入令X(即0700H单元)为0C。

已知0C小于14H,故0C取反为F3,存入0701H单元,且0702H单元清零;且DPTR中存储0702H这个数。

对照上图结果,验证是对的。

继续验证:

令X为17H。

已知17H小于28H,大于14H,故结果应为除2,商为0B,余数为01。

运行结果如下:

令X为46H。

已知46H大于28H,故结果为平方,低四位为24H,高四位为13H。

运行结果如下:

令X分别为14H、28H这两个分界值。

由函数关系可知,当X为14H时,结果取反,0701H应为EB,0702H应为0;当X为28H时,结果平方,0701H应为40,0702H应为06。

实际运行结果如下:

X=14H

X=28H

对比发现验证结果均是正确。

实验二:

先将P3口初值赋值00H,使时钟程序能正常启动。

在时钟程序正在运行时截图如下:

此时显示时间是3分45秒,即225秒

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

当前位置:首页 > 经管营销 > 销售营销

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

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