第三章 MCS51指令系统习题答案.docx
《第三章 MCS51指令系统习题答案.docx》由会员分享,可在线阅读,更多相关《第三章 MCS51指令系统习题答案.docx(18页珍藏版)》请在冰豆网上搜索。
第三章MCS51指令系统习题答案
第三章MCS-51指令系统
5题分析下面程序段的执行功能。
CLRA
R2
MOVR2,A
R0
R1
MOVR7,#4
LOOP:
CLRC
0000
MOVA,R0
RLCA
MOVR0,A
MOVA,R1
RLCA
MOVR1,A
MOVA,R2
RLCA
MOVR2,A
DJNZR7,LOOP
SJMP$
答:
将R2:
R1:
R0所表示的24位二进制数左移4位。
(相当×16)
6题设系统晶振为12MHZ,阅读下列程序,分析其功能。
START:
SETBP1.0
NEXT:
MOV30H,#10
LOOP2:
MOV31H,#0FAH
LOOP1:
NOP
NOP
DJNZ31H,LOOP1
DJNZ30H,LOOP2
CPLP1.0
AJMPNEXT
SJMP$
答:
((2+1+1)*250+2+2)*10+2=10.042(ms)在P1.0引脚上输出周期为20ms
的方波。
7题阅读下列程序,分析其功能。
MOVR7,#10
MOVA,#30H
MOVDPTR,#2000H
LOOP:
MOVX@DPTR,A
INCA
INCDPL
DJNZR7,LOOP
SJMP$
答:
在外部数据存储器中的以下地址内存放数据:
(2000H)=30H
(2001H)=31H
(2002H)=32H
┇┇
(2009H)=39H
8题简述下列程序段完成的功能,程序完成后SP指针应指向哪里?
MOVSP,#2FH
MOVDPTR,#2000H
MOVR7,#50H
NEXT:
MOVXA,@DPTR
PUSHA
INCDPL
DJNZR7,NEXT
SJMP$
答:
以内部存储器地址30H作为栈底,从30H开始一直到7FH依次存放外部数据存储器中2000H一直到204FH地址中的数据。
7FH作为栈顶。
程序完成后SP=7FH。
9题分析下列程序段执行结果,程序执行完后,SP指向哪里?
MOVSP,#3FH
MOVR0,#40H
MOVR7,#10H
NEXT:
POPA
MOV@R0,A
DECR0
DJNZR7,NEXT
SJMP$
答:
将栈中3FH,3EH一直到30H地址中的内容依次放入40H,3FH,…,31H单元中。
执行完后SP=2FH。
10题分析下列程序段执行结果。
XCHA,30H
MOVB,A
ANLA,#0FH
MOV33H,A
MOVA,B
SWAPA
ANLA,#15
MOV34H,A
SJMP$
答:
将30H单元中的数的高四位放入34H中,低四位放入33H中。
14题阅读
(1)
(2)(3)程序段,分析其功能。
运算结果存在哪里?
(1)MOVA,R2
ADDA,R0
MOV30H,A
MOVA,R3
ADDCA,R1
MOV31H,A
MOVA,#0
ADDCA,#0
MOV32H,A
SJMP$
(2)CLRC
MOVA,R4
SUBBA,R2
MOVR0,A
MOVA,R5
SUBBA,R3
MOVR1,A
(3)MOVA,R1
MOVB,R0
MULAB
MOV30H,A
MOV31H,B
MOVA,R2
MOVB,R0
MULAB
ADDA,31H
MOV31H,A
MOVA,B
ADDCA,#0
MOV32H,A
SJMP$
答:
(1)将R3:
R2和R1:
R0中的两个16位数相加,结果存放在32H:
31H:
30H中。
(2)用R5:
R4中的16位数减去R3:
R2中16位数,结果存放在R1:
R0中。
(3)R2:
R1中的16位数乘以R0中的数,结果存放在32H:
31H:
30H中。
23题有四个变量U、V、W、X分别从P1.0~P1.3输入,阅读如下程序,写出逻辑表达式并画出逻辑电路图。
请使用ORG、END、BIT等伪指令重新编写该程序段。
MOVP1,#0FH
MOVC,P1.0
ANLC,P1.1
CPLC
MOVACC.0,C
MOVC,P1.2
ORLC,/P1.3
ORLC,ACC.0
MOVF,C
SJMP$
答:
电路图如下:
逻辑表达式:
重新整理编写程序如下:
ORG0000H
UBITP1.0
VBITP1.1
WBITP1.2
XBITP1.3
MOVC,U
ANLC,V
CPLC
MOVACC.0,C
MOVC,W
ORLC,/X
ORLC,ACC.0
MOVF,C
SJMP$
END
24题用布尔指令,求解逻辑方程。
(1)PSW.5=P1.3∧ACC.2∨B.5∧P1.1
(2)PSW.5=P1.5∧B.4∨ACC.7∧P1.0
答:
(1)MOVC,P1.3
ANLC,ACC.2
MOVACC.0,C
MOVC,B.5
ANLC,P1.1
ORLC,ACC.0
MOVPSW.5,C
(2)MOVC,P1.5
ANLC,B.4
MOVACC.0,C
MOVC,ACC.7
ANLC,P1.0
ORLC,ACC.0
CPLC
MOVPSW.5,C
第四章汇编语言程序设计
1题若晶振为12MHz,试编制延时2ms和1s子程序。
答:
延时2ms:
DELY:
MOVR7,#10
DLY0:
MOVR6,#98
NOP
DLY1:
DJNZR6,DLY1
DJNZR7,DLY0
RET
延时1s:
DELY:
MOVR0,#50
LP11:
MOVR1,#100
LP22:
MOVR2,#100
LP33:
DJNZR2,LP33
DJNZR1,LP22
DJNZR0,LP11
RET
4题试求20H和21H单元中16位带符号二进制补码数的绝对值,并送回20H和21H单元,高位在先,低位在后。
答:
方法一:
先判断符号位,若为0则不作任何处理(因为正数的补码数与原数相同,而0的补码数就是0)。
若符号位为1,则用0减去该数即可。
编程如下:
ORG0000H
MOVA,20H
JNBACC.7,DONE
CLRC
CLRA
SUBBA,21H
MOV21H,A
CLRA
SUBBA,20H
MOV20H,A
DONE:
SJMP$
END
方法二:
可用变反加“1”来完成。
ORG0000H
MOVA,20H
JNBACC.7,DONE
CPLA
MOV20H,A
MOVA,21H
CPLA
MOV21H,A
CLRC
MOVA,21H
ADDA,#1
MOV21H,A
MOVA,20H
ADDCA,#0
MOV20H,A
DONE:
SJMP$
END
5题试求内部RAM30~37H单元8个无符号数的算术平均值,结果存入38H单元。
答:
方法一:
相加后和放在R3:
38H中,然后将结果整体右移3位,得数放在38H单元中。
ORG0000H
START:
MOVR7,#07H
MOVR3,#00H
MOVA,30H
MOVR0,#31H
LOOP:
ADDA,@R0
JNCNEXT
INCR3
NEXT:
INCR0
DJNZR7,LOOP
MOV38H,A
MOVR7,#3
LOOP1:
CLRC
MOVA,R3
RRCA
MOVR3,A
MOVA,38H
RRCA
MOV38H,A
DJNZR7,LOOP1
SJMP$
END
方法二:
相加后和放在R3:
38H中,然后将R3中的数乘以25,将38H中的数除以23,然后将两个结果相加,放入38H单元中。
ORG0000H
START:
MOVR7,#07H
MOVR3,#00H
MOVA,30H
MOVR0,#31H
LOOP:
ADDA,@R0
JNCNEXT
INCR3
NEXT:
INCR0
DJNZR7,LOOP
MOV38H,A
PR:
MOVA,R3
MOVB,#32
MULAB
MOVR3,A
MOVA,38H
MOVB,#8
DIVAB
ADDA,R3
MOV38H,A
6题试编一数据块搬迁程序。
将外部RAM2000H~204FH单元中的数,移入内部RAM30H~7FH单元中。
编程如下:
ORG0000H
MOVR0,#50H
MOVR1,#30H
MOVDPTR,#2000H
LP1:
MOVXA,@DPTR
MOV@R1,A
INCR1
INCDPTR
DJNZR0,LP1
END
第五章MCS-51定时/计数器、串行口及中断系统
31题阅读T0、T1初始化程序,回答右边几个问题(设主频为6MHZ)
MOVA,#11H
MOVTMOD,A
MOVTH0,#9EH
MOVTL0,#58H
MOVTH1,#0F0H
MOVTL1,#60H
CLRPT0
SETBPT1
SETBET0
SETBET1
SETBEA
*MOVA,#50H
*MOVTCON,A
┇┇
1T0,T1各用何种方式工作?
几位计数器?
2T0,T1各自定时时间或计数次数是多少?
3T0,T1的中断优先级?
4T0,T1的中断矢量地址?
最后两条带*号的指令功能是什么?
µ
答:
①T0、T1都以方式1工作,16位计数器。
②T0的定时时间=2*(M-定时初值)=2*[65536-(9E58)16]=2*[65536-40536]
=50000(微秒)=0.05秒
T1的定时时间=2*(M-定时初值)=2*[65536-(F060)16]=2*[65536-61536]
=8000(微秒)=0.008秒
③T0设为低优先级,T1设为高优先级。
④T0的中断矢量地址:
000BH
T1的中断矢量地址:
001BH
⑤TCON的内容:
01010000
作用:
TR1和TR0被置1,使计数器T0和T1启动。
第六章单片机系统扩展设计
13题若用8片6116构成的外部数据存储器,地址为0000H~3FFFH;试编写一存储器诊断程序(诊断到某片)。
答:
编程如下:
MOVDPTR,#0000H
MOVR0,#31H;存放诊断结果
LP1:
MOVA,#0
MOVX@DPTR,A
MOVXA,@DPTR
JNZERR
MOVA,#0FFH
MOVX@DPTR,A
MOVXA,@DPTR
CPLA
JNZERR
INC1:
INCDPTR
MOVA,#3FH
CJNEA,DPH,LP1
MOVA,#0FFH
CJNEA,DPL,LP1
SJMP$
ERR:
PUSHDPL
POPACC;存放出错点的地址
MOV@R0,A
INCR0
PUSHDPH
POPACC
MOV@R0,A
INCR0
SJMPINC1
END
11题试设计以8031为主机,用74LS138为译码器,采用1片27128作ROM,地址为0000H~3FFFH;采用2片6264作RAM,4000H~7FFFH的扩展系统(加1个与门),地址不允许重叠,画出电路图。
如果RAM地址为8000H~BFFFH或C0000H~FFFFH,2片6264的片选CE端与译码器的输出应如何连接?
解:
先把所有参与译码的地址列出:
这些地址是存储器芯片的地址
这三位地址参与片选
译码(作138的输入)
8031:
P27P26P25P24P23P22P21P20P07~P00
存储器地址:
A15A14A13A12A11A10A9A8A7~A0
每
个
片
选
端
都
是
8KB
0
0
0
Y0
0000H~1FFFH
0
0
1
Y1
2000H~3FFFH
0
1
0
Y2
4000H~5FFFH
0
1
1
Y3
6000H~7FFFH
1
0
0
Y4
8000H~9FFFH
1
0
1
Y5
A000H~BFFFH
1
1
0
Y6
C000H~DFFFH
1
1
1
Y7
E000H~FFFFH
18题8155与8031的连接如图6-28所示。
1若将8155的PA0~PA7与PB0~PB7用跨接线连接,C口的PC0~PC5接6个发光二极管,试编制I/O口诊断程序,即从B口输出数据,经A口读回,若正确则C口发光二极管左循环点亮否则同时点亮。
2试编制8155RAM诊断程序,并记录出错地址。
3设8155的TIN接2MHz时钟,试编制定时5ms的定时程序,并从TOUT输出一单次方波。
答:
①设C口高电平时二极管发光
MOVDPTR,#7F00H
MOVA,#01001110B
MOVX@DPTR,A
MOVDPTR,#7F02H
MOVA,#01010101B;测试数据
MOVX@DPTR,A
MOVDPTR,#7F01H
MOVXA,@DPTR
CJNEA,#01010101B,LP
LP3:
MOVA,#1
MOVR7,#6
MOVDPTR,#7F03H
LP1:
MOVX@DPTR,A
RLA
LCALLDLY
DJNZR7,LP1
SJMPLP3
LP:
MOVA,#0FFH
MOVDPTR,#7F03H
MOVX@DPTR,A
SJMP$
DLY:
MOVR0,#50;12MHz延时1s
L1:
MOVR1,#100
L2:
MOVR2,#100
L3:
DJNZR2,L3
DJNZR1,L2
DJNZR0,L1
RET