资讯动态

单片机原理复习指南:MCS-51定时器、中断与串口核心考点精讲

发布时间:2026/9/18 10:16:55 来源:尧图企业网站定制
简介华南理工大学单片机原理复习资料为一份doc格式的整理文档面向单片机原理课程的初学者与考前复习人群系统梳理数制转换、补码表示、逻辑运算特性并串联CPU组成、8051/8031引脚功能、内部存储器与堆栈指针等核心考点。资源共1个文件为约52KB的Word文档便于打印或按章节翻阅适合期末冲刺或日常查漏补缺目前已有140人浏览学习。文档针对具体题型提炼解题要点如十进制与二进制/十六进制互换、补码运算规则、指令与存储器基础概念可帮助读者快速建立知识框架提高单选题及基础概念题的得分效率。对于准备华南理工大学单片机原理考试或自学MCS-51架构的读者这份资料能提供清晰的复习线索和常见考点速览。1. 单片机原理复习为什么先看这张真题分布图华南理工的单片机原理课程复习资料的核心从来不是把教材从头翻一遍而是先把「考什么」和「怎么考」钉死。近几年卷面里MCS-51 的存储器结构、定时器/计数器、中断系统、串口通信四块加起来的分数通常能占到卷面的 60% 以上。换句话说搞懂这几个模块比背下来 100 页 PPT 更能保底。复习不是重新学一遍是把已有的知识点从「看过」变成「能推导」。这篇文章就沿着一条「先立架构、再抠寄存器、最后拿真题当调试用例」的路线把单片机原理复习里最容易被卡住的几个点一次捋清。2. MCS-51 的存储器结构复习时先画这张图2.1 程序存储器和数据存储器为什么要分开编址MCS-51 属于哈佛结构程序存储器和数据存储器是物理独立的两个空间这和 PC 上冯诺依曼结构「一份内存既跑代码又放数据」的思路完全不同。程序存储器用PC指针寻址容量最大 64KB地址范围0000H~FFFFH存放代码和查表用的常数表数据存储器又分成片内和片外两块片内 256 字节 RAM 用Ri或直接地址访问片外最多扩展 64KB 用MOVX指令访问。这里有个复习时容易绕进去的点片内 RAM 的00H~7FH是真正的通用寄存器区80H~FFH是 SFR特殊功能寄存器区。但在 52 子系列里80H~FFH曾有一段可由间接寻址访问的高 128 字节 RAM和 SFR 的地址是重合的。复习记忆技巧很简单直接寻址80H~FFH访问的一定是 SFR间接寻址R0/R1访问的是 RAM靠指令区分而不是靠地址区分。2.1.1 存储空间分配的易错点片内 RAM 的00H~1FH是工作寄存器组4 组轮流使用R0~R7由 PSW 的RS1、RS0两位决定当前用哪一组。20H~2FH是位寻址区16 字节共 128 个可位寻址的位30H~7FH是普通数据区通常把栈顶设置在这里。中断现场保护、函数传参、局部变量分配都要消耗栈空间而 51 的栈是向上增长的所以SP初始化时一般指向60H或70H而不是复位值07H否则一调用子程序就把工作寄存器区压垮了。2.2 外部存储器扩展MOVX 和总线时序要一起记扩展外部 RAM 或外部 ROM 时P0口分时复用先输出低 8 位地址再由 ALE 下降沿锁存到 74LS373接着P0切换为数据总线P2口输出高 8 位地址。读外部 RAM 用MOVX A, DPTR写用MOVX DPTR, A。复习时可以把这段时序自己手绘一遍地址 → ALE 下降沿 → 数据读/写 → RD/WR 有效一画就记住了。提示复习资料里常出现「片外程序存储器和片内程序存储器合并编址」的说法前提是EA引脚接高电平若EA接地则只从外部取指。这个引脚的状态直接决定单片机能不能跑内部 ROM 里的程序实验箱上程序死活跑不起来时第一个查它。2.3 特殊功能寄存器不是背而是推SFR 的复习不要逐字节硬背要按功能块记P0~P3是 IO 口锁存器TCON/TMOD管定时器SCON管串口IE/IP管中断PCON里最高位SMOD控制串口波特率加倍。复习时用一张表把「地址、位名称、复位值、功能」列出来每天默写一遍比反复看书有效。寄存器地址核心位/功能复位值TMOD89H高 4 位管 T1低 4 位管 T0GATE/C/T/M1/M000HTCON88HTF1/TR1/TF0/TR0 IE1/IT1/IE0/IT000HSCON98HSM0/SM1 决定串口工作方式REN 允许接收00HIEA8HEA 总开关 ES/ET1/EX1/ET0/EX000HIPB8H各中断优先级控制位00HPCON87HSMOD 波特率加倍位0XXX0000B3. 时钟、定时器和中断51 单片机的两大核心考点3.1 定时器/计数器初值计算先定模式再写公式定时器是华工单片机原理试卷的「钉子户」几乎每年都有一道 10 分以上的编程题。复习的关键不是背代码模板而是掌握「已知定时时间反推初值」的公式定时时间 T (2^N - 初值) × 机器周期其中N由工作方式决定方式 0 是 13 位高 8 位 低 5 位方式 1 是 16 位方式 2 是 8 位自动重装。12MHz 晶振下机器周期是 1μs所以方式 1 最大定时 65536μs方式 2 最大 256μs。若题目给的晶振是 11.0592MHz机器周期就是 12/11.0592≈1.085μs这时计算出来的初值通常不是整数要取整后反算实际误差。以 12MHz 晶振、定时 5ms、方式 1 为例// 设初值为 X则 (65536 - X) × 1μs 5000μs // 所以 X 65536 - 5000 60536 0xEC78 void Timer0_Init(void) { TMOD 0xF0; // 清零 T0 的模式位保留 T1 的配置 TMOD | 0x01; // T0 工作在方式 116 位定时器 TH0 0xEC; // 高 8 位初值 TL0 0x78; // 低 8 位初值 ET0 1; // 允许 T0 中断 EA 1; // 打开总中断 TR0 1; // 启动 T0 }TMOD 0xF0的意思是只改动低 4 位不影响 T1 的配置这是多人协作或者同时用两个定时器时必写的防御性代码。初值的拆分也很讲究0xEC写入TH00x78写入TL0顺序不能反因为定时器是从TH0:TL0组成的 16 位值开始往上计数的。3.2 中断响应过程五个步骤背下来不如推一遍51 单片机共有 5 个中断源外部中断 0、定时器 T0、外部中断 1、定时器 T1、串口。它们在IE寄存器里有独立的使能位在IP寄存器里有优先级设置位。中断响应的硬件过程是CPU 在每个机器周期的 S5P2 采样中断标志 → 若满足条件则进入中断响应周期 → 硬件自动把当前 PC 压栈 → 将对应中断入口地址装入 PC。复习时可以把中断入口地址做成一张小卡片中断源入口地址触发条件外部中断 00003HINT0 引脚低电平或下降沿定时器 T0000BHTF0 溢出置位外部中断 10013HINT1 引脚低电平或下降沿定时器 T1001BHTF1 溢出置位串口0023HRI 或 TI 置位很多复习资料会考「中断响应需要多长时间」标准答案是中断请求到响应至少需要 3 到 8 个机器周期取决于当前指令是否执行到最后一个机器周期以及是否有同级或高优先级中断正在服务。这也是为什么写实时性要求高的代码时中断服务函数里尽量不要调用耗时长的函数。3.2.1 外部中断触发方式的边界条件IT0/IT1位决定外部中断是电平触发还是下降沿触发。实际工程里按键接在INT0上时最好用下降沿触发避免按键按下时电平持续为低导致中断重复进入但若按键有抖动下降沿触发会在一瞬间产生多个脉冲。复习资料里常配套考法给出按键抖动波形图问为什么需要在中断服务函数里加延时消抖或者改用查询方式读取。3.3 串口通信的波特率计算这个公式每年都会出现51 单片机的串口工作在方式 1 时波特率由定时器 T1 的溢出率决定波特率 (2^SMOD / 32) × T1 溢出率 T1 溢出率 定时器计数频率 / (256 - TH1)当 T1 工作在方式 28 位自动重装时公式可以合并为波特率 (2^SMOD / 32) × (晶振频率 / 12) / (256 - TH1)用 11.0592MHz 晶振、SMOD0、波特率 9600 时void UART_Init(void) { SCON 0x50; // 方式 1REN1 允许接收 TMOD 0x0F; // 只改 T1 的部分 TMOD | 0x20; // T1 工作在方式 28 位自动重装 TH1 0xFD; // 初值 253对应波特率 9600 TL1 0xFD; // 方式 2 下 TH1 和 TL1 要一致 ES 1; // 允许串口中断 EA 1; // 开总中断 TR1 1; // 启动 T1 }11.0592MHz 晶振 ÷ 12 921600Hz921600 ÷ 32 2880028800 ÷256-253 9600正好整除。这就是为什么所有 51 开发板都用 11.0592MHz 晶振而不是 12MHz12MHz 算不出 9600 的整数初值串口通信会有累计误差。复习到串口这块建议自己动手算一组 4800 和 19200 的 TH1 初值算完就明白为什么有些题目会给出「误差允许范围」这种问法。4. 最小系统的硬件设计复习时拿原理图逐引脚过4.1 复位电路、晶振电路和 EA 引脚的相互配合51 单片机最小系统就三部分电源、时钟、复位。复位电路由 RC 组成上电瞬间 RST 引脚保持高电平至少 2 个机器周期然后电容充电完毕降为低电平单片机开始从0000H执行。实际电路里复位电阻取值 10kΩ、电容 10μF 是常见配置而晶振电路的两个 30pF 负载电容取值不是随便选的它要和晶振的负载电容匹配否则起振困难或者频率偏大。EA引脚在复习资料里的考法非常直接接VCC表示从片内程序存储器启动接地表示从片外启动。如果开发板上没有外部存储器芯片EA悬空不接程序完全跑不起来——这是硬件设计里最隐蔽的坑。4.1.1 单片机一键开关机电路和低功耗设计的关联热词里出现的「一键开关机电路」在原理复习里通常扩展为「掉电模式 外部中断唤醒」。把按键接在INT0上长按触发外部中断进入PCON的掉电模式PCON 0x01此时 CPU 停止运行但 RAM 内容保持。再次按键时外部中断把单片机唤醒。这个设计思路常被当作串讲题问掉电模式省了多少电流、唤醒后程序从哪里继续执行。答案是从断点处继续而不是从0000H重新启动。4.2 数码管动态扫描和 LED 驱动考察的是 IO 时序配合数码管显示看起来简单考的是「段选」和「位选」的配合。段选决定显示什么字形位选决定哪一位点亮。动态扫描就是逐位点亮利用人眼视觉暂留形成同时显示的错觉。刷新频率应在 50Hz 以上也就是每位点亮时间约 2ms8 位数码管一轮扫描约 16ms。复习资料里常见的代码模板void Display_Scan(void) { static unsigned char index 0; // 当前扫描到第几位 unsigned char code table[] {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8}; // 共阳极 0~7 的段码 P0 0xFF; // 消隐先关闭所有位选防止拖影 P2 (P2 0xF0) | (1 index); // 选中第 index 位 P0 table[显示缓冲区[index]]; // 输出段码 index (index 1) 0x07; // 指向下一位循环 }先消隐再选位是必须的操作如果不先关闭位选上一位的段码残留会叠加到下一位上显示效果就是明显的拖影。段码用code关键字存放在程序存储器里而不是运行时计算——51 单片机执行查表比执行除法快得多这是硬件约束下的常见做法。4.3 单片机控制可控硅电路图从触发到隔离的完整链路单片机控制可控硅的典型方案是MCU 的 IO 输出触发脉冲 → 经过三极管放大 → 驱动脉冲变压器 → 触发可控硅的门极。复习重点在触发条件可控硅一旦导通门极就失去控制作用要等主回路电流过零才能关断。所以 MCU 输出的是移相触发脉冲需要和市电过零点同步这就用到外部中断检测过零信号。实际工程里MCU 的 IO 不能直接接 220V 强电必须用光耦隔离。这既是安全要求也是复习题里常考的知识点问「为什么可控硅触发电路需要光电隔离」答案涉及两个层面一是保护 MCU 不被高压击穿二是防止强电干扰窜入弱电系统造成复位。热量高的时候还要考虑可控硅的散热片选型和触发脉冲宽度这个在原理课里不展开但做项目的同学会用到。5. 串口升级、存储扩展和综合设计题的复习路径5.1 在线升级的架构思路把 Bootloader 和 App 分开热词里「C51 单片机串口升级架构」和「STC 单片机 AI 在线编程」把复习视角从卷面拉到了工程。实现串口升级的常见方案是把程序存储器分成两段Bootloader 区例如0000H~0FFFH和 App 区1000H以后。Bootloader 上电先跑检测串口是否有下载命令若没有则跳转到 App 区执行。跳转代码是 C51 里的一个经典写法typedef void (*AppFunc)(void); #define APP_ADDR 0x1000 // App 区起始地址 void Jump_To_App(void) { AppFunc app; // 检查 App 区的复位向量是否为有效指令常见用 LJMP 0x02 开头 if (((unsigned char code *)APP_ADDR)[0] 0x02) { app (AppFunc)APP_ADDR; app(); // 跳转 } }((unsigned char code *)APP_ADDR)[0]这个写法是把0x1000地址强制转换成指向程序存储器的指针然后取第一个字节。51 编译器里code关键字专门用来声明程序存储器的指针普通指针访问的是数据存储器这两个空间地址会重叠但物理不是一回事。这个跳转前的合法性检查必不可少如果 App 区是空的跳过去就是跑飞。5.2 EEPROM 和 TF 卡存储数据落盘的两种路径中颖单片机和 STC 系列内部集成 EEPROM复习时把它当作「通过特殊功能寄存器间接访问的存储区」即可先向相关寄存器写入目标地址再写入数据然后启动编程查询忙标志直到完成。每次写操作前必须先擦除这是 Flash 类存储的共性。而「单片机存储到 TF 卡中以表格形式存储」这个需求工程链路就更长了MCU 通过 SPI 接口初始化 TF 卡 → 发送 CMD0 进入 SPI 模式 → 读取 CSD 寄存器获得容量 → 写入时必须按扇区512 字节对齐 → 表格数据要组织成 CSV 格式再填充到扇区缓冲区。这里最容易被卡住的点是TF 卡写入前必须先擦除扇区而且一次最少写一个扇区如果表格只有 34 行数据你依然要凑满 512 字节。实际项目中通常把表格存在 SRAM 里攒够 512 字节再一次写入。5.3 课程设计和毕业设计题把功能拆成模块再组装「基于51单片机汽车防盗报警」「基于单片机智能门禁系统」这类题目在原理复习范围内其实没有新知识点就是把键盘、显示、存储、报警输出组合起来。复习时建议按这个顺序拆题输入信号是什么 → 用什么引脚接收 → 信号处理用什么机制定时器轮询还是中断→ 输出设备怎么驱动 → 是否需要掉电保存数据。以智能门禁为例void Key_Scan(void) { static unsigned char last_state 0xFF; unsigned char cur P1 0x0F; // 4 个按键接在 P1.0~P1.3 if (cur ! last_state) // 状态变化进入判断 { if (cur 0x0E) // 检测到第一个键按下 { // 实际工程里还要加 10ms 延时消抖 password[input_len] 1; } } }设计题答辩时老师最爱问的问题就三个按键消抖怎么做的、断电后密码还能不能记住、报警信号延迟多久。原理复习阶段就把这三个问题的答案准备好答辩就不会慌。6. 最后两周的复习策略与自查清单6.1 高频考点速查表把考前的最后一轮复习做成一张自查表比反复翻 PPT 更省时间。对照下面每一条能在纸上写出来的就算过写不出来的回到对应章节重新推一遍考点自查要求常见误区存储器结构画出片内 RAM 分区和 SFR 分布地址重叠时搞混访问方式定时器方式设置写出 TMOD 位定义并手算初值忘记保留另一定时器的原有配置中断响应写出 5 个中断入口地址混淆外部中断和定时器中断的触发条件串口波特率由晶振推导 TH1 初值没考虑 SMOD 加倍位最小系统说明复位电路阻容值为什么这么选忽略 EA 引脚的接法数码管显示解释先消隐再选位的顺序扫描频率太低导致闪烁6.2 典型症状的排错思路当实验箱上的现象和预期不符时不要急着怀疑程序逻辑按下面的顺序查硬件和底层配置程序完全不运行先量VCC和GND电压再用示波器看晶振引脚有没有振荡波形。两个条件都满足后查RST引脚电平——正常运行时应该是低电平如果被按键电路或干扰拉高单片机就会反复复位。数码管亮度明显不均动态扫描周期太长或者消隐没做。把每位点亮时间压缩到 2ms 以内同时确认位选切换间有没有先关断输出。串口收乱码先用逻辑分析仪抓波形确认波特率是否标准再检查发送方和接收方的数据位、停止位、校验位配置是否一致。11.0592MHz 晶振下 9600 波特率的位误差非常小如果还是乱码多半是硬件连接问题而不是配置问题。最后两周的复习要落到「合上书能写出来」的程度。对着空白纸把每个寄存器的位定义默写一遍把定时器初值从公式推一遍把串口波特率的计算过程写一遍这三件事做完比任何模拟卷都管用。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价