1、分支实验微机实验报告实验名称 分支程序设计实验 专业班级 姓名 学号 序号 联系方式 一、 任务要求1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序。2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。a. 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。 b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。二、设计思路 1.分段函数
2、程序:将R1设置为标志位。从外部RAM取出X,先判断X与40的大小,再判断X与20的大小。当X大于等于40时,标志位设置为11H;X小于等于20时,标志位设置为01H;20X40?FLAG=11HNYFLAG=01HX=20?YFLAG=01HNX40,标志位置11H SJMP CALCULAT ;跳转至计算步骤JUDGETW: CJNE A,#20H,LESSTW ;若X小于40,判断是否等于20 MOV FLAG,#01H ;若X=20,标志位置01H SJMP CALCULAT ;跳转至计算步骤LESSTW: JNC MID ;若X不为20,判断是否小于20 MOV FLAG,#01H
3、;若小于20,标志位置01H SJMP CALCULAT ;跳转至计算步骤MID: MOV FLAG,#10H ;若20x40,标志位置10HCALCULAT: CJNE FLAG,#10H,CASE1 ;标志位与10H比较 MOV B,#2 DIV AB ;若为10H,X/2 SJMP STORE1 ;跳转至存储步骤CASE1: JNC CASE2 ;判断标志位是否小于10H CPL A ;若小于10H,A取非 SJMP STORE2 ;跳转至存储步骤CASE2: MOV B,A ;若标志位大于10H,X取平方 MUL ABSTORE1: MOV R2,A ;对乘除法存储 MOV A,B I
4、NC DPTR MOVX DPTR,A ;计算结果Y高位,余数存于1001H MOV A,R2STORE2: INC DPTR MOVX DPTR,A ;取非,低位,商存于1002H SJMP $ ;踏步 END 2.时钟程序: ; R0:时 ; R1:分 ; R2:秒 ; R3-R7:计时循环 ORG 0000H LJMP MAIN ORG 0200HMAIN: MOV R0,#0 ;初始化R0 MOV R1,#0 ;初始化R1 MOV R2,#0 ;初始化R2 MOV P0,#0 ;初始化P0 MOV P1,#0 ;初始化P1 MOV P2,#0 ;初始化P2STAY: JB P3.0,S
5、TAY ;判断P3.0电平SEC: LCALL DELAY ;调用计时函数 INC R2 ;秒加1 MOV P2,R2 ;P2口输出秒 CJNE R2,#3CH,STAY ;判断是否到60秒 MOV R2,#0 ;秒清0 INC R1 ;分加1 MOV P1,R1 ;P1口输出分 CJNE R1,#3CH,STAY ;判断是否到60分 MOV R2,#0 ;分清0 INC R0 ;小时加1 MOV P0,R0 ;P0口输出小时 CJNE R0,#18H,STAY ;判断是否到24小时 MOV R0,#0 ;小时清0 AJMP STAY DELAY: MOV R7,#28H ;延时5usLOOP
6、5: MOV R6,#05H NOP NOP LOOP4: MOV R5,#05H NOP LOOP3: MOV R4,#05H NOP LOOP2: MOV R3,#41H NOP LOOP1: NOP DJNZ R3,LOOP1 DJNZ R4,LOOP2 DJNZ R5,LOOP3 DJNZ R6,LOOP4 DJNZ R7,LOOP5 RET END3. 实现4位十进制加、减1计数程序:; R1:千位,百位; R2:十位,个位; 30H:暂存R2; R4:暂存A; P3.7=0,减,P3.7=1,加 ORG 0000H LJMP MAIN ORG 0200HMAIN: MOV A,#9
7、9H ;四位数赋值 MOV R1,A MOV A,#79H MOV R2,AJUDGE: JB P3.7,ADDUP ;若p3.7=1,加1;否则减1DEDUCE: DEC R2 ;R2减1 CJNE R2,#0FFH,ADJUST ;判断R2是否借位 MOV R2,#99H ;借位则置99 DEC R1 ;R1减1ADJUST: MOV 30H,R2 ;R2存于30H MOV A,#0H ;调整R2低位 ADD A,R2 DA A MOV R4,A CLR C SUBB A,30H ;判断是否调整 JZ NADJ MOV A,R4 SUBB A,#10H ;若调整,则对R2高位减1,低位补4
8、 ADD A,#04H MOV R4,ANADJ: MOV A,R4 MOV R2,A CJNE R1,#0,CONTNUE ;R1为0重置 SJMP MAIN ADDUP:INC R2 ;R2加1 MOV A,#0 ;调整R2 ADD A,R2 DA A MOV R2,A CJNE R2,#00H,CONTNUE ;判断是否进位 INC R1 ;进位则R1加1 MOV A,#0 ;调整R1 ADD A,R1 DA A MOV R1,A CJNE R1,#00H,CONTNUE ;若R1溢出 SJMP MAIN ;重置CONTNUE:MOV P1,R1 MOV P2,R2 SJMP JUDGE
9、 END4.P3口低四位控制计数:; R1:千位,百位; R2:十位,个位; 30H:暂存R2; R4:暂存A; R5:标志位; 若p3.0低二位不全为0且3,4位为0,则加1;低二位为0且3,4位不全为0,则减1;否则不改变 FLAG EQU R5 ORG 0000H LJMP MAIN ORG 0200HMAIN: MOV A,#99H ;四位数赋值 MOV R1,A MOV A,#09H MOV R2,AJUDGE1: MOV A,P3 ANL A,#0FH ;屏蔽P3高四位 CJNE A,#03H,COMP1 ;判断P3口值与3的关系 MOV FLAG,#01H ;若等于3,则标志位置
10、#01H SJMP JUDGE2 ;跳转至标志位判断COMP1: JNC COMP2 ;若小于3,标志位置#01H MOV FLAG,#01H SJMP JUDGE2 ;跳转至标志位判断COMP2: CJNE A,#0CH,COMP3 ;判断P3口值是否等于12 MOV FLAG,#11H ;若相等,则标志位置11H SJMP JUDGE2 ;跳转至标志位判断COMP3: CJNE A,#08H,COMP4 ;判断P3口值是否等于8 MOV FLAG,#11H ;若相等,则标志位置11H SJMP JUDGE2 ;跳转至标志位判断COMP4: CJNE A,#04H,REST ;判断P3口值是
11、否等于4 MOV FLAG,#11H ;若相等,则标志位置11H SJMP JUDGE2 ;跳转至标志位判断REST: MOV FLAG,#10H ;其他情况则标志位置10HJUDGE2: CJNE FLAG,#10H,COMP5;判断标志位与10H关系,相等则不加也不减 SJMP CONTNUE COMP5: JC ADDUP ;若为01H,则进入加法,否则进入减法DEDUCE: DEC R2 ;R2减1 CJNE R2,#0FFH,ADJUST ;判断R2是否借位 MOV R2,#99H ;借位则置99 DEC R1 ;R1减1ADJUST: MOV 30H,R2 ;R2存于30H MOV
12、 A,#0H ;调整R2低位 ADD A,R2 DA A MOV R4,A CLR C SUBB A,30H ;判断是否调整 JZ NADJ MOV A,R4 SUBB A,#10H ;若调整,则对R2高位减1,低位补4 ADD A,#04H MOV R4,ANADJ: MOV A,R4 MOV R2,A CJNE R1,#0,CONTNUE ;R1为0重置 SJMP MAIN ADDUP: INC R2 ;R2加1 MOV A,#0 ;调整R2 ADD A,R2 DA A MOV R2,A CJNE R2,#00H,CONTNUE ;判断是否进位 INC R1 ;进位则R1加1 MOV A,
13、#0 ;调整R1 ADD A,R1 DA A MOV R1,A CJNE R1,#00H,CONTNUE ;若R1溢出 SJMP MAIN ;重置CONTNUE:MOV P1,R1 MOV P2,R2 SJMP JUDGE1 END六、程序测试方法与结果、软件性能分析利用KeilC的单步调试与断点调试观察程序运行结果。程序能够完成预期功能。七、心得与体会 1)思考题:1 实现多分支结构程序的主要方法有哪些?举例说明。答:分支较少时,可以利用条件转移指令判断与临界值关系实现多分支结构。如本实验内容1。分支较多时,采用分支表实现多向分支。例如:根据R3的值控制8个分支程序。可利用如下程序: MOV DPTR,#JMPTAB MOV A,R3 ADD A,R3 JNC NADD INC DPHNADD: JMP A+DPTRJMPTAB:AJMP SUBR0 AJMP SUBR1 AJMP SUBR72 在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?怎样用十进制加法指令实现减1计数?答:十进制加一计数器在运算后需要调用BCD码调整程序对结果进行调整,而十六进制加一计数器则不用。 利用十进制加法指令实现减一计数: 设减数存放于R2中 MOV A,R2 ADD A,#0FFH DA A MOV R2,A2)实验体会:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1