第三章 MCS-51指令系统习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章 MCS -51指令系统
5 题 分析下面程序段的执行功能。
CLR A
MOV R2, A
MOV R7, #4
LOOP: CLR C
MOV A, R0
RLC A
MOV R0, A
MOV A, R1
RLC A
MOV R1, A
MOV A, R2
RLC A
MOV R2, A
DJNZ R7, LO OP
SJMP $ 答:将R2:R1:R0所表示的24位二进制数左移4位。
(相当×16)
6 题 设系统晶振为12MHZ ,阅读下列程序,分析其功能。
START : SETB P1.0
NEXT: MOV 30H, #10
LOOP2: MOV 31H, #0FAH
LOOP1: NOP
NOP
DJNZ 31H, LOOP1
DJNZ 30H, LOOP2
CPL P1.0
AJMP NEXT
SJMP $
答:((2+1+1)*250+2+2)*10+2=10.042(ms) 在P1.0引脚上输出周期为20ms
的方波。
7 题 阅读下列程序,分析其功能。
MOV R7, #10
MOV A, #30H
MOV DPTR, #2000H
LOOP : MOVX @DPTR, A
INC A
INC DPL
DJNZ R7, LOOP
SJMP
$
R2 R1
R0 0 0 0 0
答:在外部数据存储器中的以下地址内存放数据:
(2000H)=30H
(2001H)=31H
(2002H)=32H
┇┇
(2009H)=39H
8 题简述下列程序段完成的功能,程序完成后SP指针应指向哪里?
MOV SP, #2FH
MOV DPTR, #2000H
MOV R7, #50H
NEXT: MOVX A, @DPTR
PUSH A
INC DPL
DJNZ R7, NEXT
SJMP $
答:以内部存储器地址30H作为栈底,从30H开始一直到7FH依次存放外部数据存储器中2000H一直到204FH地址中的数据。
7FH作为栈顶。
程序完成后SP=7FH。
9 题分析下列程序段执行结果,程序执行完后,SP指向哪里?
MOV SP, #3FH
MOV R0, #40H
MOV R7, #10H
NEXT: POP A
MOV @R0, A
DEC R0
DJNZ R7, NEXT
SJMP $
答:将栈中3FH,3EH一直到30H地址中的内容依次放入40H,3FH,…,31H单元中。
执行完后SP=2FH。
10 题分析下列程序段执行结果。
XCH A, 30H
MOV B, A
ANL A, #0FH
MOV 33H, A
MOV A, B
SW AP A
ANL A, #15
MOV 34H, A
SJMP $
答:将30H单元中的数的高四位放入34H中,低四位放入33H中。
14 题阅读(1)(2)(3)程序段,分析其功能。
运算结果存在哪里?
(1) MOV A, R2
ADD A, R0
MOV 30H, A
MOV A, R3
ADDC A, R1
MOV 31H, A
MOV A, #0
ADDC A, #0
MOV 32H, A
SJMP $
(2) CLR C
MOV A, R4
SUBB A, R2
MOV R0, A
MOV A, R5
SUBB A, R3
MOV R1, A
(3) MOV A, R1
MOV B, R0
MUL AB
MOV 30H, A
MOV 31H, B
MOV A, R2
MOV B, R0
MUL AB
ADD A, 31H
MOV 31H, A
MOV A, B
ADDC A, #0
MOV 32H, 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等伪指令重新编写该程序段。
MOV P1, #0FH
MOV C, P1.0
ANL C, P1.1
CPL C
MOV ACC.0, C
MOV C, P1.2
ORL C, /P1.3
ORL C, ACC.0
MOV F, C
SJMP $
答:电路图如下:
逻辑表达式:
重新整理编写程序如下:
ORG 0000H
U BIT P1.0
V BIT P1.1
W BIT P1.2
X BIT P1.3
MOV C, U
ANL C, V
CPL C
MOV ACC.0, C
MOV C, W
ORL C, /X
ORL C, ACC.0
MOV F, 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)MOV C, P1.3
ANL C, ACC.2
MOV ACC.0, C
MOV C, B.5
ANL C, P1.1
ORL C, ACC.0
MOV PSW.5, C
(2)MOV C, P1.5
ANL C, B.4
MOV ACC.0, C
MOV C, ACC.7
ANL C, P1.0
ORL C, ACC.0
CPL C
MOV PSW.5, C
第四章汇编语言程序设计
1 题若晶振为12MHz,试编制延时2ms和1s子程序。
答:延时2ms:
DELY: MOV R7, #10
DLY0: MOV R6, #98
NOP
DLY1: DJNZ R6, DLY1
DJNZ R7, DLY0
RET
延时1s:
DELY: MOV R0, #50
LP11: MOV R1, #100
LP22: MOV R2, #100
LP33: DJNZ R2, LP33
DJNZ R1, LP22
DJNZ R0, LP11
RET
4 题试求20H和21H单元中16位带符号二进制补码数的绝对值,并送回20H和21H单元,高位在先,低位在后。
答:方法一:
先判断符号位,若为0则不作任何处理(因为正数的补码数与原数相同,
而0的补码数就是0)。
若符号位为1,则用0减去该数即可。
编程如下:ORG 0000H
MOV A, 20H
JNB ACC.7, DONE
CLR C
CLR A
SUBB A, 21H
MOV 21H, A
CLR A
SUBB A, 20H
MOV 20H, A
DONE: SJMP $
END
方法二:可用变反加“1”来完成。
ORG 0000H
MOV A, 20H
JNB ACC.7, DONE
CPL A
MOV 20H, A
MOV A, 21H
CPL A
MOV 21H, A
CLR C
MOV A, 21H
ADD A, #1
MOV 21H, A
MOV A, 20H
ADDC A, #0
MOV 20H, A
DONE: SJMP $
END
5题试求内部RAM 30~37H单元8个无符号数的算术平均值,结果存入38H单元。
答:方法一:相加后和放在R3:38H中,然后将结果整体右移3位,得数放在38H单元中。
ORG 0000H
START: MOV R7, #07H
MOV R3, #00H
MOV A, 30H
MOV R0, #31H
LOOP: ADD A, @R0
JNC NEXT
INC R3
NEXT: INC R0
DJNZ R7, LOOP
MOV 38H, A
MOV R7, #3
LOOP1: CLR C
MOV A, R3
RRC A
MOV R3, A
MOV A, 38H
RRC A
MOV 38H, A
DJNZ R7, LOOP1
SJMP $
END
方法二:相加后和放在R3:38H中,然后将R3中的数乘以25,将38H中的数除以23,然后将两个结果相加,放入38H单元中。
ORG 0000H
START: MOV R7, #07H
MOV R3, #00H
MOV A, 30H
MOV R0, #31H
LOOP: ADD A, @R0
JNC NEXT
INC R3
NEXT: INC R0
DJNZ R7, LOOP
MOV 38H, A
PR: MOV A, R3
MOV B, #32
MUL AB
MOV R3, A
MOV A, 38H
MOV B, #8
DIV AB
ADD A, R3
MOV 38H, A
6题试编一数据块搬迁程序。
将外部RAM 2000H~204FH单元中的数,移入内部RAM 30H~7FH单元中。
编程如下:
ORG 0000H
MOV R0, #50H
MOV R1, #30H
MOV DPTR, #2000H
LP1: MOVX A, @DPTR
MOV @R1, A
INC R1
INC DPTR
DJNZ R0, LP1
END
第五章MCS-51定时/计数器、串行口及中断系统
31题阅读T0、T1初始化程序,回答右边几个问题(设主频为6MHZ)
MOV A, #11H
MOV TMOD, A
MOV TH0, #9EH
MOV TL0, #58H
MOV TH1, #0F0H
MOV TL1, #60H
CLR PT0
SETB PT1
SETB ET0
SETB ET1
SETB EA
*MOV A, #50H
*MOV TCON, A
┇┇
①T0, T1各用何种方式工作?
几位计数器?
②T0, T1各自定时时间或计数次数是多少?
③T0, T1的中断优先级?
④T0, 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;试编写一存储器诊断程序(诊断到某片)。
答:编程如下:
MOV DPTR, #0000H
MOV R0, #31H ;存放诊断结果
LP1: MOV A, #0
MOVX @DPTR, A
MOVX A, @DPTR
JNZ ERR
MOV A, #0FFH
MOVX @DPTR, A
MOVX A, @DPTR
CPL A
JNZ ERR
INC1: INC DPTR
MOV A, #3FH
CJNE A, DPH, LP1
MOV A, #0FFH
CJNE A, DPL, LP1
SJMP $
ERR: PUSH DPL
POP ACC ;存放出错点的地址
MOV @R0, A
INC R0
PUSH DPH
POP ACC
MOV @R0, A
INC R0
SJMP INC1
END
11题 试设计以8031为主机,用74LS138为译码器,采用1片27128作ROM ,地址为0000H ~3FFFH ;采用2片6264作RAM ,4000H ~7FFFH 的扩展系统(加1个与门),地址不允许重叠,画出电路图。
如果RAM 地址为8000H ~BFFFH 或C0000H ~FFFFH ,2片6264的片选CE 端与译码器的输出应如何连接?
解:先把所有参与译码的地址列出:
8031: P27 P26 P25 P24 P23 P22 P21 P20 P07 ~ P00
存储器地址:A15A14A13 A12A11A10 A9 A8 A7 ~ A0
这些地址是存储器芯片的地址 这三位地址参与片选 译码(作138的输入)
每
个
片
选
端
都
是
8KB
18题8155与8031的连接如图6-28所示。
①若将8155的PA0~PA7与PB0~PB7用跨接线连接,C口的PC0~PC5接6个发光二极
管,试编制I/O口诊断程序,即从B口输出数据,经A口读回,若正确则C口发光二极管左循环点亮否则同时点亮。
②试编制8155 RAM诊断程序,并记录出错地址。
③设8155的TIN接2MHz时钟,试编制定时5ms的定时程序,并从TOUT输出一单次方
波。
答:①设C口高电平时二极管发光
MOV DPTR, #7F00H
MOV A, #01001110B
MOVX @DPTR, A
MOV DPTR, #7F02H
MOV A, #01010101B ;测试数据
MOVX @DPTR, A
MOV DPTR, #7F01H
MOVX A, @DPTR
CJNE A, #01010101B, LP
LP3: MOV A, #1
MOV R7, #6
MOV DPTR, #7F03H
LP1: MOVX @DPTR, A
RL A
LCALL DLY
DJNZ R7, LP1
SJMP LP3
LP: MOV A, #0FFH
MOV DPTR, #7F03H
MOVX @DPTR, A
SJMP $
DLY: MOV R0, #50 ;12MHz 延时1s
L1: MOV R1, #100
L2: MOV R2, #100
L3: DJNZ R2, L3
DJNZ R1, L2
DJNZ R0, L1
RET
11。