单片机第二次试验报告分支程序设计文档格式.docx

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

单片机第二次试验报告分支程序设计文档格式.docx

《单片机第二次试验报告分支程序设计文档格式.docx》由会员分享,可在线阅读,更多相关《单片机第二次试验报告分支程序设计文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

单片机第二次试验报告分支程序设计文档格式.docx

需要注意的是,在小时、分、秒达到59时,下一次应该为零。

程序运行时修改P3.0的值可以实现暂停和继续的功能。

3.加一减一程序

先初始化P1和P2,然后当P3低四位均为0作为开始计数的标志,每次计数中插一个延时程序。

P3.7为0时进行加1计数:

先把低2位从P2中取出至A,对A进行ADD加一计数并进行十进制修正,然后存进P2;

再把高2位从P1取出至A,对A进行ADDC的加进位操作并十进行进制修正,然后存进P1。

P3.7为1时进行减一计数:

只需改用ADD指令加上1的补码即可,高2位在第二位为99时进行同样的操作,最后分别用P1和P2输出高2位和低2位。

即可实现所需功能。

三、资源分配

1.分段函数

根据题目的条件,首先,设该8位无符号数为30H,把片外地址4000H分配给它,把片外地址4001H和4002H分配给经分段函数计算得到的结果Y。

按位取反计算结果存于4001H单元,而除法计算结果的商与余数和乘方计算中结果的高、低八位分开存储于4001H-4002H单元。

用寄存器A,B来存放在乘除运算中所得的中间结果。

2.二十四小时制时钟

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

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

3.加、减1计数程序:

 

将十进制数的千位数和百位数存于P1,将十进制数的十位数和个位数存放于P2,P3.0至P3.3为是否进行计数的4个控制位,P3.7为选择加一或减一的计数方式的控制位 

R3,R4,R5为计数中的延时程序指定循环次数。

4、流程图

N

Y

N

NY

YN

2.时钟程序

Y

N

Y

5.源代码

1.分段函数

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVA,#30H;

将8位无符号数赋给A

MOVDPTR,#4000H;

定义数据指针

MOVX@DPTR,A;

将X存于片外RAM

CLRC;

将进位位清零

KIND1:

CJNEA,#14H,KIND2;

将A与14H比较,若不等于14H,跳转至KIND2

OUT1:

CPLA;

对A中内容取反

MOVDPTR,#4001H;

将计算结果存于片外地址4001H

SJMPDONE

KIND2:

JNCKIND3;

判断进位位CY是否为0,若为0,跳转至KIND3

SJMPOUT1;

否则跳转至OUT1

KIND3:

CLRC;

CJNEA,#28H,KIND4;

将A中内容与28H比较,若不等于28H,跳转至KIND4

OUT2:

MOVB,A;

将A中内容赋给B

MULAB;

计算X的平方,将结果高八位存于B,低八位存于A

MOVX@DPTR,A;

将结果低八位存于片外地址4001H

INCDPTR;

数据指针加一

MOVA,B;

将B中内容赋给A

将结果高八位存于片外地址4002H

KIND4:

JNCOUT2;

判断进位位是否为0,若为0,跳转至OUT2

SJMPOUT3;

否则跳转至OUT3

OUT3:

MOVB,#02H

DIVAB;

计算X/2,将商存于A,余数存于B

MOVDPTR,#4001H;

将商存于片外地址4001H

数据指针加1

MOVA,B

将余数存于片外地址4002H

DONE:

SJMP$

END

MOVR0,#00H

MOVP0,#00H;

时钟位清零

MOVP1,#00H;

分钟位清零

MOVP2,#00H;

秒钟位清零

START:

JBP3.0,START;

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

MOVR2,P2;

P2的值存入R2

CJNER2,#60H,DEL;

秒钟达到60继续,不足60跳转

秒钟清零

MOVA,P1

ADDA,#01H;

分钟位加1

DAA;

分钟位改为BCD码

MOVP1,A

MOVR1,P1;

P1的值存入寄存器R1

CJNER1,#60H,DEL;

分钟达到60继续,不足60跳转

分钟清零

MOVA,R0

时钟位加1

时钟位改为BCD码

MOVR0,A

MOVP0,A

CJNER0,#24H,DEL;

时钟达到24继续,不足24跳转

MOVR0,#00H

DEL:

MOVR7,#24;

延时程序

LOOP1:

MOVR6,#61

LOOP2:

MOVR5,#170

LOOP3:

NOP

NOP

DJNZR5,LOOP3

DJNZR6,LOOP2

DJNZR7,LOOP1

MOVA,P2

秒钟位加1

DAA

MOVP2,A

SJMPSTART

END

3.加一减一程序

MAIN:

MOVP1,#00H;

P1端口置零

MOVP2,#00H;

P2端口置零

MOVP3,#7FH;

P3端口置#7FH

JBP3.0,START

JBP3.1,START

JBP3.2,START

JBP3.3,START;

判断是否开始计时

LJMPDELAY;

跳转到延时子程序

DELAY:

MOVR7,#24

DEL1:

MOVR6,#61

DEL2:

MOVR5,#170

DEL3:

DJNZR5,DEL3

DJNZR6,DEL2

DJNZR7,DEL1;

延时1秒

JBP3.7,DOWN;

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

P3.7为1时,减1计数

LJMPUP

DOWN:

MOVA,P2

CLRC

SUBBA,#01H

MOVR1,A

ANLA,#0FH

MOVR7,A

MOVA,R1

ANLA,#0F0H

MOVA,P1

SUBBA,#00H

MOVR0,A

MOVR6,A

MOVA,R0

CJNER7,#0FH,LOOP1

MOVR7,#09H

LOOP1:

CJNER1,#0F0H,LOOP2

MOVR1,#90H

LOOP2:

CJNER6,#0FH,LOOP3

MOVR6,#09H

LOOP3:

CJNER0,#0F0H,LOOP4

MOVR0,#90H

LOOP4:

MOVA,R1

ADDA,R7

DAA

MOVP2,A

ADDA,R6

MOVP1,A

减1计数子程序

UP:

ADDA,#01H

ADDCA,#00H

LJMPDELAY;

加1计数子程序

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

1.分段函数

对于分段函数的问题,可以将X设为某一值,运行程序,观察各个寄存器及有关地址中内容,进行验证。

截图如下:

(1)X=30H

(2)X=0AH

(3)X=18H

经验证,所有结果正确,且运行程序过程中并未出现任何问题,故源程序正确

2.24小时时钟程序

附加:

思考题

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

举例说明。

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

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

答:

1.一是利用条件转移指令实现,如DJNZ,JNC等等

例如:

例如,判断两个单字节无符号数的大小(分别存于片内RAM的40H和41H单元)并把大数存入42H单元。

可以用判断CY的转移指令JNC来实现,程序如下:

JUDGE:

MOVA,40H

CLRC

SUBBA,41H

JNCLP

MOV42H,41H

RET

LP:

MOV42H,40H

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

当前位置:首页 > 工程科技 > 机械仪表

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

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