期末翻开《单片机原理及应用》的教材,大多数人第一反应是先背名词解释:什么是单片机、什么是机器周期、什么是中断。背完合上书,发现卷子上的题还是不会做。这不是你笨,而是复习顺序错了。这门课的考试,核心从来不是名词背诵,而是“算初值、写程序、读时序、分析硬件连接”这四板斧。我见过太多人把时间花在抄重点笔记上,结果一个定时器初值的计算就卡了半小时,最终成绩离90分差一大截。
这篇内容不是给你划“整本书都是重点”的伪重点,而是按考频密度重新排布复习路径:先建立系统认知框架,再逐项击破计算题与编程题,最后用一套考前冲刺战术把状态顶上去。它适配期末冲刺、补考救急、专升本备考和考研复试里对单片机基础知识的快速回炉。4.5个小时的有效复习,足够覆盖绝大多数学校试卷80%以上的考点,剩下的交给做题手感。
1. 先别急着划重点:用“一台微型电脑”的视角重建知识框架
很多复习资料喜欢一上来就讲存储器结构、指令系统、总线时序,信息密度极高,但初学者很容易被细节埋住。我建议你把单片机先理解成“一台缩在芯片里的微型电脑”,所有知识点都往这个类比上靠,框架感一建立,后面学什么都顺。
1.1 单片机内部到底有几大件
考试里最常考的简答题之一就是“51单片机内部集成了哪些主要功能部件”,答案就六句话:CPU(运算器+控制器)、存储器(程序存储器ROM/Flash + 数据存储器RAM)、并行I/O口(P0~P3)、定时器/计数器(T0和T1)、中断系统、串行通信口(UART)。部分增强型芯片还有看门狗、ADC、PWM、SPI/I2C等扩展外设,但基础课试卷通常只围绕前六大件出题。
这六大件对应着整个学期实验课的所有任务:点流水灯用的是I/O口,按键控制靠的是查询或中断,数码管动态扫描用定时器辅助刷新,双机通信走串口。你把实验内容一回忆,知识点自然就有了锚点。
网上热词里那个“单片机和嵌入式系统的区别”也是高频简答题。最稳妥的答法先说区别再说联系:单片机是集成度高的微控制器,是嵌入式系统的核心处理部件之一;嵌入式系统是在硬件基础上结合操作系统和应用程序形成的完整系统,范围更广。考研复试如果被追问,再加一句“从裸机单片机的单任务轮询,到带RTOS的多任务调度,是嵌入式开发的进阶路径”,就能体现出理解层次。
1.2 “单片机上电到main函数”到底发生了什么
热搜词里有“单片机上电到main的过程”,这道题在复试环节尤其喜欢被问到,期末偶尔也出一两道选择题。整个过程是:上电复位→程序计数器PC指向复位地址0000H→执行启动代码(Startup,由编译器自动生成)→初始化堆栈指针SP→清零/初始化全局变量→调用main函数进入主循环。
如果你用的是Keil加C语言,启动代码藏在启动文件里,平时感觉不到它的存在。但面试时能说清楚“复位后先执行的是启动代码而不是main”,会显得你有系统级理解。放在最低系统里去理解:复位电路把RST引脚拉高至少两个机器周期,单片机内部完成PC清零,程序从头开始跑。这一条链路把复位电路、程序存储、执行流程三个考点串在了一起。
1.3 速成阶段最省力的学习材料怎么选
“江科大51单片机笔记”能火不是没道理的,它的核心优点是按模块拆解:点亮LED算一个模块、按键消抖算一个模块、定时器中断算一个模块,每个模块都有直接可跑的代码和原理图。速成复习就应该按这个方式走,不要按教材章节线性推进。
我的建议是:准备一张A4纸,左边列“模块”,右边列“对应考点”,把流水灯、数码管、按键、蜂鸣器、中断、定时器、串口、LCD1602这些模块逐个过一遍。每过完一个模块,就在纸上写出该模块涉及的关键寄存器名和一句话原理。整张纸完工,你的知识框架就等于搭完了。这个过程最多用1.5小时,是4.5小时里的第一块重头戏。
2. 存储结构与I/O口:寄存器操作是拿分基本功
做完框架铺垫,第一类硬骨头就是存储结构和I/O口。这个板块的特点是说难不难,但细节超多,填空、选择、判断题都爱从这里面出,而且一旦考到具体地址和寄存器功能,记错就等于丢分。
2.1 哈佛结构的本质,一张图记一辈子
51单片机采用哈佛结构,程序存储器和数据存储器分开编址。通俗理解:程序存储器像图书馆的藏书区,只能“读”不能“写”,存的是代码和固定表格;数据存储器像你的工作台,可以随手写写画画,存的是运行时的临时变量。
51的经典配置是:程序存储器Flash最大64KB,地址范围0000H~FFFFH;数据存储器是256B(52增强型是384B,分成低128B、高128B和高128B),外加64KB外部扩展RAM空间(用MOVX指令访问)。
备考时把这个结构画成一张分层图(书架+工作台+外接仓库),再去记各种地址范围就不会混乱。选择题里出现“程序存储器编址与数据存储器编址是否独立”,答案必须是“独立”,这就是哈佛结构的考点。
2.2 数据存储器里的特殊区域:位寻址区是送分点
51单片机内部RAM低128B里,地址20H~2FH这16字节有一个特殊身份:每个字的每一位都有独立的位地址(00H~7FH),这意味着你可以直接操作单个位,而不必先读字节再掩码。
期末常考的一道分析题是“将位地址07H置1”,标准写法是SETB 07H。很多同学分不清“字节地址07H”和“位地址07H”的区别,答案写成了MOV 07H,#01H,这在位寻址语境下就是错的。我的记忆技巧是:凡是位地址范围在00H~7FH、且处于20H~2FH字节区间内的,操作指令用的是SETB、CLR、CPL、JB、JNB这一套位操作指令。
SFR特殊功能寄存器区位于80H~FFH,里面分布着P0~P3、TMOD、TCON、SCON、SBUF、IE、IP等关键寄存器。复习时不需要背全部地址,但必须记住几个高频的:P0~P3地址80H~93H、TMOD地址89H、TCON地址88H、SCON地址98H、SBUF地址99H、IE地址0A8H、IP地址0B8H。
2.3 P0~P3四兄弟的性格差异
P0口、P1口、P2口、P3口的区别是I/O口的必考题,很可能出成“比较四个并行口在结构与功能上的不同”。我的总结是一个字概括法:开、准、址、双。
- P0口是“开”:真正的开漏输出结构,内部没有上拉电阻,做普通I/O口用必须外接上拉电阻,否则高电平拉不上去。做总线扩展时,它分时复用为低8位地址/数据总线。
- P1口是“准”:准双向I/O口,内部带上拉,输出能力一般,低速输入还好,输入时最好先写1。
- P2口是“址”:兼具通用I/O和外部存储器高8位地址线功能,扩展外部RAM/ROM时它负责输出高8位地址。
- P3口是“双”:每个引脚都有第二功能,比如P3.0是RXD,P3.1是TXD,P3.2是外部中断0,P3.3是外部中断1,P3.4/P3.5是T0/T1的外部计数输入,P3.6/P3.7是外部存储器的读写控制信号。
做题时常见陷阱是问“哪个口是真正的三态双向口”,答案是P0口,因为它除了开漏输出还有高阻态,作为总线使用时是三态。而P1~P3是准双向口,输入时要配合写1操作,做题时要把“准”字体现出来。
2.4 I/O口的四种工作模式,STC增强型必考
现在很多学校的实验平台已经从AT89C51换成了STC89C52或STC15系列,那“I/O口四种模式”就成了新的高频考点。四种模式分别是:准双向口模式、推挽输出模式、高阻输入模式、开漏输出模式。
推挽输出的特点是强拉电流能力强,适合驱动LED,能让灯更亮;准双向口适合做按键检测这种输入场景;高阻输入模式适合读取外部模拟比较器或者不干扰外部电路状态的场景;开漏输出必须外接上拉才能输出高电平,常用于I2C总线的线与逻辑。
考场上最容易错的是“上电复位后默认是哪一种模式”。STC单片机复位后P0~P3默认是准双向口模式,这和传统51的行为一致。如果题目问“如何把某个I/O口配置为推挽输出”,通常情况下需要写对应的PxM0/PxM1寄存器,不同型号寄存器名略有差异,但思路都是两个控制位组合选择四种模式。
2.5 按键消抖、4x4键盘上拉与LED防反压
热搜词里“4*4键盘用不用上拉电阻”反映了大家在矩阵键盘上的困惑。传统51的P1口内部有上拉,所以矩阵键盘不接上拉也能工作;但用P0口做矩阵键盘就必须加外部上拉。如果用的是增强型单片机且配置了高阻输入模式,也必须开内部上拉或外部加上拉电阻,否则电平悬空会导致误触发。
按键抖动是硬件题常客,我的答题模板是“硬件消抖用RS触发器或RC滤波,软件消抖用延时约10~20ms后再次读取确认”。卷子上问到“为什么要消抖”,原因是机械触点闭合/断开瞬间会产生连续抖动,持续时间约5~10ms,CPU若在抖动期间读取电平,就会把一次按下误判成多次触发。
LED驱动电路里“怎么防止反向电压烧坏LED”也是一个经典问法。LED反向耐压很低,如果电路接反或感性负载产生反向浪涌,灯珠就会烧毁。答案分三步:限流电阻限制正向电流;反接一个二极管或使用LED反并联结构来钳制反向电压;如果是感性负载场景(比如继电器、电机),要在负载两端并联续流二极管,防止自感电动势反向击穿驱动管和LED。
3. 中断与定时器:计算题和代码题的半壁江山
中断系统和定时器/计数器,是所有《单片机原理及应用》试卷里分值最高、也最能拉开差距的板块。这一部分掌握了,试卷基本就稳了一半。这里的复习标准不是“看懂”,而是“能默写整个初始化流程和初值计算过程”。
3.1 中断响应流程,按“5步口诀”记
中断是什么?用大白话说,你正在写代码,厨房水壶烧开了(中断源触发),你停下写代码(保护现场),去关火(执行中断服务函数),完事回来继续写(恢复现场)。卷子上问“CPU响应中断需要满足哪些条件”,我的答案是四句话:有中断源发出请求;该中断已通过IE寄存器使能;全局中断开关EA已打开;CPU当前没有在执行同级或更高级的中断服务。
中断响应过程往往要求简述,你按“请求→查询优先级→保护现场→跳转到中断入口→执行ISR→恢复现场→返回主程序”八步来答就够了。这里要特别注意“返回指令是RETI而不是RET”,RETI除了恢复PC指针还会清除中断优先级状态触发器,让同级中断可以被再次响应。每次考完试总有同学栽在这一分上。
51单片机的中断源和入口地址也要背熟,直接出成默写题也不奇怪:外部中断0(INT0,入口0003H)、定时器T0溢出中断(入口000BH)、外部中断1(INT1,入口0013H)、定时器T1溢出中断(入口001BH)、串口中断(入口0023H)。自然优先级由高到低按这个顺序排列。
3.2 定时器初值计算,推导一次记终身
定时器/计数器的本质是16位加法计数器,从初值开始,每个机器周期加1,加到65535后再加1就溢出,溢出时置位TF0/TF1标志并触发中断。所以初值的计算公式是:
初值 = 65536 – 需要计数的脉冲个数
先算机器周期:晶振12MHz时,机器周期 = 12 ÷ 12MHz = 1μs。想让定时器每1ms溢出一次,需要计数1000个脉冲,初值 = 65536 – 1000 = 64536,换成十六进制等于0xFC18。所以程序里写成:
TMOD = 0x01; // 定时器T0,方式1(16位定时) TH0 = 0xFC; // 高8位初值 TL0 = 0x18; // 低8位初值 TR0 = 1; // 启动T0做题时唯一容易错的地方是单位换算。如果题目给的是6MHz晶振,机器周期就是2μs,同样的1ms需要计数500个脉冲;如果是11.0592MHz晶振,这个频率是专门为串口波特率准备的,机器周期约1.0851μs,计算时题目通常会允许用近似值或直接给出计数个数。我建议你练习时把“已知晶振求机器周期→已知定时时长求计数个数→求初值→写TH/ TL”四步写全,考试时按步骤给分也能赚满。
3.3 TMOD和TCON各位的功能,必须精确到位
TMOD地址89H,不可位寻址。高四位控制T1,低四位控制T0,每位的含义是:GATE(门控位)、C/T(定时/计数模式选择)、M1M0(工作方式选择)。M1M0为00表示方式0(13位计数)、01是方式1(16位)、10是方式2(8位自动重装)、11是方式3(T0拆成两个8位定时器,T1则停止计数)。考题喜欢问“方式2有什么优点”,标准答案是“自动重装初值,无需软件重装,定时误差小,常用于波特率发生器”。
TCON地址88H,可以位寻址。低四位与外部中断相关:IT0/IT1是触发方式选择位(0为电平触发,1为边沿触发),IE0/IE1是外部中断请求标志位。高四位是TF1、TR1、TF0、TR0。在中断服务函数里,定时器溢出标志TF0会在硬件进入中断时自动清零,但外部中断和串口中断的标志位EA/RI必须软件清零,这个区别几乎年年考。
3.4 捕获与比较:PWM和“ARR达到CRR”背后的原理
热词“当CRR达到ARR”其实涉及的是增强型定时器的PWM/捕获比较原理。传统51教材里讲得少,但蓝桥杯单片机国赛、STM32课程、以及部分院校考研复试的扩展题里都爱考。
我给你的速记方式是:ARR是自动重装载值,决定计数周期;CRR是比较值,决定脉宽。计数从0递增到ARR,每计数到CRR时输出电平翻转一次。当计数器值小于CRR时输出一种电平,大于等于CRR时输出另一种电平,这样就产生了PWM波形。调节CRR就能调占空比,调节ARR就能调频率。
期末如果考到“如何用定时器产生1kHz、50%占空比的方波”,答题思路分三块:用定时器设定周期(1kHz对应1ms周期);在中断服务函数里每计数到设定值翻转一次I/O口;占空比通过修改翻转点来实现。这个题能把定时器和I/O口两个考点一次性考察,属于典型综合题。
3.5 定时器编程大题的标准写法
涉及定时器的编程大题,我建议你背熟一套“四步模板”:
// 第1步:配置定时器工作模式 TMOD = 0x01; // T0方式1,16位定时 // 第2步:装载初值 TH0 = 0xFC; // 依据晶振和定时时长计算 TL0 = 0x18; // 第3步:打开中断并启动定时器 EA = 1; // 总中断开关 ET0 = 1; // 允许T0中断 TR0 = 1; // 启动T0 // 第4步:编写中断服务函数 void T0_ISR(void) interrupt 1 { TH0 = 0xFC; // 方式1需软件重装初值 TL0 = 0x18; // 用户逻辑,比如P1 ^ 0 = ~P1 ^ 0; }如果是方式2自动重装,第4步就不需要软件重装初值,代码更简洁,这也是考试爱把方式2和波特率发生捆绑起来考的原因。注意:C语言里中断服务函数的关键字在不同编译环境下不一样。Keil C51用的是interrupt加中断号,写错中断号,程序会莫名跳飞。平时实验课上这块最容易翻车,考试填空题也爱考。
4. 串口通信与常用外设:通信类考题的固定套路
串口部分是另一块计算和代码重点。51单片机的串口全双工UART通过TXD(P3.1)发送、RXD(P3.0)接收,与外部通信时SBUF担任“收发信箱”,SCON负责状态与控制。考试题型相对固定:算波特率、填SCON、写一个完整收发程序。
4.1 波特率计算,分清“倍频”就赢一半
51单片机串口工作在方式1时,波特率由定时器T1的溢出率决定,公式是:
波特率 = 2^SMOD ÷ 32 × T1溢出率
T1工作在方式2(8位自动重装)时,溢出率 = 晶振频率 ÷ (12 × (256 – TH1))。
把两个公式合并,就得到常用于应试的完整公式:
波特率 = (2^SMOD ÷ 32) × fosc ÷ (12 × (256 – TH1))
做题时一般已知波特率求TH1,例如:fosc=11.0592MHz,波特率9600,SMOD=0,求TH1。代入后250H的数值会得到一个整数,这正是11.0592MHz晶振的妙处——专门让波特率误差为零。TH1计算结果约为0xFD。
题干里如果写了“SMOD=1”,波特率翻倍,公式里的2^SMOD变成2,这一步别漏。填空题问你“波特率的单位是什么”,答案写成“bps(bit/s,每秒传输的比特数)”,而不要写“字节/s”。
4.2 SCON寄存器:方式选择与控制位
SCON地址98H,可以位寻址。核心位有:SM0、SM1选择串口工作方式(00为方式0同步移位寄存器、01为方式1 8位UART、10为方式2 9位UART、11为方式3 9位UART变波特率);REN是接收允许控制位,置1开启接收;TI是发送中断标志,发送完一帧后硬件置1,必须软件清零;RI是接收中断标志,接收完一帧后硬件置1,也必须软件清零。
考试最常见的代码题是“写一段51单片机串口发送字符串的程序”,套路是:
void UART_SendByte(unsigned char dat) { SBUF = dat; // 数据送入发送缓冲区 while (!TI); // 等待发送完成 TI = 0; // 软件清发送标志 } void UART_SendString(char *s) { while (*s) { UART_SendByte(*s++); } }接收程序则要养成先查RI再读SBUF的习惯:电平触发下,如果不先清RI就读SBUF,可能会把上一个数据再读一遍,丢数据就发生在这里。中断方式接收时,还要记得在ISR里清RI。
4.3 数码管、LCD1602的答题模板
数码管显示分成静态显示和动态扫描两种。静态显示就是每个数码管独占一个锁存器,CPU写入一次便保持显示,占用I/O口多但程序简单;动态扫描是所有数码管共用段选线,分别控制位选线,轮流点亮每一位,利用视觉暂留实现“同时”显示。考题常问“动态扫描的原理”,标准答案是“利用人眼的视觉暂留效应,逐位轮流点亮,刷新频率应大于50Hz”。
LCD1602的考点通常集中在时序:写指令/写数据前要检查忙标志BF;RS选择指令/数据寄存器,RW选择读/写,E是使能脉冲;读数时E高电平有效,写数据时在E下降沿锁存。答题模板按“初始化→设置显示模式→写命令→写数据”四步展开,平时实验做过的同学在卷面上复述一遍流程即可。
4.4 其他外设复习优先级
期末时间有限,其他外设不需要面面俱到,我按考频从高到低做个参考:
| 外设/知识点 | 常见考查方式 | 复习优先级 |
|---|---|---|
| 数码管 | 动态扫描原理、段码计算 | 高 |
| 按键与消抖 | 原理、矩阵键盘扫描 | 高 |
| LED点阵 | 行选列选概念、扫描原理 | 中 |
| ADC0809/DAC0832 | 引脚功能、转换流程 | 中 |
| DS18B20 | 单总线时序、温度计算 | 中 |
| I2C / SPI | 时序特点、典型器件 | 低(复试可能考) |
复习的时候,每个外设都用同一套三问法:它是什么接口(并行/串行)?数据传输靠哪几个引脚?初始化要写哪一个控制寄存器?三问能答上,选择题和简答题基本不会丢分。
5. 指令系统与C语言考点:不用背全部指令也能拿分
很多同学一看到指令系统就头大,111条指令确实背不完。但你仔细翻历年真题会发现,常考的就那三四十条。与其全背,不如先把“寻址方式”和“高频指令分类”两块吃透,再上手C语言考点的刷题。
5.1 寻址方式,一张表分清
寻址方式这一节的判断方法是:看操作数长什么样。
| 寻址方式 | 操作数示例 | 核心识别点 |
|---|---|---|
| 立即寻址 | MOV A, #55H | 操作数前有#,立即数本身 |
| 直接寻址 | MOV A, 55H | 直接给出字节地址 |
| 寄存器寻址 | MOV A, R0 | 操作数是R0~R7或ACC、B、DPTR |
| 寄存器间接寻址 | MOV A, @R0 | 操作数前有@,地址存放在寄存器中 |
| 变址寻址 | MOVC A, @A+DPTR | 基址+偏移量,用于查表指令MOVC |
| 相对寻址 | SJMP rel | 仅用于转移指令,计算目标地址 |
| 位寻址 | SETB P1.0 | 操作对象是某一位 |
卷子上特别喜欢考“MOV A, @R1属于哪种寻址方式”,以及“查表指令MOVC A, @A+DPTR的寻址方式”。前者的关键是@,对应寄存器间接寻址;后者对应变址寻址。变址寻址只能用于读程序存储器,所以指令助记符是MOVC,这个细节也常出现在选择题里。
5.2 高频指令,按功能分组记忆
我把考试最常考的指令归纳成四组,每组的症状和用途都很典型:
- 数据传送类:
MOV A, #data(立即数送A)、MOV direct, A(A送直接地址)、MOV A, @R0(间接寻址读内存)、PUSH direct/POP direct(入栈出栈,子程序保护现场常用)。 - 算术逻辑类:
ADD A, #data(普通加法)、SUBB A, direct(带借位减法,要先清CY)、ANL/ORL/XRL(与或异或)、RL/RR(循环移位,流水灯程序里常用)。 - 控制转移类:
LJMP addr16(长跳转64KB)、SJMP rel(短跳转)、CJNE A, #data, rel(比较不等则转移)、DJNZ Rn, rel(减1非零转移,延时程序的最爱)。 - 位操作类:
SETB bit(置1)、CLR bit(清0)、JB bit, rel(该位为1则跳转)、JNB bit, rel(该位为0则跳转)。
理解完这些指令,再去看延时程序。很多人背过“DJNZ实现延时”,但不知道延时时间怎么算出来的。机器周期乘指令执行周期,比如12MHz晶振下,一个DJNZ指令是2个机器周期即2μs,循环250次就是500μs,双层嵌套就是约125ms级别延时。考试让你写延时函数或估算延时时间,套这个思路就行。
5.3 C语言版编程大题,改错题和填空题的应对
现在很多学校卷面上都增加了C语言比重,最常见的是给一段有bug的程序让你改错,或者留几个空让你填。踩坑集中在四个地方:
- 头文件缺失:
#include <reg51.h>没写,特殊功能寄存器SFR全部无法识别,编译直接报错。 - 位变量定义错误:
sbit P1_0 = P1^0;这一句写错或漏写,点灯程序里的位操作就会出问题。 - 中断号写错:
void T0_ISR(void) interrupt 1,写成了其它中断号,编译器不会报警,但中断服务函数怎么都不执行。 - 初值进制混乱:十六进制少了前缀0x,八进制和十进制混用,初值算对但代码全错。
看卷子时,只要养成“先查头文件、再查SFR定义、再查中断号、最后查初值”的四步检查习惯,改错题基本都能拿下。
5.4 KEIL里“code超了内存”的应对逻辑
热词里“STC单片机如何判断程序超出内存”实际上问的是编译器提示。KEIL编译后会输出一段总结:Program Size: data=xxx, xdata=xxx, code=xxx。当code后数字超过芯片Flash容量,比如STC15系列4KB Flash而编译出5000字节,就会报out of memory。
定位和处理思路是:先看哪个文件占的code最多,缩短延时函数里的无意义循环、把常量表格放进code段而不是ram、禁用未使用的库函数或改用更小的内存模型。复试被问到嵌入式资源优化时,这个“先用编译器分段统计定位,再针对性瘦身”的思路可以直接用上。
6. 复位、晶振与抗干扰:硬件题里最容易被忽略的送分点
硬件设计类题目在试卷上往往只有五六分,但它是绝大多数同学的失分黑洞。原因很简单:复习时光看软件不看电路图,考场上给你一个最小系统原理图让你找错,完全没思路。
6.1 最小系统的三大件,画图题的标准答案
一个51单片机最小系统由三部分组成:电源电路、复位电路、晶振电路(部分题目还会加上EA引脚接高电平、下载/调试接口)。
复位电路有两种考法。上电复位:电容C和电阻R串联后接VCC与RST,上电瞬间电容充电相当于短路,RST获得高电平;充电完成后RST被电阻拉低,完成复位。按键复位:在RST与VCC之间串一个按键,按键按下时RST直接被拉高,手动触发复位。计算题会问你“复位时间取决于什么”,答案取决于RC时间常数,通常要求大于2个机器周期,实际操作中电容10μF、电阻10kΩ左右就是经典组合。
晶振电路画法:单片机XTAL1和XTAL2之间接石英晶振,两个引脚各接一个20~30pF负载电容到地。题目如果问“为什么晶振旁边要接电容”,答案是匹配负载电容以稳定振荡频率和起振条件。
6.2 机器周期、状态周期、时钟周期的换算
考试必考的“周期”换算,套路固定:时钟周期是最小的,即晶振频率的倒数。一个状态周期(S)等于2个时钟周期。一个机器周期等于6个状态周期,也就是12个时钟周期。12MHz晶振时:时钟周期约0.0833μs,机器周期1μs,单指令执行时间1~4μs不等。背熟这个递推关系,遇到6MHz晶振就能自己按比例算了。
考场上还容易出“ALE信号的频率是多少”这类题。ALE在每个机器周期输出2个脉冲,所以ALE频率是晶振频率的1/6,2MHz(12MHz晶振时)。这题能考倒一堆人,因为它需要你把“机器周期”和“ALE信号”两个概念串联起来。
6.3 常见硬件设计和抗干扰考点总结
- LED驱动:LED必须串限流电阻,计算方式是(电源电压 – LED压降) / 目标电流。比如5V电源、LED压降2V、目标电流10mA,限流电阻就是300Ω,实务中常用330Ω或470Ω。
- 继电器/电机驱动:不能直接用I/O口驱动,必须加三极管或MOS管;感性负载必须并联续流二极管,防止反向电动势损坏驱动管。这个点对应热词“单片机驱动MOS”和“怎么防止反向电压烧坏LED”。
- 电源滤波:芯片电源引脚靠近放置0.1μF去耦电容,滤除高频噪声;电源入口放一个大电容稳定电压。
- 光电隔离:在强电与弱电控制之间使用光耦,切断地环路,防止干扰回灌烧毁单片机。
- 上拉电阻的作用:提高驱动能力、确定空闲电平稳态、抑制干扰。
硬件大题里经常给一个家电控制电路,让你找设计里的错误。常见的错误就是那几类:LED没加限流电阻、继电器没加续流二极管、按键没做消抖、I/O口直接驱动重负载、晶振电容取值离谱。你把这类“找茬题”记忆成一套错误清单,做题速度会快很多。
6.4 从最小系统到程序烧录,完整链路要能说清
部分学校在简答题里会考“STC单片机如何下载程序”。STC系列通过串口ISP下载,核心步骤是:下载软件选择正确的串口号和芯片型号→单片机断电→点击下载按钮→给单片机上电→软件检测到上电动作后开始擦除并烧录Flash→烧录完成后自动运行用户程序。因为这个过程涉及“先点下载再上电”的特殊时序,所以也叫“冷启动下载”。
复试如果追问“为什么STC要冷启动才能下载”,你应该回答:STC的ISP引导程序在芯片上电复位后首先运行,检测串口是否收到合法的下载命令,收到则进入下载模式,否则跳过引导区直接运行用户程序。所以必须先让引导程序先跑起来,才能捕获下载指令。这个答案比单纯说“厂家设定”更有技术含量。
7. 考前一周的冲刺战术:从“好像会了”到“稳稳90+”
知识框架和题型方法都过完之后,最后一步就是考前冲刺。很多人复习完知识点直接上考场,结果做题手生,这是很亏的。考前一周的练习策略决定了你能不能把“会”变成“得分”。
7.1 三天一循环,专攻计算和代码
我的冲刺安排是三天一个循环。第一天专攻定时器初值计算和波特率计算,每种题型各做8道题;第二天专攻中断系统判断题和编程填空题,把中断初始化四步模板默写三遍;第三天专攻串口通信与硬件分析,把SCON每位功能和最小系统图各画一遍。第五天到第七天做套题和错题回顾。
命令式和驱动式复习的区别就在这:背诵名词解释是“输入”,做计算题和默写代码是“输出”,考试考的是输出能力。如果你发现自己看完答案觉得很简单,但合上答案写不出来,说明还停留在“识别答案”阶段,必须用默写和改错来强制自己进入“生成答案”状态。
7.2 高频题型清单,考前最后一晚对照自查
我按常见试卷结构列了一份自查清单,考前最后一晚逐项打勾:
| 题型 | 常见问法 | 自查结论 |
|---|---|---|
| 填空 | P0口上电默认模式、复位PC值、ALE频率 | 是否全部能脱口而出 |
| 选择 | 寻址方式判断、工作方式选择、中断优先级 | 错误选项能否排除 |
| 判断 | 程序存储器是否可写、定时器是否自动重装 | 每句话能否说出对/错原因 |
| 简答 | 最小系统组成、中断响应过程、动态扫描原理 | 能否按条理写出要点 |
| 计算 | 定时器初值、波特率、机器周期 | 能否写出完整推导步骤 |
| 编程 | 定时器中断、串口收发、流水灯 | 能否快速写出四步模板 |
| 硬件图 | 晶振/复位电路、LED驱动、继电器驱动 | 能否标出每个元件作用 |
这个自查清单比押题靠谱,因为它覆盖的是“题型能力”而不是“孤立的某个知识点”。
7.3 补考、专升本、考研复试的差异化调整
补考和期末冲刺目标一致,都是及格或优,重点放在历年题型的反复刷,因为补考试卷往往和正常期末同题库抽取,题型高度相似。
专升本备考除了正常知识点,要额外关注简答题和综合应用题,答题时养成“先写原理、再写过程、最后写结论”的格式习惯,因为阅卷是按点给分,步骤分占大头。
考研复试里单片机通常作为面试抽题或笔试科目。面试现场被问到单片机,一定要避免只背定义,而是用“是什么—如何工作—典型应用—注意事项”四段式展开。比如问到串口,先讲全双工UART是什么,再讲SBUF发送接收流程,再举一个单片机与PC通信的应用场景,最后补充提到波特率误差和接地问题。这套结构可以体现系统思维而非碎片记忆。
7.4 考场上最容易翻车的五个细节
第一,寄存器名字记混。TMOD和TCON容易混,SCON和PCON容易混,多默写几遍区分开。第二,初值计算完忘记转十六进制,或者十六进制前漏写0x。第三,中断服务函数里忘记清标志位,尤其是外部中断和串口中断。第四,C语言题目没检查头文件,reg51.h没写,满盘皆输。第五,简答题只写关键词不写完整句,阅卷老师找不到给分点。
进考场前五分钟,什么都别背了,就闭眼在脑子里过一遍最小系统图和四步初始化模板,状态自然安定下来。
这门课的复习,说到底就是在有限时间里做减法。框架先行、模块拆分、计算魔鬼训练、错题回顾,把每个环节扣到位,90分不是玄学。我平时带学生做单片机项目时发现,凡是能把定时器初值和中断响应讲清楚的人,拿到一块新开发板也很快能上手写代码。考试速成只是手段,理解单片机“怎么协同工作”的本能,才是这门课真正想留给你的东西。