跳转到内容

单片机闭卷模拟试卷与参考答案

本模拟卷按老师说明的考试形式设计:

第一大题:问答题,30分
涉及单片机概念、应用范围、组成原理、串口及多机通信原理。
第二大题:简单设计题,20分
涉及I/O口使用、按键、LED、延时程序。
第三大题:综合设计题,50分
涉及I/O口、中断、定时器等综合应用。

建议做题方式:先闭卷独立完成,再对照答案改。尤其是定时器初值、中断入口、初始化程序,这些必须能手写出来。


1. 简述什么是单片机,并说明单片机的主要特点和应用范围。(6分)

Section titled “1. 简述什么是单片机,并说明单片机的主要特点和应用范围。(6分)”

要求回答:

  • 单片机的定义。
  • 至少写出3个特点。
  • 至少写出5个应用领域。

2. 简述 MCS-51 单片机的基本组成,并说明各部分的作用。(6分)

Section titled “2. 简述 MCS-51 单片机的基本组成,并说明各部分的作用。(6分)”

要求回答:

  • CPU。
  • 程序存储器。
  • 数据存储器。
  • I/O口。
  • 定时器/计数器。
  • 中断系统。
  • 串行口。

3. 简述 MCS-51 单片机 P0、P1、P2、P3 四个并行 I/O 口的主要特点。(6分)

Section titled “3. 简述 MCS-51 单片机 P0、P1、P2、P3 四个并行 I/O 口的主要特点。(6分)”

要求回答:

  • 四个口都是几位口。
  • P0口有什么特殊性。
  • P2口在外部扩展时有什么作用。
  • P3口有哪些第二功能。

4. 简述 MCS-51 串行口通信的基本过程,并说明 SCON、SBUF、RI、TI 的作用。(6分)

Section titled “4. 简述 MCS-51 串行口通信的基本过程,并说明 SCON、SBUF、RI、TI 的作用。(6分)”

要求回答:

  • 串行通信基本概念。
  • 发送过程。
  • 接收过程。
  • 相关寄存器或标志位作用。

5. 简述 MCS-51 多机通信的基本原理。(6分)

Section titled “5. 简述 MCS-51 多机通信的基本原理。(6分)”

要求回答:

  • 多机通信中主机和从机的关系。
  • 方式2或方式3的第9位数据有什么作用。
  • 地址帧和数据帧如何区分。
  • SM2 位在多机通信中的作用。

设 8 个 LED 接在 P1 口,低电平点亮。要求编写程序,使 LED 从 P1.0 到 P1.7 依次点亮,循环往复。延时子程序可自行设计。

要求:

  • 写出主程序。
  • 写出延时子程序。
  • 简要说明低电平点亮时送到 P1 口的数据特点。

设按键 K 接在 P3.2,低电平表示按下;LED 接在 P1.0,低电平点亮。要求实现:

按键按下时 LED 亮;
按键松开时 LED 灭。

要求:

  • 写出程序。
  • 说明为什么判断 P3.2 是否为 0。
  • 可加入简单消抖。

1. 定时器控制 LED 闪烁系统设计(25分)

Section titled “1. 定时器控制 LED 闪烁系统设计(25分)”

设晶振频率为 12MHz,P1.0 接 LED,低电平点亮。要求使用定时器 T0 工作方式1产生 50ms 定时中断,累计 20 次形成约 1s,使 LED 每隔 1s 翻转一次。

要求:

  1. 计算定时器 T0 的初值。(8分)
  2. 写出中断入口安排。(4分)
  3. 写出定时器初始化程序。(6分)
  4. 写出 T0 中断服务程序。(7分)

2. 外部中断与定时器综合控制系统设计(25分)

Section titled “2. 外部中断与定时器综合控制系统设计(25分)”

设 P1 口接 8 个 LED,低电平点亮;INT0 接按键,低电平触发。系统要求:

正常状态:P1口8个LED循环流水显示。
按下 INT0 按键后:系统进入报警状态,全部LED以约1s周期闪烁。
再次按下 INT0 按键后:退出报警状态,恢复流水灯显示。

设晶振频率为 12MHz,使用 T0 方式1定时 50ms,在中断中累计形成 1s。

要求:

  1. 说明系统总体设计思路。(5分)
  2. 写出 T0 初值。(5分)
  3. 写出外部中断 INT0 和定时器 T0 的初始化程序。(7分)
  4. 写出主程序和中断服务程序的关键代码。(8分)

1. 单片机的概念、特点和应用范围

Section titled “1. 单片机的概念、特点和应用范围”

单片机是把 CPU、程序存储器、数据存储器、I/O 接口、定时器/计数器、中断系统、串行通信接口等集成在一块芯片上的微型计算机。它主要面向控制应用,也常称为微控制器 MCU。

主要特点:

  • 集成度高,体积小。
  • 成本低,功耗低。
  • 可靠性较高。
  • 控制能力强,适合嵌入到设备内部。
  • 可通过 I/O 口、中断、定时器、串口等控制外部设备。

应用范围:

  • 工业控制,如生产线控制、自动检测。
  • 家用电器,如电饭煲、空调、洗衣机。
  • 智能仪器仪表,如电子秤、万用表。
  • 汽车电子,如车窗控制、倒车雷达。
  • 通信设备,如串口模块、蓝牙模块控制。
  • 医疗设备,如血压计、血糖仪。
  • 安防系统,如门禁、报警器。
  • 机器人和智能小车控制。

MCS-51 单片机主要由 CPU、程序存储器、数据存储器、并行 I/O 口、定时器/计数器、中断系统、串行口、特殊功能寄存器、时钟和复位电路等组成。

各部分作用:

  • CPU:执行指令,完成算术逻辑运算,并控制单片机各功能部件工作。
  • 程序存储器:存放用户程序和常数,复位后 CPU 从程序存储器 0000H 地址开始取指执行。
  • 数据存储器:存放程序运行中的变量、中间结果、堆栈和标志数据。
  • I/O口:用于单片机与外部设备之间进行数字量输入和输出。
  • 定时器/计数器:可对内部机器周期计数实现定时,也可对外部脉冲计数。
  • 中断系统:使 CPU 能及时响应外部或内部事件,提高实时性。
  • 串行口:用于单片机与计算机、其他单片机或通信模块进行串行数据传输。
  • 特殊功能寄存器:用于控制 I/O、中断、定时器、串口等片内功能部件。

MCS-51 有 P0、P1、P2、P3 四个 8 位并行 I/O 口,共 32 根 I/O 线。

P0 口:

  • 可作普通 I/O 口使用。
  • 外部扩展存储器时,作为低 8 位地址/数据复用总线。
  • P0 口为漏极开路结构,作普通 I/O 输出时通常需要外接上拉电阻。

P1 口:

  • 通常作为普通准双向 I/O 口使用。
  • 常用于连接 LED、按键、数码管等简单外设。

P2 口:

  • 可作普通 I/O 口使用。
  • 外部扩展存储器时,常作为高 8 位地址总线。

P3 口:

  • 可作普通 I/O 口使用。
  • 还具有第二功能,包括串口接收 RXD、串口发送 TXD、外部中断 INT0/INT1、定时器外部输入 T0/T1、外部数据存储器写 WR 和读 RD 等。

4. 串行口通信过程及寄存器作用

Section titled “4. 串行口通信过程及寄存器作用”

串行通信是指数据按位依次传输。MCS-51 串行口通过 TXD 引脚发送数据,通过 RXD 引脚接收数据。

发送过程:

  1. 设置串口工作方式和波特率。
  2. 将要发送的数据写入 SBUF。
  3. 串口硬件自动从 TXD 引脚逐位发送。
  4. 发送完成后 TI 置 1。
  5. 软件检测 TI 后,将 TI 清 0,以便下一次发送。

接收过程:

  1. 设置串口工作方式,并允许接收 REN=1。
  2. 外部数据从 RXD 引脚逐位进入串口。
  3. 接收完成后,数据进入 SBUF,RI 置 1。
  4. 软件检测 RI 后,从 SBUF 读出数据。
  5. 软件将 RI 清 0,准备下一次接收。

相关寄存器和标志:

  • SCON:串行口控制寄存器,用于设置工作方式、允许接收和保存 RI/TI 标志。
  • SBUF:串行口数据缓冲寄存器,发送时写 SBUF,接收时读 SBUF。
  • TI:发送中断标志,发送完成后由硬件置 1。
  • RI:接收中断标志,接收完成后由硬件置 1。

MCS-51 串行口方式2和方式3为 9 位异步通信方式,可用于多机通信。多机通信中通常有一个主机和多个从机,主机负责发送地址帧和数据帧,从机根据地址判断是否接收后续数据。

基本过程:

  1. 主机先发送地址帧。
  2. 地址帧的第9位通常置 1,用来表示这是一帧地址。
  3. 所有从机接收地址帧,并与自己的地址比较。
  4. 地址匹配的从机允许接收后续数据;地址不匹配的从机继续等待新的地址帧。
  5. 主机再发送数据帧,数据帧第9位通常置 0。

SM2 的作用:

  • 当 SM2=1 时,串口在多机通信中通常只对第9位为 1 的地址帧产生接收中断。
  • 地址匹配的从机可清除 SM2,使其继续接收第9位为 0 的数据帧。
  • 地址不匹配的从机保持 SM2=1,从而忽略后续数据帧。

低电平点亮时,某一位输出 0 表示该位 LED 亮,其余位输出 1 表示灭。例如:

1111 1110B = FEH,P1.0亮
1111 1101B = FDH,P1.1亮

参考程序:

ORG 0000H
LJMP MAIN
MAIN:
MOV A,#0FEH
LOOP:
MOV P1,A
ACALL DELAY
RL A
SJMP LOOP
DELAY:
MOV R7,#200
D1:
MOV R6,#250
D2:
DJNZ R6,D2
DJNZ R7,D1
RET
END

说明:初值 0FEH 使 P1.0 输出低电平。每次 RL A 后,低电平位左移,实现流水灯效果。


因为按键低电平有效,所以按下时 P3.2=0。LED 低电平点亮,所以按下时应使 P1.0=0

参考程序:

ORG 0000H
LJMP MAIN
MAIN:
SETB P1.0 ; LED先灭
SETB P3.2 ; P3.2置1,作为输入
KEY_SCAN:
JB P3.2,LED_OFF ; P3.2=1,未按下
ACALL DELAY ; 简单消抖
JB P3.2,LED_OFF
CLR P1.0 ; 按下,LED亮
SJMP KEY_SCAN
LED_OFF:
SETB P1.0 ; 松开,LED灭
SJMP KEY_SCAN
DELAY:
MOV R7,#100
D1:
MOV R6,#200
D2:
DJNZ R6,D2
DJNZ R7,D1
RET
END

晶振频率:

fosc = 12MHz

MCS-51 一个机器周期为 12 个时钟周期:

机器周期 = 12 / 12MHz = 1μs

定时 50ms 需要计数:

N = 50ms / 1μs = 50000

T0 方式1为 16 位定时器,最大计数为 65536:

初值 = 65536 - 50000 = 15536 = 3CB0H

所以:

TH0 = 3CH
TL0 = B0H

累计 20 次:

50ms × 20 = 1000ms = 1s
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_ISR

T0 中断入口地址是 000BH

MAIN:
MOV TMOD,#01H ; T0方式1,16位定时
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R7,#20 ; 20次50ms为1s
SETB P1.0 ; LED先灭
SETB ET0 ; 允许T0中断
SETB EA ; 开总中断
SETB TR0 ; 启动T0
HERE:
SJMP HERE
T0_ISR:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R7,T0_EXIT
MOV R7,#20
CPL P1.0 ; 每1s翻转LED
T0_EXIT:
RETI

完整程序:

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_ISR
MAIN:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R7,#20
SETB P1.0
SETB ET0
SETB EA
SETB TR0
HERE:
SJMP HERE
T0_ISR:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R7,T0_EXIT
MOV R7,#20
CPL P1.0
T0_EXIT:
RETI
END

2. 外部中断与定时器综合控制系统设计

Section titled “2. 外部中断与定时器综合控制系统设计”

系统使用 P1 口控制 8 个 LED。正常状态下,主程序循环实现流水灯显示;外部中断 INT0 接按键,每次按下使报警标志位取反;定时器 T0 每 50ms 中断一次,累计 20 次形成约 1s。当报警标志有效时,定时器中断中使 P1 口全部 LED 闪烁;当报警标志无效时,主程序恢复流水灯。

可设:

20H.0 = 报警状态标志
20H.1 = 1s到达标志或闪烁状态标志

与上一题相同:

TH0 = 3CH
TL0 = B0H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0_ISR
ORG 000BH
LJMP T0_ISR
MAIN:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R7,#20
CLR 20H.0 ; 报警标志=0
SETB P1.0
SETB IT0 ; INT0边沿触发
SETB EX0 ; 允许外部中断0
SETB ET0 ; 允许T0中断
SETB EA ; 开总中断
SETB TR0 ; 启动T0
MOV A,#0FEH

主程序:

MAIN_LOOP:
JB 20H.0,MAIN_LOOP ; 报警状态下,LED由T0中断控制
MOV P1,A ; 正常流水灯
ACALL DELAY
RL A
SJMP MAIN_LOOP

外部中断 INT0:每按一次切换报警状态。

INT0_ISR:
CPL 20H.0 ; 报警标志取反
RETI

T0 中断服务程序:

T0_ISR:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R7,T0_EXIT
MOV R7,#20
JNB 20H.0,T0_EXIT ; 非报警状态,不闪烁
CPL 20H.1
JB 20H.1,ALL_ON
ALL_OFF:
MOV P1,#0FFH ; 全灭
SJMP T0_EXIT
ALL_ON:
MOV P1,#00H ; 全亮,低电平点亮
T0_EXIT:
RETI

延时子程序:

DELAY:
MOV R6,#200
D1:
MOV R5,#250
D2:
DJNZ R5,D2
DJNZ R6,D1
RET

完整程序骨架:

ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0_ISR
ORG 000BH
LJMP T0_ISR
MAIN:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R7,#20
CLR 20H.0
CLR 20H.1
SETB IT0
SETB EX0
SETB ET0
SETB EA
SETB TR0
MOV A,#0FEH
MAIN_LOOP:
JB 20H.0,MAIN_LOOP
MOV P1,A
ACALL DELAY
RL A
SJMP MAIN_LOOP
INT0_ISR:
CPL 20H.0
RETI
T0_ISR:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R7,T0_EXIT
MOV R7,#20
JNB 20H.0,T0_EXIT
CPL 20H.1
JB 20H.1,ALL_ON
MOV P1,#0FFH
SJMP T0_EXIT
ALL_ON:
MOV P1,#00H
T0_EXIT:
RETI
DELAY:
MOV R6,#200
D1:
MOV R5,#250
D2:
DJNZ R5,D2
DJNZ R6,D1
RET
END

这份卷子里最值得反复练的是:

  1. 定时器方式1初值计算。
  2. ORG 0003HORG 000BHRETI 这些中断模板。
  3. TMOD、TH0、TL0、IE、TCON 的常用设置。
  4. 低电平点亮 LED 时,0 表示亮,1 表示灭。
  5. 串口多机通信:方式2/3、第9位、地址帧、数据帧、SM2。

缩写如果记不住,先看同目录下的 8、寄存器与标志位缩写全称速记.md,里面把 IE、IP、TCON、TMOD、SCON、RI、TI、TF0、TR0、EA、ET0、EX0 等缩写都按英文全称和中文含义整理了。

如果这份能闭卷写到 75% 以上,这次考试的大方向基本就稳了。