分支与循环程序设计实验讲解.doc
文本预览下载声明
实验名称 分支与循环程序设计实验
指导教师 罗志祥
专业班级 姓名 学号
联系电话
任务要求
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口低四位状态控制开始和停止计数,控制方式自定。
设计思路
第一题:先判断正负,若是负数直接放到取反区,若是正数则分别与20,40比较大小,根据比较结果放到各自的区间进行相应的运算。
第二题:先设置好计数器数值,然后对输出口清零,开始判断p3.0是否为0,为0开始计时,为1原地踏步。开始秒钟计时,R0减一循环,并调用延时程序,每次计数完用bcd码子程序转换,由p2输出秒钟,判断R0是否为0,不为0继续秒钟循环,为0则把p2清零后开始分钟计时。同理,每次计数完用bcd码子程序转换,由p1输出分钟,判断R1是否为0,不为0则跳回秒钟计时,为0则把p1清零开始时钟计时。再同理,每次计数完用bcd码子程序转换,由p0输出分钟,判断R2是否为0,不为0则跳回秒钟计时,为0则把p0清零跳出计时部分,再从头开始。
资源分配
第一题:
2000H 输入的自变量
2005H 若X≤20 为取反结果
若20<X<40 为X除以2的整数部分
若X≥40 为X平方后的低八位
2006H 若20<X<40 为X除以2的余数部分
若X≥40 为X平方后的高八位
DPTR 数据指针
第二题:
R0,R1,R2秒,分,时进位计数器
B秒钟计数
R3,R4分,时计数
P0,P1,P2时,分,秒输出
P3控制开关
R5,R6,R7延时子程序
流程图
第一题:
第二题:
源代码 (含文件头说明、语句行注释)
第一题:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV DPTR,#2000H
MOV A,#49
MOV B,#00H
MOVX @DPTR,A
JNB ACC.7,LOOP1 ;判断符号位,为0转到LOOP1
L1: CPL A ;A取反
SJMP STORE
LOOP1:CJNE A,#20,LOOP2 ;A不等于20跳转到LOOP2
SJMP L1 ;A等于20跳到L1
LOOP2:JC L1 ;c=1则A小于20
CJNE A,#40,LOOP3;c=0则A大于20
L2: MOV B,A
MUL AB ;求平方
SJMP STORE
LOOP3:JNC L2 ;A大于40跳到L2
MOV B,#02H ;c=1,A小于40令B=2
DIV AB ;求A/2
STORE:MOV DPTR,#2005H ;结果存放
MOVX @DPTR,A
INC DPTR
MOV A,B
MOVX @DPTR,A ;平方低位在前高位在后
SJMP $ ;踏步
END
第二题:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R0,#60
MOV R1,#60
MOV R2,#24 ;秒分时计数器赋初值
MOV R3,#0H
MOV R4,#0H ;分钟和时钟赋初值
MOV P0,#0H
MOV P1,#0H
MOV P2,#0H
MOV P3,#0H ;清零
START: JB P3.0,DONE ;p3为低电平开始计时,为高电平结束
ACALL DELAY
MOV A,B
ADD A,#01H
显示全部