分支实验文档格式.docx
- 文档编号:16604005
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:15
- 大小:20.01KB
分支实验文档格式.docx
《分支实验文档格式.docx》由会员分享,可在线阅读,更多相关《分支实验文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
若减到0,则对四位数重置。
最后将四位数由P1,P2输出。
4.P3口低四位控制计数:
当P3口低四位中D3,D2位为0,而D1,D0不全为0时,做加一运算,当P3口低四位中D1,D0位为0,而D3,D2不全为0时,做减一运算,其他情况不加也不减。
三、资源分配
1.分段函数程序:
1000H:
x
1001H:
Y高位,余数,取非结果
1002H:
Y低位,商
R1:
标志位
2.时钟程序:
R0:
时
分
R2:
秒
R3至R7:
计时循环
千位,百位
十位,个位
30H:
暂存R2
R4:
暂存A
P3.7=0,减,P3.7=1,加
R5:
四、流程图
开始
取出X值
Y
FLAG=11HH
X=40?
N
X>
40?
FLAG=11H
FLAG=01H
X=20?
20?
FLAG=10H
FLAG=10H?
X/2
X取非
X取平方
CY=0?
结果存入1001H,1002H
结束
P3.0=0?
调用延时子程序
R2加一(秒)
P2口输出
R2=3CH?
R1加一(分),R2=0
P1口输出
R1=3CH?
P0口输出
R0加一(时),R1=0
R0=0
R0=18H?
3.实现4位十进制加、减1计数程序:
P3.7=1?
R2减一
R2加一
是否出现借位?
对R2做BCD码调整
R2是否有进位?
R2=99H,R1减一
调整R2
R1=0?
R1加一
对R1做BCD码调整
R1是否溢出?
P1,P2输出四位数
屏蔽P3口高四位
P3口低四位是否等于3
CY=0?
P3口低四位是否等于12
P3口低四位是否等于8
P3口低四位是否等于4
CY=1?
P1,P2口输出四位数
五、源代码(含文件头说明、资源使用说明、语句行注释)
1.分段函数程序:
;
1000H:
FLAGEQUR1
ORG0000H
LJMPMAIN
ORG0200H
MAIN:
MOVDPTR,#1000H;
X存于1000H
MOVA,#25H
MOVX@DPTR,A;
给X赋值
MOVXA,@DPTR;
获取X
CJNEA,#40H,NOFORT;
判断X是否为40
MOVFLAG,#11H;
若X=40,标志位置11H
SJMPCALCULAT;
跳转至计算步骤
NOFORT:
JCJUDGETW;
X不为40,判断是否大于40
MOVFLAG,#11H;
若X>
40,标志位置11H
JUDGETW:
CJNEA,#20H,LESSTW;
若X小于40,判断是否等于20
MOVFLAG,#01H;
若X=20,标志位置01H
LESSTW:
JNCMID;
若X不为20,判断是否小于20
若小于20,标志位置01H
MID:
MOVFLAG,#10H;
若20<
x<
40,标志位置10H
CALCULAT:
CJNEFLAG,#10H,CASE1;
标志位与10H比较
MOVB,#2
DIVAB;
若为10H,X/2
SJMPSTORE1;
跳转至存储步骤
CASE1:
JNCCASE2;
判断标志位是否小于10H
CPLA;
若小于10H,A取非
SJMPSTORE2;
CASE2:
MOVB,A;
若标志位大于10H,X取平方
MULAB
STORE1:
MOVR2,A;
对乘除法存储
MOVA,B
INCDPTR
计算结果Y高位,余数存于1001H
MOVA,R2
STORE2:
INCDPTR
取非,低位,商存于1002H
SJMP$;
踏步
END
;
R3-R7:
ORG0000H
LJMPMAIN
ORG0200H
MOVR0,#0;
初始化R0
MOVR1,#0;
初始化R1
MOVR2,#0;
初始化R2
MOVP0,#0;
初始化P0
MOVP1,#0;
初始化P1
MOVP2,#0;
初始化P2
STAY:
JBP3.0,STAY;
判断P3.0电平
SEC:
LCALLDELAY;
调用计时函数
INCR2;
秒加1
MOVP2,R2;
P2口输出秒
CJNER2,#3CH,STAY;
判断是否到60秒
秒清0
INCR1;
分加1
MOVP1,R1;
P1口输出分
CJNER1,#3CH,STAY;
判断是否到60分
分清0
INCR0;
小时加1
MOVP0,R0;
P0口输出小时
CJNER0,#18H,STAY;
判断是否到24小时
MOVR0,#0;
小时清0
AJMPSTAY
DELAY:
MOVR7,#28H;
延时5us
LOOP5:
MOVR6,#05H
NOP
LOOP4:
MOVR5,#05H
LOOP3:
MOVR4,#05H
LOOP2:
MOVR3,#41H
LOOP1:
NOP
DJNZR3,LOOP1
DJNZR4,LOOP2
DJNZR5,LOOP3
DJNZR6,LOOP4
DJNZR7,LOOP5
RET
END
;
MOVA,#99H;
四位数赋值
MOVR1,A
MOVA,#79H
MOVR2,A
JUDGE:
JBP3.7,ADDUP;
若p3.7=1,加1;
否则减1
DEDUCE:
DECR2;
R2减1
CJNER2,#0FFH,ADJUST;
判断R2是否借位
MOVR2,#99H;
借位则置99
DECR1;
R1减1
ADJUST:
MOV30H,R2;
R2存于30H
MOVA,#0H;
调整R2低位
ADDA,R2
DAA
MOVR4,A
CLRC
SUBBA,30H;
判断是否调整
JZNADJ
MOVA,R4
SUBBA,#10H;
若调整,则对R2高位减1,低位补4
ADDA,#04H
NADJ:
MOVA,R4
CJNER1,#0,CONTNUE;
R1为0重置
SJMPMAIN
ADDUP:
INCR2;
R2加1
MOVA,#0;
ADDA,R2
DAA
MOVR2,A
CJNER2,#00H,CONTNUE;
判断是否进位
INCR1;
进位则R1加1
调整R1
ADDA,R1
MOVR1,A
CJNER1,#00H,CONTNUE;
若R1溢出
SJMPMAIN;
重置
CONTNUE:
MOVP1,R1
MOVP2,R2
SJMPJUDGE
R5:
若p3.0低二位不全为0且3,4位为0,则加1;
低二位为0且3,4位不全为0,则减1;
否则不改变
FLAGEQUR5
MOVA,#09H
JUDGE1:
MOVA,P3
ANLA,#0FH;
屏蔽P3高四位
CJNEA,#03H,COMP1;
判断P3口值与3的关系
MOVFLAG,#01H;
若等于3,则标志位置#01H
SJMPJUDGE2;
跳转至标志位判断
COMP1:
JNCCOMP2;
若小于3,标志位置#01H
MOVFLAG,#01H
COMP2:
CJNEA,#0CH,COMP3;
判断P3口值是否等于12
MOVFLAG,#11H;
若相等,则标志位置11H
COMP3:
CJNEA,#08H,COMP4;
判断P3口值是否等于8
MOVFLAG,#11H;
COMP4:
CJNEA,#04H,REST;
判断P3口值是否等于4
REST:
MOVFLAG,#10H;
其他情况则标志位置10H
JUDGE2:
CJNEFLAG,#10H,COMP5;
判断标志位与10H关系,相等则不加也不减
SJMPCONTNUE
COMP5:
JCADDUP;
若为01H,则进入加法,否则进入减法
SUBBA,#10H;
INCR2;
SJMPJUDGE1
六、程序测试方法与结果、软件性能分析
利用KeilC的单步调试与断点调试观察程序运行结果。
程序能够完成预期功能。
七、心得与体会
1)思考题:
1.实现多分支结构程序的主要方法有哪些?
举例说明。
答:
分支较少时,可以利用条件转移指令判断与临界值关系实现多分支结构。
如本实验内容1。
分支较多时,采用分支表实现多向分支。
例如:
根据R3的值控制8个分支程序。
可利用如下程序:
MOVDPTR,#JMPTAB
MOVA,R3
ADDA,R3
JNCNADD
INCDPH
NADD:
JMP@A+DPTR
JMPTAB:
AJMPSUBR0
AJMPSUBR1
…
AJMPSUBR7
2.在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?
怎样用十进制加法指令实现减1计数?
十进制加一计数器在运算后需要调用BCD码调整程序对结果进行调整,而十六进制加一计数器则不用。
利用十进制加法指令实现减一计数:
设减数存放于R2中
MOVA,R2
ADDA,#0FFH
MOVR2,A
2)实验体会:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分支 实验