- 存储器的地址范围是0000H~0FFFH,它的容量为( D )。
- (A) 1KB
- (B) 2KB
- (C) 3KB
- (D) 4KB
- 解析: 存储容量 = 地址范围 + 1。地址范围是
0FFFH - 0000H = 0FFFH
。所以总的地址数量是0FFFH + 1 = 1000H
。1000H
转换为十进制是1 * 16^3 = 4096
。因为1KB = 1024
字节,所以4096 / 1024 = 4KB
。
- 如果(A)=86H, (PSW)=80H,则执行RRC A指令后( A )
- (A) C3H
- (B) B3H
- (C) 0DH
- (D) 56H
- 解析:
RRC A
是带进位的循环右移指令。 - 初始状态:A = 86H =
1000 0110
B。PSW = 80H,表示CY(进位标志位,PSW.7)= 1。 - 执行
RRC A
:A的内容整体向右移动一位,原A的最低位(bit 0)移到CY位,原CY位的值移到A的最高位(bit 7)。 - 过程:A的最低位
0
移入CY,所以CY变为0。原CY的值1
移入A的最高位。A的其他位右移。结果A变为1100 0011
B,即C3H。
- 如果(P0)=65H,则当
CPL P0.2
SETB C
MOV P0.4, C
执行后(P0)=( C ) - (A) 61H
- (B) 75H
- (C) 71H
- (D) 17H
- 解析:
- 初始状态:P0 = 65H =
0110 0101
B。 CPL P0.2
:将P0口的第2位(P0.2)取反。P0.2原来是1
,取反后变为0
。此时P0 =0110 0001
B = 61H。SETB C
:将进位标志位CY置1。MOV P0.4, C
:将CY位的值赋给P0.4。P0.4变为1
。此时P0 =0111 0001
B = 71H。
- ( D )指令是MCS-51指令系统中,执行时间最长的指令。
- (A) 比较转移
- (B) 循环转移
- (C) 增减量
- (D) 乘除法
- 解析: 在标准的MCS-51指令系统中,乘法指令
MUL AB
和除法指令DIV AB
都需要4个机器周期,是执行时间最长的指令。大部分指令需要1或2个机器周期。
- 8031单片机中,将累加器A中的数送入外部RAM的40H单元,可执行的指令( D )。
- (A)
MOV R1, 40H
MOVX @RI, A
- (B)
MOV R1, #40H
MOVX R1, A
- (C)
MOVX 40H, A
- (D)
MOV R1, #40H
MOVX @R1, A
- 解析: 访问外部RAM(MOVX指令)必须使用间接寻址(@R0, @R1, @DPTR)。要访问40H单元,首先需要将地址40H送入一个指针寄存器。
- (A)
MOV R1, 40H
是将内部RAM 40H单元的内容送入R1,而不是地址值。 - (B)
MOVX R1, A
指令格式错误。 - (C)
MOVX
不支持直接寻址。 - (D)
MOV R1, #40H
将立即数40H送入R1,MOVX @R1, A
将A的内容送到R1所指向的外部RAM单元(即40H单元)。正确。
- 已知累加器A的数值为98H,它与0FAH相加,相加后会影响标志位CY、AC和OV位。各个位的值是( C )。
- (A) 0、0、0
- (B) 1、0、1
- (C) 1、1、1
- (D) 1、1、0
- 解析:
98H + FAH = 1001 1000 B + 1111 1010 B
- AC(辅助进位): 低4位相加
1000 B + 1010 B = 1 0010 B
。D3向D4有进位,所以 AC = 1。 - CY(进位): 整体相加结果为
1 1001 0010 B
。最高位(D7)向更高位有进位,所以 CY = 1。 - OV(溢出): 两个负数(最高位都为1)相加,得到一个正数(结果的第7位为0)。发生了溢出,所以 OV = 1。
- A/D转换方法有以下四种,ADC0809是一种采用( C )进行A/D转换的8位接口芯片。
- (A) 计数式
- (B) 双积分式
- (C) 逐次逼近式
- (D) 并行式
- 解析: ADC0809是经典的8路8位逐次逼近式A/D转换器。
- 下列指令写法正确的是( D )。
- (A)
MOV #20H, A
- (B)
ADD R2, #30H
- (C)
PUSH R0
- (D)
RRC A
- 解析:
- (A)
MOV
指令的目标操作数不能是立即数。应为MOV A, #20H
。 - (B)
ADD
指令的目标操作数必须是累加器A。应为ADD A, #30H
。 - (C)
PUSH
指令的操作数必须是直接地址。应为PUSH 00H
(R0的地址)。 - (D)
RRC A
是正确的单字节指令。
- 中断服务程序中至少应有一条( D )。
- (A) 传送指令
- (B) 转移指令
- (C) 加法指令
- (D) 中断返回指令
- 解析: 每个中断服务程序的结尾都必须是
RETI
指令,否则程序将无法从中断中正确返回,中断系统也会出错。
- 执行 LCALL 4000H 指令时, MCS-51所完成的操作是( D )。
- (A) 保护 PC
- (B) 4000H → PC
- (C) 保护现场
- (D) PC+3入栈,4000H→PC
- 解析:
LCALL
是一条3字节指令。执行时,CPU将下一条指令的地址(即当前PC值+3)压入堆栈用于返回,然后将目标地址4000H加载到PC,实现长调用。
- 下面哪条指令产生WR信号( D )。
- (A)
MOVX A, @DPTR
- (B)
MOVC A, @A+PC
- (C)
MOVC A, @A+DPTR
- (D)
MOVX @DPTR, A
- 解析:
WR
(写)信号在对**外部数据存储器(RAM)**进行写操作时有效(变为低电平)。 - (A) 是从外部RAM读数据,会产生
RD
信号。 - (B) (C) 是从程序存储器读数据,会产生
PSEN
信号。 - (D) 是向外部RAM写数据,会产生
WR
信号。
- 若某存储器芯片地址线为12根,那么它的存储容量为( C )。
- (A) 1KB
- (B) 2KB
- (C) 4KB
- (D) 8KB
- 解析: 存储容量 = 2^地址线数量。
2^12 = 4096
。4096
字节 =4
KB。
- 若RS1=1,RS0=1,则当前工作寄存器是( D )。
- (A) 0组
- (B) 1组
- (C) 2组
- (D) 3组
- 解析: PSW寄存器中的RS1和RS0位用于选择工作寄存器组。
00
对应0组,01
对应1组,10
对应2组,11
对应3组。
- MCS-51 有中断源( A )。
- (A) 5
- (B) 2
- (C) 3
- (D) 6
- 解析: 标准的MCS-51有5个中断源:外部中断0(INT0)、定时器0(TF0)、外部中断1(INT1)、定时器1(TF1)、串行口中断(RI/TI)。(注:MCS-52系列增加了定时器2中断,共6个)
- 执行 PUSH ACC指令, MCS-51完成的操作是( A )。
- (A) (SP)+1→(SP), (A) → ((SP))
- (B) (A) → ((SP)), (SP)-1→(SP)
- (C) (SP)-1→(SP), (A) → ((SP))
- (D) (A)→((SP)), (SP)+1→(SP)
- 解析:
PUSH
指令的操作过程是:1. 堆栈指针SP加1; 2. 将数据存入SP指向的RAM单元。ACC
是累加器A的直接地址。((SP))
表示SP内容指向的存储单元。
- P1口的每一位能驱动( B )。
- (A) 2个TTL低电平负载
- (B) 4个TTL低电平负载
- (C) 8个TTL低电平负载
- (D) 10个TTL低电平负载
- 解析: MCS-51的P1, P2, P3口(准双向口)的每一位可以驱动4个LS TTL(低功耗肖特基TTL)负载。
- PC中存放的是( A )。
- (A) 下一条指令的地址
- (B) 当前正在执行的指令
- (C) 当前正在执行指令的地址
- (D) 下一条要执行的指令
- 解析: PC(Program Counter,程序计数器)是一个16位寄存器,它始终指向下一条将要被取出并执行的指令的地址。
- 要把P0口高4位变0,低4位不变,应使用指令( D )。
- (A)
ORL P0, #0FH
- (B)
ORL P0, #0F0H
- (C)
ANL P0, #0F0H
- (D)
ANL P0, #0FH
- 解析: 要使某些位清零而其他位保持不变,应使用“与”逻辑(
ANL
)。操作数中,希望清零的位对应0
,希望保持不变的位对应1
。要让高4位变0,低4位不变,需要与0000 1111 B
(即0FH)相与。
- 计算机在使用中断方式与外设交换信息时,保护现场的工作应该是( C )。
- (A) 由CPU 自动完成
- (B) 在中断响应中完成
- (C) 应由中断服务程序完成
- (D) 在主程序中完成
- 解析: CPU硬件只自动保护断点(PC值)。而“现场”(如A, B, PSW等寄存器)的保护(
PUSH
)和恢复(POP
)是由程序员在中断服务程序中编写代码来完成的。
- MCS-51 系统中,若晶振频率为12MHz,一个机器周期等于( C )
- (A) 1.5 µs
- (B) 3 µs
- (C) 1 µs
- (D) 0.5 µs
- 解析: 一个机器周期 = 12个时钟周期(振荡周期)。时钟周期 =
1 / 晶振频率
。所以,机器周期 =12 * (1 / 12MHz) = 1 µs
。
- 十进制-29的二进制表示为原码( A )。
- (A) 11100010 (应为补码)
- (B) 10101111
- (C) 00011101
- (D) 00001111
- 解析: 题目可能存在歧义,计算机中负数通常用补码表示。
- +29 =
0001 1101
B - 29的原码:
1001 1101
B - 29的反码:
1110 0010
B - 29的补码:
1110 0011
B - 注意: 选项A是-29的反码,不是原码或补码。但这是最接近的答案。如果题目实际意图是求补码,那么所有选项都不对。但通常这类题目会把反码误写为答案。我们选择最接近的反码。
- 用MCS-51的串口扩展并行I/O口时,串行接口工作方式选择( A )。
- (A) 方式0
- (B) 方式1
- (C) 方式2
- (D) 方式3
- 解析: 方式0是同步移位寄存器方式,RXD引脚用于数据收发,TXD引脚输出同步时钟,非常适合连接移位寄存器(如74HC595)来扩展并行I/O口。
- MCS-51单片机外部有40个引脚,其中地址锁存允许控制信号引脚是( D )。
- (A) RST
- (B) PSEN
- (C) EA
- (D) ALE
- 解析: ALE (Address Latch Enable) 信号用于在P0口作为地址/数据复用总线时,锁存低8位地址。
- 对程序存储器的读操作,只能使用( D )。
- (A)
MOV
指令 - (B)
PUSH
指令 - (C)
MOVX
指令 - (D)
MOVC
指令 - 解析:
MOVC
(Move Code) 是专门用于从程序存储器(ROM)中读取数据的指令,常用于查表。
- MCS-51单片机在同一优先级的中断源同时申请中断时,CPU首先响应( A )。
- (A) 外部中断0
- (B) 外部中断1
- (C) 定时器0中断
- (D) 定时器1中断
- 解析: 在同一优先级内,CPU按固定的自然优先级响应中断。顺序为:外部中断0 (最高) -> 定时器0 -> 外部中断1 -> 定时器1 -> 串行口 (最低)。
- 执行中断返回指令,从堆栈弹出地址送给( C )。
- (A) A
- (B) CY
- (C) PC
- (D) DPTR
- 解析: 中断返回指令
RETI
会从堆栈中弹出两个字节,恢复到程序计数器PC中,使程序能从中断处继续执行。
- 执行指令CLR 30H后,结果被清0的是: ( D )
- (A) 30H的最低位
- (B) 24H的最高位
- (C) 30H单元
- (D) 26H单元的第0位
- 解析:
CLR 30H
中的30H
是位地址。位地址30H对应于内部RAM字节地址26H的第0位(bit 0)。
- 复位使 MCS51单片机进行自身初始化操作,它使专用寄存器进入各自的复位初态,其中SP、PSW、P1的状态为 ( C )
- (A) 00H,00H,00H
- (B) 00H,00H,0FFH
- (C) 07H, 00H, 0FFH
- (D) 07H, 0FFH, 00H
- 解析: 复位后:
- 堆栈指针 SP = 07H
- 程序状态字 PSW = 00H
- I/O口 P0, P1, P2, P3 都被置为 0FFH(全1,作为输入状态)。
- 要把P0口高4位不变,低4位求反,应使用指令 (C)
- (A)
XOR P0, #0F0H
- (B)
XOR P0, #0FH
- (C)
XRL P0, #0FH
- (D)
XRL P0, #0F0H
- 解析:
XRL
是异或逻辑指令。一个数与1
异或结果是求反,与0
异或结果不变。要让低4位求反,高4位不变,需要与0000 1111 B
(即0FH)进行异或。XOR
和XRL
是同一条指令的两种写法。
- 下列指令中影响标志位C的指令有 (A)
- (A)
DA A
- (B)
CLR A
- (C)
RR A
- (D)
INC A
- 解析:
- (A)
DA A
会根据调整结果影响C标志位。 - (B)
CLR A
不影响C。 - (C)
RR A
(循环右移)只有RRC
影响标志位 - (D)
INC A
不影响C。
- 8031单片机在执行MOVCA, @A+PC指令时,将发出地址信号和 (B) 信号。
- (A) RD
- (B) PSEN
- (C) RD及WR
- (D) RD及PSEN
- 解析:
MOVC
是访问程序存储器,因此会产生PSEN
(Program Store Enable)信号。但同时,单片机要从ROM中读取指令码和数据,这些都需要地址信号,并且需要读引脚RD
处于有效状态。因此RD
和PSEN
都会被激活。 - 更精确的解释: 严格来说,
MOVC
指令只产生PSEN
信号来选通外部ROM。RD
信号是用于选通外部RAM的。所以标准答案应该是(B)。但有些教材或题目会认为CPU在访问总线时RD
总会体现读状态,导致选(D)。在标准定义下,(B)是最佳答案。如果必须在(B)和(D)中选一个,通常考点是MOVC
对应PSEN
,选(B)。如果题目认为任何读操作都会有RD
脉冲,则选(D)。此处按标准选(B)。(注:但很多参考答案会选D,此处存在争议,我们以标准手册为准,选B)
- 假定(SP) =62H, (60H) =50H, (61H)=40H, (62H) =3OH, (63H)=20H,执行RET指令后,PC的值为: (C)
- (A) 3020H
- (B) 3040H
- (C) 4030H
- (D) 4050H
- 解析:
RET
指令执行出栈操作,与PUSH
相反。 - 从SP指向的单元(62H)取出数据,作为返回地址的低8位。所以 PCL = (62H) = 30H。
- SP减1,变为61H。
- 从SP指向的单元(61H)取出数据,作为返回地址的高8位。所以 PCH = (61H) = 40H。
- SP再减1。
- 最终 PC = PCH + PCL = 4030H。
- 欲将累加器中的高、低四位进行交换,应该选用的指令是: (C)
- (A) XCH
- (B) XCHD
- (C) SWAP
- (D) RLC
- 解析:
SWAP A
是专门用于交换累加器A内部高4位和低4位的指令。
- 执行子程序返回指令时,从堆栈顶部弹出的内容送给 (C)
- (A) A
- (B) CY
- (C) PC
- (D) DPTR
- 解析: 同第26题。子程序调用指令(
ACALL
,LCALL
)会将返回地址压入堆栈,返回指令(RET
)则将其弹出到程序计数器PC。
- 若标号 LABEL 所在地址为1040H,则地址1000H处的指令SJMP LABEL 的转移偏移量为 (A)。
- (A) 3EH
- (B) 42H
- (C) 40H
- (D) 0E0H
- 解析: 偏移量 = 目标地址 - (当前指令地址 + 指令字节数)。
- 目标地址 = 1040H。
- 当前指令地址 = 1000H。
SJMP
是2字节指令。- 偏移量 =
1040H - (1000H + 2) = 1040H - 1002H = 3EH
。
- 8031单片机中既可位寻址又可字节寻址的单元是 (A)
- (A) 28H
- (B) 30H
- (C) 08H
- (D) 70H
- 解析: 内部RAM中,字节地址从20H到2FH的16个字节是位寻址区。
- (A) 28H在此范围内。
- (B) 30H是SFR的地址(P1),SFR中有些可以位寻址,但30H本身不是内部RAM位寻址区。
- (C) 08H是工作寄存器区。
- (D) 70H是普通RAM区。
- 复位后执行PUSH 07H,是把: (A)
- (A) 07H单元内容压入08H单元
- (B) 08H单元内容压入07H单元
- (C) 07H单元内容压入07H单元
- (D) 错误指令
- 解析: 复位后SP=07H。
PUSH 07H
指令: - SP加1,SP变为08H。
- 将直接地址07H单元的内容,压入到SP指向的08H单元。
- 在CPU内部,反映程序运行状态或反映运算结果特征的寄存器是: (B)
- (A) PC
- (B) PSW
- (C) A
- (D) SP
- 解析: PSW(Program Status Word,程序状态字)包含了CY(进位)、AC(辅助进位)、OV(溢出)、P(奇偶)等标志位,这些位反映了上一步算术或逻辑运算的结果特征。
- 若(A)=68H,执行XRL A, #98H后,PSW中被改变的标志有 (B)
- (A) 没有
- (B) P标志
- (C) C, AC, OV标志
- (D) 全部
- 解析:
XRL
逻辑异或指令只影响奇偶标志位P,不影响C, AC, OV。 - A = 68H =
0110 1000
B - 98H =
1001 1000
B - A ⊕ 98H =
1111 0000
B。结果中有4个1
(偶数),所以P标志位会变为1。
- 在串行通信中,8031中发送和接收的寄存器是 (B)
- (A) TMOD
- (B) SBUF
- (C) SCON
- (D) DPTR
- 解析: SBUF(Serial Buffer)是串行数据缓冲寄存器,对它写操作即发送数据,对它读操作即接收数据。
- 73.5转换成十六进制数是 (B)
- (A) 94.8H
- (B) 49.8H
- (C) 111H
- (D) 49H
- 解析:
- 整数部分:
73 / 16 = 4
余9
。4 / 16 = 0
余4
。从下往上读余数,为49H。 - 小数部分:
0.5 * 16 = 8.0
。取整数部分为8。所以小数部分是.8H。 - 合计: 49.8H。
- 下面哪条指令,单片机将发出PSEN信号 (B)
- (A)
MOVX A,@DPTR
- (B)
MOVC A,@A+PC
- (C)
JMP @A+DPTR
- (D)
MOVX @DPTR,A
- 解析:
PSEN
(Program Store Enable)信号仅在访问**外部程序存储器(ROM)**时有效。 MOVC
和JMP
中的变址寻址都会访问程序存储器。- (A)和(D)是访问外部数据存储器。
- (B)是查表指令,访问ROM,发出
PSEN
。 - (C)是跳转指令,也是访问ROM,发出
PSEN
。 - 在此题中,B和C都正确。但
MOVC
是典型的数据读取,JMP
是程序流控制。通常考点指向MOVC
。
- 80C51的P1口用作输入口时,执行MOV P1,#0FFH后再执行MOVA, PI指令,累加器A中的内容为 (D)
- (A) 00H
- (B) 11H
- (C) FFH
- (D) 不确定
- 解析:
MOV P1, #0FFH
将P1口配置为输入模式(内部上拉)。MOV A, P1
会读取P1引脚外部的实际电平状态。如果P1口悬空,读出的值可能受内部弱上拉影响为FFH,但如果外部有电路连接,读出的值就由外部电路决定。因此,值是不确定的。
- JZ e的操作码地址为1000H,e=20H,它转移的目标地址为 (A)
- (A) 1022 H
- (B) 1020H
- (C) 1000H
- (D) 101EH
- 解析:
JZ
是相对转移指令,其目标地址计算公式为:目标地址 = (当前指令地址 + 指令字节数) + 偏移量。 JZ
是2字节指令。- 偏移量e是有符号数,20H是正数。
- 目标地址 = (1000H + 2) + 20H = 1002H + 20H = 1022H。
- MCS--51单片机在执行MOVX A, @DPTR指令时,将发出 (A) 信号。
- (A) 地址信号和RD信号
- (B) 数据信号和RD信号
- (C) 地址信号和WR信号
- (D) 数据信号和WR信号
- 解析:
MOVX A, @DPTR
是从外部数据存储器(RAM)读数据。 - P0口分时复用,发出低8位地址和数据信号。P2口发出高8位地址信号。所以有地址信号。
- 因为是读操作,所以会发出
RD
信号。
- MCS-51的定时器/计数器应用时的位数是 (D)
- (A) 8位的
- (B) 16位的
- (C) 24位的
- (D) 根据方式确定位数
- 解析: 定时器/计数器的工作方式由TMOD寄存器设置。
- 方式0:13位
- 方式1:16位
- 方式2:8位自动重装
- 方式3:两个独立的8位
- 因此,位数是根据工作方式确定的。
- 下列哪类指令没有操作MCS-51的堆栈区: (B)
- (A)
ACALL
- (B)
ADD
- (C)
PUSH
- (D)
RET
- 解析:
ACALL
/LCALL
(调用)、PUSH
(压栈)、RET
/RETI
(返回)都会对堆栈进行读写操作。ADD
(加法)指令只操作累加器和标志位,与堆栈无关。
- 设某8位A/D转换器,满量程输入电压为5V,当输入电压为3.45V时,其输出数字量(A)
- (A) 176
- (B) 255
- (C) 88
- (D) 76
- 解析: 数字量 = (输入电压 / 满量程电压) * (2^位数 - 1)。
- 数字量 = (3.45 / 5) * (2^8 - 1) = 0.69 * 255 = 175.95。
- 取整后为176。
- 设某10位D/A转换器,满量程输入电压为5V,此转换器的分辨率为 (C) mV。
- (A) 1.22
- (B) 2.44
- (C) 4.88
- (D) 19.6
- 解析: 分辨率 = 满量程电压 / (2^位数)。
- 分辨率 = 5V / (2^10) = 5V / 1024 ≈ 0.00488 V = 4.88 mV。
- 以下所列的伪指令标识符写法中,写法正确的一组是 (C)
- (A) EQU, RETI
- (B) NOP. DB
- (C) DW, ORG
- (D) DA, END
- 解析: 伪指令是给汇编器的指令,不产生机器码。
- (A)
RETI
是机器指令。 - (B)
NOP
是机器指令。 - (C)
DW
(定义字)和ORG
(定义起始地址)都是伪指令。 - (D)
DA
(十进制调整)是机器指令。