分支与循环程序设计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称分支及循环程序设计成绩

指导教师******

专业班级****** 姓名白*** 学号*******

联系电话********

一、任务要求

1.熟练掌握Keil环境下汇编语言程序的调试方法,加深对汇编

语言指令、机器码、寻址方式等基本内容的理解,掌握分支程

序和简单程序的设计及调试方法,了解并行IO口的使用。

2.设有8bits符号数X存于外部RAM单元,按以下方式计算后

的结果Y也存于外部RAM单元,请按要求编写完整程序。

3.利用51系列单片机设计一个24小时制电子时钟,电子时钟

的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩

BCD码的形式)。P3.0为低电平时开始计时,为高电平时停

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

率12MHz)。

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

十位、个位由P2口输出。利用P3.7状态选择加、减计数方

式。

2)利用P3口低四位状态控制开始和停止计数,控制方式自

定。

二、设计思路

1.先在外部RAM取数,然后判断该符号数是否为负数,若为负

数,则取相反数并存数;若为正数,则接着判断该数是否大于

等于64,若满足,则求平方并存数,先存低位,后存高位;

若小于64,则接着判断该数是否大于10,若满足,则求该数

的一半并存数;若小于等于10,则取相反数并存数。

2.第一步先编可以延时1S的子程序DELAY;接着判断P

3.O

是否满足开始计数条件,若不满足,则重复判断;若满足,则

对时分秒分别赋值,调用延时子程序,判断是否满足计时条件,若不满足,则重复判断直至满足;若满足,则秒钟自加一,循

环,判断秒钟循环满60次后出循环,对分钟自加一,然后继

续循环,最后判断分钟循环满60次后出循环,对时钟自加一,然后判断时钟循环满24则回到初值,时分秒重新赋值并重新

开始循环。

3.判断P3.7,若为1,则进行加一计数,若为0,则跳转至另一

程序进行减一计数;加一计数中,先取低位P1送A,自加一,送P1,判断是否有溢出,若有,则取高位P2送A,自加一,送P2,然后回判断循环;减一计数同理,即先取低位P1送A,自减一,送P1,判断是否有进位,若有,则取高位P2送A,自减一,送P2,然后回判断继续循环。

三、资源分配

1.2000H 片外RAM存数

2001H 存结果低八位

2002H 存结果高八位

B寄存器暂存结果高八位

2.P3.0 存计时判断位

R0、R1、R2 存延时子程序中各重循环的循环次数

R3、R4、R5 存时分秒的循环次数

P0、P1、P2 存时分秒的输出值

3.P1、P2 分别存十进制计数的低两位、高两位

P3.7 存计数方式的控制位

四、流程图

1、8 bit符号数的判断及计算

2、时钟设计

3.十进制加减一计数器

五、源代码(含文件头说明、语句行注释)1.8 bit符号数的判断及计算

ORG 0000H

LJMP START

ORG 1000H

START: MOV DPTR,#2000H;地址指针赋初值MOV A,#22

MOVX @DPTR,A

MOVX A,@DPTR;取数

JB ACC.7,DD

CJNE A,#64,AA;若A≠64,则转AA AA: JC BB;若A<64,则转BB

MOV B,A

MUL AB;求A的平方

INC DPTR

MOVX @DPTR,A;存结果低八位

INC DPTR

MOV A,B

MOVX @DPTR,A;存结果高八位

SJMP $

BB: CJNE A,#10,CC;若A≠10,则转CC CPL A

EE: INC DPTR

MOVX @DPTR,A

SJMP $

CC: JC DD;若A<10,则转DD

RR A;若A>10,则右移一位

SJMP EE

DD: CPL A

INC A

SJMP EE

END

2.时钟设计

ORG 0000H

LJMP START

ORG 1000H

START: JB P3.0,START;若为0,则开始计时RESTA: MOV R3,#24

MOV P0,#00H ;时钟赋初值

LOOP3: MOV R4,#60

MOV P1,#00H ;分钟赋初值

LOOP2: MOV R5,#60

MOV P2,#00H ;秒钟赋初值

LOOP1: ACALL DELAY;调用延时1S子程序LOOP: JB P3.0,LOOP;若为1,则停止计时MOV A,P2

ADD A,#01H

DA A

MOV P2,A

DJNZ R5,LOOP1;判断秒钟是否结束循环

MOV A,P1

ADD A,#01H

DA A

MOV P1,A

DJNZ R4,LOOP2;判断分钟是否结束循环

MOV A,P0

ADD A,#01H

DA A

MOV P0,A

DJNZ R3,LOOP3;判断时钟是否结束循环

LJMP RESTA

DELAY: MOV R0,#12

NOP

DELAY3:MOV R1,#130

DELAY2:MOV R2,#212

NOP

NOP

DELAY1:NOP

DJNZ R2,DELAY1

DJNZ R1,DELAY2

DJNZ R0,DELAY3

RET

END

相关文档
最新文档