一、单选题
- B. P1端口的输出锁存器
- 解析:
ANL P1, #0FH
是一条“读-修改-写”指令。这类指令在执行时,为了避免因引脚电平变化(如外部负载影响)导致操作错误,它读取的是端口内部锁存器的状态,而不是引脚的实际电平。修改后的值再同时写回锁存器和引脚。
- C. 执行完整个
LJMP
指令后响应中断 - 解析: CPU响应中断的条件之一是当前指令必须执行完毕。即使是多周期指令,也必须等待其所有机器周期全部完成,CPU才会去查询中断标志并响应中断。
- C. 处理器的三级流水线结构
- 解析: Cortex-M采用“取指-译码-执行”三级流水线。当CPU正在执行当前指令时,它已经完成了下一条指令的取指和译码,并且正在取下下一条指令。因此,PC总是指向“正在取指”的指令地址,即
当前执行指令地址 + 4
。
- C.
MOVS
会根据传送的数据更新APSR中的N和Z标志位 - 解析: 指令后缀
S
的作用就是使该指令在执行后更新APSR(应用PSR)中的条件标志位,如N(负)、Z(零)、C(进位)、V(溢出)。MOV
指令则不影响这些标志位。
- C. 将当前PSW内容压入堆栈
- 解析: 80C51硬件中断响应过程只会将PC(断点地址)压栈。保护现场(如保存PSW、ACC等关键寄存器)需要用户在中断服务程序的开头用
PUSH
指令自行完成。
- C. 处理器需要执行多次总线操作,降低了访问效率
- 解析: Cortex-M的硬件可以处理非对齐访问,它会将一次非对齐的访问拆分成两次(或更多次)对齐的访问,然后将结果在内部拼接起来。这个过程对软件是透明的,但会消耗额外的时钟周期,导致性能下降。
- A.
GPIOA->MODER
- 解析: GPIOx_MODER(端口模式寄存器)用于配置每个引脚的I/O方向模式(输入、输出、复用、模拟)。要设置为输出模式,需要修改此寄存器中对应的位。
OTYPER
设置输出类型(推挽/开漏),PUPDR
设置上下拉,BSRR
用于置位/复位引脚。
- B. TF1
- 解析: 这是方式3的一个特殊之处。当T0工作在方式3时,TL0作为一个8位定时器,使用T0的所有控制位(TR0、TF0、INT0中断);而TH0也作为一个独立的8位定时器,但它“借用”了T1的控制位TR1和中断标志TF1。因此TH0溢出时,置位的是TF1。
- B. 响应响应优先级较高的(即数值较小的)中断
- 解析: NVIC的优先级仲裁原则是:首先比较抢占优先级,抢占优先级高的胜出。如果抢占优先级相同,则比较响应优先级,响应优先级高的(数值小)胜出。
- A. CY = 1
- 解析:
CJNE
指令内部实际上是执行了一个减法操作来比较。格式CJNE A, data, rel
,硬件计算A - data
。如果发生借位(即A < data
),则CY=1。如果A >= data,则CY=0。
二、判断题
- 错误 ( × )
- 解析: P1-P3复位后为高电平,可直接用作输入。但P0口内部是漏极开路的,复位后处于高阻态,不是高电平。必须外接上拉电阻才能稳定地读到高电平。
- 错误 ( × )
- 解析: Cortex-M的堆栈是向下生长的,SP指针会减小。
PUSH
操作后,SP值会减8。 在Cortex-M中,当使用PUSH
或POP
一次性操作多个寄存器时,寄存器在内存中的存取顺序取决于寄存器的编号(编号高的先入栈),而与您在指令{}
中书写它们的顺序完全无关。
- 正确 ( √ )
- 解析: PC在取指令后会自动加1(或指令字节数)。当CPU执行
MOVC A, @A+PC
时,PC的值已经指向了该条指令的下一条指令的地址。
- 正确 ( √ )
- 解析: 这是Cortex-M的复位序列。向量地址的最低位用于指示处理器应切换到Thumb状态执行,因此必须为1。
- 正确 ( √ )
- 解析: 波特率的计算公式与 2SMOD 和 fosc 有关。将SMOD置1,波特率加倍;将晶振频率加倍,波特率也加倍。因此效果是等同的。
- 正确 ( √ )
- 解析: 向下生长(Full-Descending)指堆栈由高地址向低地址扩展,满栈(Full)指SP指针总是指向栈顶最后一个被压入的数据。
- 错误 ( × )
- 解析:
ACALL
压栈的断点是ACALL
指令之后的那条指令的地址。而中断响应时压栈的断点是当前被中断指令的下一条指令的地址。虽然都是“下一条指令”,但触发的时机和上下文不同,不能认为完全相同。
- 正确 ( √ )
- 解析: 这是位段(Bit-band)操作的核心原理。对别名区的字访问被硬件自动映射为对位段区目标比特的读-修改-写操作,这个过程不会被中断打断,因此是原子的。
- 错误 ( × )
- 解析:
XCH A, @R0
交换A和RAM单元的整个字节。而XCHD A, @R0
只交换A的低4位和RAM单元的低4位,高4位保持不变。
- 错误 ( × )
- 解析: 除了函数调用,当发生中断或异常时,硬件也会自动将特殊的返回信息(如EXC_RETURN)加载到LR寄存器中,用于中断返回。
三、填空题
非对齐
寄存器间接
R0
,R7
8位自动重装载
低16位
,高16位
1
(或0FFH
)
LR
(或 R14)
SMOD
四、51单片机程序填空题
(1) PC
(2) SETB IT0
,(3) SETB EX0
,(4) SETB EA
,(5) 30H
(6) 2000H
,(7) @DPTR
,(8) DPTR
(9) 20H
,(10) 0FDH
,(11) SETB TR1
,(12) 40H
,(13) 'Y'
,(14) JNB TI, WAIT_TI
,(15) TI
(16) MOV R0, #40H
,(17) 0FH
(循环15次,因为第一个数已读),(18) MOV A, @R0
,(19) INC R0
,(20) MOV B, A
,(21) SUBB A, @R0
,(22) MOV A, B
,(23) JNC NO_UPDATE
,(24) MOV A, @R0
,(25) DJNZ R7, LOOP_MAX
,(26) MOV 50H, A
(28) MOV R6, #100
,(29) MOV R5, #200
,(30) R6