微机课后作业的参考答案.docx
《微机课后作业的参考答案.docx》由会员分享,可在线阅读,更多相关《微机课后作业的参考答案.docx(12页珍藏版)》请在冰豆网上搜索。
微机课后作业的参考答案
第88页
把30H放到R0中,即:
MOVR0,#30H;当直接复制程序到keilc中出现错误时,检查哪些标点符号,可以把解释去掉;为了在word看程序显得整洁,我加了空格,在keilc就不显得有那么整洁了,可以自己自行的调整;建议不要直接的复制,会出现提示不必要的错误!
当你重新的输入后,又没有错误了!
!
!
!
10>流程图:
结束
等待
是
否
R7-1=0?
把A中的数值放到R0中
然后,R0+1;A+1
初始化:
把30H放到R0中;
A中放00H;R7中放31H
开始
编程:
ORG0000H
AJMPSTART
START:
MOVR0,#30H
MOVA,#00H
MOVR7,#31H;用于设定循环的次数
LOOP:
MOV@R0,A
INCR0;实现R0+1
INCA;实现A+1
DJNZR7,LOOP
AJMP$
END
是
是
11>流程图
把5000H放到DPTR中;
把A中值放到5000H中
否
R7-1=0?
把50H中的内容放到A中
把A中的数实现自加;R1+1
50H放到R1中;
16放到R7;
否
R7-1=0?
把50H中的内容放到A;
把A中数值放到@DPTR中
然后;R1+1,A+1
初始化:
50H放到R1中;
把16放到R7;
4000H放到DPTR
开始
结束
编程:
ORG0000H
AJMPSTART
START:
MOVR1,#50H
MOVR7,#16H;设定循环的次数
MOVDPTR,#4000H
LOOP:
MOVA,@R1
MOVX@DPTR,A;把A中的内容放到片外
INCDPTR
INCR1
DJNZR7,LOOP
MOVR1,#50H
MOVA,@R1
MOVR7,#16
SUM:
INCR1
ADDA,@R1;实现求和
DJNZR7,SUM
MOVDPTR
MOVX@DPTR,A;把所求的和放到片外的5000H
AJMP$;等待
END
开始
12>流程图:
结束
把20H中的内容50H
是
否
60H-1=0
把20H中的内容与30H交换
是
CY置0
CY置1
否
比较20H与30H;是否20H大?
R0+1;
把@R0中内容放到30H
把20H放到R0中;把20H中的内容放到A中;把6放到60H中;把CY置1;
是
把TABLE中的数放到20H中
初始化:
把00H放到R1中;20H放到R0中;TABLE放到DPTR中;
把6放到R7中;
R7-1=0
是否放完?
否
编程:
ORG0000H
AJMPSTART
;*****************************************
;子程序,主要用来实现把最小值放到A中
COMPARE:
CJNEA,30H,LOOP1;比较
LOOP2:
JNBCY,RETURN
RET
RETURN:
MOVA,30H
RET
;******************************************
START:
MOVR1,#00
MOVR0,#20H
MOVDPTR,#TABLE
MOVR7,#6
;******************************************
;这个循环主要用来把TABLE中数都入20H中
LOOP:
MOVA,R1
MOVCA,@A+DPTR
MOV@R0,A
INCR1
INCR0
DJNZR7,LOOP
;*****************************************
MOVR0,#20H
MOVA,20H
MOV60H,#6;设置循环的次数
SETBCY;防止CY的初始值为0
LOOP1:
ACALLLOOP2
INCR0
MOV30H,@R0
DJNZ60H,COMPARE
MOV50H,A;把最小值放到50H中AJMP$
TABLE:
DB03H,43H,65H
DB0BCH,0ABH,01H
END
开始
13>流程图:
结束
等待
把30H中排好的数重新放到BLOCK中
否
是
是否比较完?
把00H置1
把这两个数交换
CY=0
否
是
否
把30H的内容放到A中;把C清零;R0自加1
把30H放到R0;把19放到R7;
把00H清零;
是否把数放完?
把BLOCK中的数放到30H中
初始化:
30H放到R0中;20放到R7;
BLOCK放到DPTR;
把两个相减,是否大于0?
编程:
ORG0000H
AJMPSTART
;******************************
;该子程序实现把数从小到大的排列(每一步的解释可以参考书85页)
SORTING:
CLR00H;互换标志清零
MOVR7,#19;设置比较的次数
MOVR0,#30H
LOOP1:
MOVA,@R0
MOV2BH,@R0
INCR0
MOV2AH,@R0
CLRC
SUBBA,@R0
JCNEXT
MOV@R0,2BH
DECR0
MOV@R0,2AH
INCR0
SETB00H
NEXT:
DJNZR7,LOOP1
JB00H,SORTING
RET
;*************************************
START:
MOVR0,#30H
MOVR7,#20;设置循环的次数
MOVDPTR,#BLOCK
;************************************
;把以片外BLOCK为首地址的数据,读到30H中
LOOP:
MOVA,#00H
MOVCA,@A+DPTR
MOV@R0,A
INCDPTR;
INCR0
DJNZR7,LOOP
;************************************
ACALLSORTING
MOVR7,#20
MOVDPTR,#BLOCK
MOVR0,#30H
;************************************
;实现把30H中排好序的数放到片外以BLOCK为首地址的区间内
LOOP3:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR7,LOOP3
;************************************
AJMP$
BLOCK:
DB02H,43H,65H,19H,0AH
DB03H,53H,63H,13H,0BH
DB04H,33H,64H,18H,0CH
DB05H,23H,46H,28H,0DH
END
开始
15>流程图:
是
结束
等待
否
R6-1=0?
否
R7-1=0?
把B中的内容放到R7中
把A中的内容放到R6中
调用延时子程序
初始化:
把40放到A中;
把249放到B中;
是
编程:
ORG0000H
AJMPSTART
DELAY:
MOVR6,A
D1:
MOVR7,B
DJNZR7,$
DJNZR6,D1
RET
START:
MOVA,#40H
MOVB,#249;用于设定延时的时间
ACALLDELAY
AJMP$
END
第115页:
10>
是
否
开始
检查定时间是否到了?
P1.1口取反
选择不是工作方式2时,就要重新赋定时器的初值
启动定时器
选择定时器;
设定定时的工作方式;
计算定时器的初值;
流程图:
清除溢出标志位
编程:
ORG0000H
AJMPSTART
START:
MOVTMOD,#10H;选择定时器1工作方式1
MOVTH1,#0FFH
MOVTL1,#06H;定时1ms的初值
SETBTR1;启动定时器
LOOP:
MOVTH1,#0FFH
MOVTL1,#06H;重装定时器的初值
JNBTF1,$;定时时间不到时
CPLP1.1;P1.1取反
CLRTF1;清除溢出标志位
;(利用查询时要软件清零)
AJMPLOOP
END