文档详情

分支与循环程序设计实验讲解.doc

发布:2016-04-25约2.8千字共9页下载文档
文本预览下载声明
实验名称 分支与循环程序设计实验 指导教师 罗志祥 专业班级 姓名 学号 联系电话 任务要求 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
显示全部
相似文档