单片机第二次试验报告——分支程序设计汇总 下载本文

内容发布更新时间 : 2024/9/30 2:15:55星期一 下面是文章的全部内容请认真阅读。

《微机实验》报告

实验名称 分支程序设计实验 专业班级 姓名 学号 序号 联系方式

一、任务要求

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

言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行IO口的使用。

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

?X2当X?40?Y??X/2当20?X?40?当X?20?X

2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。 提高部分(选做):

a. 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。 b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。

二、设计思路

1.分段函数设计

对于第一个任务,相当于设计一个分段函数程序,根据变量X的值所处的区间进行相应的计算。由学过的知识知道,可利用比较转移指令CJNE来判断X是否等于临界值20,40,若不等,再根据执行CJNE指令后的进位位CY的值来判断X与临界值的的大小关系,易知CY=0则X大于临界值,CY=1则X小于临界值;如此,再进行相应的计算。另外,除法计算中可能产生余数,商和余数应该分开存储,若乘方运算结果大于255,高八位与低八位应分开存储。 2. 24小时制时钟程序

本程序须可以构建两部分循环。首先构建一个三重循环实现“一秒延时”,循环体利用NOP指令(单字节指令,1μs)经多次循环达到延时一秒的效果。再利用已经构建好的“一秒延时”部分,设计计时系统的三重循环,秒(0-59)、分(0-59)、时(0-23)。需要注意的是,在小时、分、秒达到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为计数中的

延时程序指定循环次数。