第一次焊51单片机最小系统板的时候我犯过一个特别低级的错误把复位电容焊在了离RST引脚最远的一端通电后程序死活不进下载模式用万用表测RST电压一直在1.2V左右晃动查了两个晚上才发现是电容走线太长、充电回路被板子上其他走线干扰。从那以后我养成了一个习惯——凡是涉及最小系统的电路先画电源、时钟、复位这三条主干再谈其他功能。这篇文章就把51单片机最小系统从头到尾拆开讲一遍包含原理、参数计算、实物搭建顺序和排查方法适合刚接触单片机的学生也适合给做产品原型时需要自己画最小系统的工程师参考。1. 最小系统的边界哪些元件真的一颗都不能少1.1 51单片机正常工作的四个必要条件很多人第一次接触最小系统以为就是在单片机周围随便接几根线实际上51单片机要跑起来必须同时满足四个条件电源、时钟、复位、以及程序下载通道。四条缺一条单片机要么完全不工作要么能工作但没法烧程序要么运行不稳定、时不时死机。电源是基础VCC和GND之间必须有稳定的直流电压传统51单片机绝大多数是5V供电少部分如STC某些型号支持3.3V但典型应用还是5V。时钟是心脏它的作用是给单片机内部提供机器周期节拍51单片机执行一条指令需要若干个机器周期而机器周期由晶振频率分频得到如果没有时钟信号CPU内部的时序逻辑完全停摆。复位是启动开关上电瞬间必须让RST引脚保持一段时间的高电平让单片机内部寄存器回到确定状态程序计数器PC归零否则程序起始地址不确定运行结果天知道会是什么样。第四条程序下载通道经常被忽略。很多人画最小系统只画了单片机加晶振加复位结果发现芯片上是空的根本没有固件。51单片机不像STM32那样所有型号都带SWD调试口传统AT89S52要用ISP下载线STC系列要用串口下载这些下载引脚在最小系统板上必须预留出来。尤其是STC的串口下载P3.0RXD和P3.1TXD一旦被其他外设占用下载时就会冲突这也是很多初学者烧录失败的主要原因。1.2 必要元件与可省略元件的对照我在论坛里见过不少人晒自己的“最小系统板”有的板子上密密麻麻焊了一堆东西有的则精简到只有芯片和两个电容。到底哪些是必须的我用一张表把常见元件和它的作用列清楚是否需要一目了然。元件作用是否必要备注单片机如STC89C52、AT89S52核心必要选型决定电源电压和下载方式VCC-GND去耦电容100nF陶瓷滤除高频噪声强烈建议不装可能莫名复位或跑飞电解电容10uF~47uF储能、稳压建议供电线较长时尤其需要晶振11.0592MHz或12MHz提供时钟必要STC部分型号可省用内部IRC晶振负载电容20pF~33pF配合晶振起振必要用内部时钟时可省复位电容10uF上电复位延时必要如果不做外部复位单片机状态不确定复位电阻10kΩ复位引脚放电必要与复位电容组成RC回路EA引脚上拉电阻或直接接VCC选择内部程序存储必要若悬空可能从外部ROM取指电源LED指示灯指示供电可选调试时非常有用排针扩展接口引出IO和电源可选方便后续接传感器手动复位按键人工复位可选调试阶段强烈建议加这里要特别强调EA引脚。51单片机内部有程序存储器空间传统型号片内ROM只有4KB到8KBEA引脚接高电平时优先访问内部ROM接低电平时访问外部ROM。如果EA悬空或者接错单片机上电后会从错误的地方取指令表现出来就是程序不执行、IO口输出完全没反应。很多“最小系统不工作”的帖子最后查来查去就是EA没接VCC。1.3 和STM32最小系统的区别很多人搜索时会把51最小系统和STM32最小系统放一起看比如热词里就有STM32F103C8T6最小系统板原理图。这两者设计思路差异很大了解差异能帮你更快理解51的电路结构。STM32F103C8T6是3.3V供电板子上通常需要一颗AMS1117-3.3稳压芯片把5V转成3.3V还要考虑BOOT0和BOOT1引脚的启动模式选择下载方式则用SWD只需SWDIO、SWCLK、GND三根线。而51单片机传统型号直接5V供电不需要稳压芯片下载方式多为串口或ISP电路结构明显更简单。51的简单恰恰是它的优势。对初学者来说51最小系统的每个元件都能在原理上解释清楚电源、时钟、复位、下载四条线一目了然。STM32内部有PLL锁相环时钟树复杂得多外部晶振损坏时还可以用内部HSI时钟勉强运行定位问题时反而多一层干扰。51单片机则“诚实”得多晶振不起振就是不起振几乎不给你内部兜底的机会。所以我还是建议新手先把51最小系统吃透再去碰STM32底层概念通了后面学什么都快。2. 电源电路单片机不是接个5V就能跑2.1 几种常见供电方案怎么选51单片机最小系统的电源设计看起来简单实际上有很多细节。我见过有新手直接拿USB转TTL模块的3.3V供电给AT89S52结果芯片工作异常因为AT89S52的VCC范围通常是4.0V到5.5V3.3V已经低于下限。所以第一步是搞清楚你手里芯片的供电电压范围不要看到“单片机”三个字就默认5V。常见供电方案有三种。第一USB的5V直接供电这是最省事的方式但前提是你的USB口输出能力足够且板子上没有大电流外设。第二用7805这类线性稳压器把7V到12V的直流电稳压到5V适合用电池或老式电源适配器供电的场景缺点是7805压差大、发热明显。第三如果系统里有3.3V外设可以用AMS1117-3.3再加一级稳压但注意传统51本身不要接在3.3V这一路除非芯片手册明确支持。我个人的习惯是调试阶段用USB转串口模块上的5V输出或者直接用USB口经一颗自恢复保险丝进板子做成产品原型时则用AMS1117-5.0或7805并在输入输出端都加电容。注意AMS1117有固定输出版和可调输出版型号后缀一定要看准AMS1117-3.3和AMS1117-5.0引脚兼容但输出电压不同焊错就是灾难。2.2 去耦电容的位置比容量更重要很多资料会告诉你“VCC和GND之间要加104电容”但不说清楚为什么加、加在哪里。去耦电容的核心作用是在单片机IO口翻转瞬间提供局部电荷抑制电源线上的电压跌落和尖峰干扰。单片机在工作时内部成千上万个晶体管在开关电流变化率很高电源线本身有电感电流突变时会产生压降如果芯片旁边没有一颗低ESR的陶瓷电容VCC电压就会像海浪一样起伏轻则逻辑错误重则程序跑飞。容量选择上0.1uF104是标准配置频率特性好。位置才是关键必须尽可能靠近单片机VCC和GND引脚走线越短越好最好让电容和芯片在同一面走线直接连到引脚焊盘。为什么因为电容离得远电容两端的引线电感会削弱它的高频滤波能力。我见过有人把104电容放在板子角落中间隔了大半块覆铜效果几乎等于没放。除了104我习惯在电源入口再放一颗10uF到47uF的电解电容或钽电容负责低频储能。这颗电容的作用是应对整板电流的缓慢波动比如继电器吸合、LED矩阵全亮这类瞬间电流需求。电解电容的等效串联电阻较大高频性能差所以它和104是互补关系两颗都要缺一不可。2.3 电源指示和防反接最小系统板上有没有电源指示灯调试效率差距非常大。一颗LED串一个限流电阻并在VCC和GND之间通电就能肉眼确认电源是否到位。限流电阻的取值按LED工作电流2mA到5mA算就好5V供电时用1kΩ到2kΩ公式是R (VCC - V_LED) / I。红色LED压降大约1.8V到2.0V5V减去压降后除以电阻值就是电流。防反接电路虽然不算最小系统的必备项但我建议在电源入口加一颗肖特基二极管串联或者用一颗PMOS管做极性保护。用二极管串联最简单缺点是会有0.3V到0.5V的压降对5V系统影响不大。如果不做防反接电源线一旦接反单片机芯片大概率直接报废尤其STC89C52这类芯片反接后芯片发烫、电流剧增几秒钟就烧掉。我把这条写进来是因为真有人把USB的红黑线接反过包括我。3. 晶振电路11.0592MHz不是随便选的3.1 单片机的时钟来源外部晶振与内部IRC51单片机的时钟来源分为外部晶振和内部RC振荡器两种。传统AT89C51、AT89S52必须依赖外部晶振才能工作而STC89C52、STC12C5A60S2等型号内部集成了IRC振荡器不接外部晶振也能跑使用STC-ISP软件下载时可以配置时钟频率。既然STC可以不要外部晶振那为什么绝大多数最小系统板还是焊了晶振因为内部IRC的精度有限常温下误差通常在1%到2%而且会随温度、电压变化漂移。如果你只是点个LED、跑个流水灯内部IRC完全够用但如果要做串口通信尤其是和电脑、蓝牙模块、Wi-Fi模块通信波特率稍微偏一点数据传输就会出错。串口通信要求发送方和接收方的波特率误差在2%到3%以内才行内部IRC在这个场景下风险比较大。所以只要涉及串口我都会优先使用外部晶振。3.2 为什么串口通信都选11.0592MHz这个问题几乎每个学51的人都会遇到。11.0592MHz这个数字看起来很奇怪但它有一个独特优势用它做串口波特率发生器时定时器初值可以取到整数误差为零。51单片机的串口波特率由定时器1的溢出率决定公式是波特率 定时器1溢出率 / 32。定时器1工作在方式28位自动重装溢出率 晶振频率 / 12 / (256 - TH1)。把常用晶振频率代进去算12MHz晶振目标波特率9600TH1需要等于256 - 12000000 / 12 / 32 / 9600 256 - 3.255 ≈ 253或者252取253时实际波特率是12000000 / 12 / 32 / (256 - 253) 10416.7误差8.5%这个误差串口通信根本没法用。11.0592MHz晶振同样目标9600TH1 256 - 11059200 / 12 / 32 / 9600 256 - 3 253恰好是整数实际波特率就是9600误差0。这就是11.0592MHz在51世界里如此流行的根本原因。4800、2400、19200这些常用波特率用11.0592MHz都能得到整数初值。做串口通信、下载程序、和各种带串口外设对接时优先选11.0592MHz少走弯路。如果你只做定时器延时、不涉及通信12MHz则更方便因为它内部定时器计数更规律延时计算更直观。3.3 负载电容怎么取值晶振两端各接一颗电容到地这两颗电容叫负载电容作用是匹配晶振的谐振条件。值选错会出现什么情况晶振可以正常起振但频率会偏离标称值或者起振困难上电后有一两秒才起振甚至干脆不起振。负载电容的计算公式是CL (C1 * C2) / (C1 C2) Cstray其中C1、C2是晶振两端的接地电容Cstray是引脚和走线的寄生电容一般在3pF到5pF。如果要求晶振的负载电容是20pF两个电容相等即C1 C2 C那么CL C / 2 Cstray所以C 2 * (CL - Cstray)。按Cstray约5pF算C 2 * (20 - 5) 30pF这也是为什么22pF到30pF的电容最常见。实际使用时我用11.0592MHz晶振配22pF电容一直很稳定。有人在晶振两端并联一颗1MΩ电阻这在高增益振荡器中有助于稳定振荡和快速起振。51单片机的外部晶振电路里很多官方手册原理图没有这颗电阻不加也能正常工作。如果你焊接的板子晶振起振困难可以尝试在晶振两端并一颗1MΩ到10MΩ电阻通常能改善。3.4 晶振不起振的实战排查经验晶振不起振是最小系统最常见的故障之一现象是单片机完全没反应程序不运行下载时提示“单片机无应答”。排查顺序我建议是这样的。第一步用示波器或逻辑分析仪测晶振引脚。正常起振时晶振引脚对地能测到正弦波频率在标称值附近如果测到的是直流电平或者完全没有波形说明没起振。没有示波器的情况下可以用万用表的交流电压档量程打到最小测晶振引脚对地正常起振时通常能读到几十到几百毫伏的交流电压虽然不准但能判断是否起振。第二步检查负载电容。电容值不能太大见过有人用了0.1uF的瓷片电容代替22pF结果晶振完全不起振因为电容太大振荡条件不满足。电容值不能太小太小频率会偏高甚至也不起振。第三步检查晶振外壳是否接地。金属外壳晶振如果外壳引脚接地要确保焊点干净不要和旁边走线短路外壳悬空时尽量让外壳避开高频走线否则可能引入干扰。第四步也是最容易忽略的程序下载软件里选择的单片机型号和硬件型号不匹配导致芯片没进入ISP状态。这个问题往往被误判成晶振问题实际上晶振工作正常只是芯片没有运行用户程序。遇到“晶振不起振”的报错先确认芯片型号选对了再回头查硬件。4. 复位电路上电瞬间和复位按键背后的RC常数4.1 高电平复位的原理51单片机是低电平复位还是高电平复位答案是高电平复位。RST引脚保持高电平时单片机内部被强制复位RST恢复到低电平后单片机从0000H地址开始执行程序。上电复位的本质是利用电容两端电压不能突变的特性在上电瞬间把RST引脚拉高然后通过电阻慢慢放电让RST电压在几十毫秒内降到低电平。很多新手会搞混去参考AVR或STM32的复位电路画成低电平复位结果单片机永远处于复位状态。那种“NRST接10k上拉到3.3V、按键接地”的电路是STM32的套路不能直接搬到51上。51的复位电路标准画法是复位电容一端接VCC一端接RST引脚复位电阻一端接RST引脚一端接GND手动复位按键并联在电容两端或接在RST和VCC之间。上电瞬间电容相当于短路VCC直接给RST灌入高电平电容慢慢充满后RST通过电阻被拉到GND完成复位。4.2 上电复位的RC参数计算复位时间由RC充电时间常数决定时间常数τ R * C。51单片机数据手册要求RST有效高电平至少持续2个机器周期机器周期等于12个时钟周期以12MHz晶振为例一个机器周期是1us2个机器周期就是2us。理论上2us就能复位但实际工程里要考虑电源上升时间、晶振起振时间等因素所以通常把复位时间设计在10ms到200ms之间。标准电路的典型值是R 10kΩC 10uF时间常数τ 10k * 10uF 100ms。电容充电到单片机复位阈值电压大约VCC的60%到70%需要大约1个τ也就是100ms左右这个时间足够晶振稳定起振和电源稳定。如果你想缩短复位时间可以减小电容到4.7uF时间常数变成47ms如果电源上电很慢或者使用的是大容量电解电容供电复位时间可以适当加长用22uF电容配合10k电阻时间常数220ms保证可靠复位。这里有个细节复位电容的耐压值需要大于VCC一般用16V或者25V都行10V耐压的电解电容用在5V系统上虽然勉强够但余量太小不推荐。4.3 手动复位按键怎么接调试时没有复位按键很痛苦每次下载完程序都要重新拔插电源。手动复位按键的标准接法有两种。第一种按键并联在复位电容两端。按键按下时相当于把电容短路RST引脚被直接接到VCC实现复位松开后电容重新充电RST延时回到低电平。这种接法最常用画原理图时就是电容两端并一个按键。第二种按键接在RST和VCC之间按下时直接把VCC接到RST引脚。这两种接法电气效果差不多第一种多一个电容限流对引脚冲击更小我习惯用第一种。还要注意按键的抖动问题。机械按键按下和松开时会有几毫秒的抖动复位按键的抖动一般不会造成严重后果因为单片机复位有硬件延时你按下去的过程即使有抖动只要RST高电平持续时间足够复位依然有效。不过如果用的按键质量差氧化严重按下时接触电阻不稳定RST电压可能在阈值附近徘徊导致单片机反复复位。选购按键时尽量选带镀金触点的成本差几分钱可靠性差很多。4.4 复位异常的表现和排查复位电路出问题最常见的现象是单片机“半死不活”上电后程序不运行但芯片发烫不明显按复位键偶尔能跑起来断电再上电又不行或者下载程序时总是要手动按一下复位键才能烧录。这些症状都指向复位电路参数不当。排查时用万用表测RST引脚电压正常上电复位完成后RST电压应接近0V。如果测到明显高于0.3V甚至1V以上说明电容放电回路有问题可能电阻虚焊、阻值错误、或者RST引脚被其他电路拉高。如果RST电压一直是高电平那就是电阻开路电容永远不会放电。如果RST电压一直为低电平上电根本没有高电平脉冲说明电容开路或按键短路。5. EA引脚、存储启动逻辑与程序下载5.1 EA引脚决定程序从哪里取指EA引脚全称External Access是51单片机一个容易被忽视但对启动至关重要的引脚。EA接高电平时CPU优先从内部程序存储器取指令EA接低电平时CPU从外部程序存储器取指令。传统51单片机片内程序存储空间有限比如AT89C51只有4KB如果你的程序超过4KB就需要外部ROM扩展此时EA必须接地。对于绝大多数最小系统程序都在片内EA直接接VCC即可。EA引脚不能悬空。悬空时电平不确定可能偶尔能运行偶尔不能运行而且和温度、湿度、芯片个体差异都有关这种“时好时坏”的故障最难查。我画最小系统时EA引脚直接通过一颗10kΩ电阻接到VCC这样即使程序空间超过片内范围需要切换也可以方便地通过跳线改变不至于要飞线。5.2 51单片机的哈佛结构意味着什么搜索热词里有“51单片机哈佛结构”这里顺便讲清楚。哈佛结构指的是程序存储器和数据存储器在物理上分开各有独立的地址空间和访问总线。51单片机的程序空间用PSEN信号控制数据空间用RD和WR信号控制程序计数器PC访问的是ROM区数据指针DPTR访问的是RAM区两者互不干扰。这带来的好处是取指令和读写数据可以并行指令执行效率高代价是程序不能像冯诺依曼结构那样直接在RAM里运行。对做最小系统的人来说理解哈佛结构最实际的作用是程序存储器和数据存储器的扩展方式完全不同。程序存储器扩展用EEPROM或Flash芯片接PSEN信号数据存储器扩展用SRAM芯片接RD和WR信号。如果搞反了读写时序完全对不上扩展的存储器就像没有一样。5.3 程序下载的硬件通道串口下载和ISP下载51单片机最小系统的下载电路设计取决于你用的芯片品牌和型号。STC系列STC89C52、STC12C5A60S2等使用串口下载下载信号走RXDP3.0和TXDP3.1。你的最小系统板上需要预留这两个引脚的接口用USB转TTL模块连接电脑和单片机。STC下载有个冷启动要求点击下载按钮后给单片机上电芯片才能进入ISP下载模式。以前的老版本软件还要手动断电再上电新版本STC-ISP软件可以通过控制DTR和RTS引脚自动断电上电用CH340模块就能实现。AT89S系列AT89S51、AT89S52使用ISP下载下载信号走MOSI、MISO、SCK和RST需要一根USB ASP下载线。注意这里的RST在下载时会被拉高进入编程模式平时复位用。下载线不要带电插拔容易烧坏USB口我烧过两个USB转ASP的小板子都是因为带电拔线。5.4 下载失败的高频原因和排查下载失败是51最小系统调试中遇到最多的问题报错通常是“单片机无应答”或“握手失败”。我总结了几个高频原因。第一P3.0和P3.1被占用。有些板子在RXD、TXD上接了其他外设比如蓝牙模块、MAX232电平转换芯片这些外设会拉低或拉高串口电平导致下载握手失败。下载时最好让这两个引脚保持空闲。第二下载软件中选错了单片机型号。STC系列型号很多选错型号时芯片不会应答。第三波特率太高。老式芯片对高波特率支持不好把最高波特率降到9600或2400再试。第四冷启动时序不对。STC下载时必须先点“下载/编程”按钮再给单片机通电顺序反了就会失败。还有一个非常隐蔽的问题USB转TTL模块的TXD要接单片机的RXDRXD要接单片机的TXD交叉连接不是直连。很多新手第一次做串口下载直接TXD接TXD、RXD接RXD当然通讯不上。这个细节我说三遍都不嫌多因为几乎每个初学者都会栽在这里。6. 从面包板到PCB最小系统搭建的顺序和布局习惯6.1 面包板上的搭建步骤如果你手里没有现成的开发板想自己搭一个最小系统验证程序面包板是最快的工具。搭建顺序建议是先插单片机芯片确定方向再连接电源线和地线到面包板的电源轨然后装晶振和负载电容位置尽量靠近单片机晶振引脚接着装复位电容和电阻RST引脚附近最后接EA引脚到VCC。面包板有个特点是寄生电容和接触电阻大高频信号容易受干扰。51单片机的工作频率一般不高12MHz以下在面包板上搭最小系统完全可行。但要注意面包板电源轨的接触可靠性用万用表量一下VCC和GND之间是否存在虚接。我见过有人搭好电路后程序时好时坏最后发现是面包板电源轨的插孔氧化导致接触不良换一根跳线就好了。6.2 PCB布局晶振电容和复位电容的摆放做PCB时布局决定了最小系统的稳定性最核心的原则是“时钟电路和复位电路贴近芯片引脚”。晶振放单片机XTAL1和XTAL2引脚旁边负载电容的接地点要单独打过孔到主地不要和数字信号地混在一起。晶振下方不要走其他信号线避免高频振荡干扰周围信号。如果空间允许晶振周围铺一圈地铜效果更好。复位电容同样要靠近RST引脚。RC充电回路中电容到RST引脚的走线越短受外界干扰越小。复位电阻的位置相对随意但也要避免靠近大电流走线。电源去耦电容放在VCC和GND引脚旁边前面说过这个位置比容量更关键。回顾我自己第一次画最小系统板的教训当时为了追求板子体积小把晶振放在了板子边缘距离单片机引脚有1.5厘米结果晶振倒是能起振但程序运行到串口通信时偶发乱码后来把晶振挪到芯片旁边问题消失。高频电路里引线电感是看不见的敌人。6.3 地线处理最小系统稳定的隐形因素很多初学者画板子时地线就是一根细细的线绕一圈。对51最小系统这种简单电路来说大部分情况下能用但要做到稳定建议还是铺一整片地铜。地铜的作用有两个一个是提供低阻抗回流路径让电源和信号的回流电流走最短路径一个是屏蔽作用减少信号之间的串扰。地铜要注意的是避免“孤岛”。如果板子双面都有地铜必须在多个位置打地孔连接否则形成的地铜孤岛没有回流路径反而成为天线。电源走线建议比地线宽5V供电线上至少留20mil到30mil的线宽地线如果可以就整片铺。晶振外壳如果有接地脚接到地铜上并打孔不要悬空。6.4 最小系统应该引出哪些接口最小系统板做出来不只是让它自己跑后续要接传感器、接显示屏、接电机驱动所以接口预留也很关键。我一般引出以下几组电源接口VCC和GND各留两三个孔方便跳线P0口必须接上拉电阻10kΩ排阻最方便因为P0口是开漏输出不接上拉驱动能力很差P1、P2、P3口各留排针方便外接设备串口下载接口P3.0、P3.1和GND复位按键和电源指示灯放在板子边沿方便操作P0口上拉电阻这个细节特别值得强调。很多人在最小系统板上忘了给P0加上拉电阻导致LED流水灯亮度不均、按键检测失灵。P0口做普通IO输出时内部没有上拉晶体管必须外部加上拉电阻才能输出高电平。用10kΩ排阻很省事一端接VCC一端接P0口。7. 最小系统不工作的排查清单7.1 故障现象和原因对照表我把这些年遇到的最小系统故障整理成一张对照表排查时可以按图索骥。这张表是按故障现象归类的你可以根据自己的症状直接定位到最可能的原因。故障现象优先检查项再检查项上电后完全无反应LED不亮电源是否接通、电压是否正常单片机方向是否焊反芯片发烫电源是否反接、VCC和GND是否短路芯片是否已损坏程序不运行IO口无输出EA引脚是否接高电平晶振是否起振、复位是否完成能下载程序但运行不稳定去耦电容是否缺失电源线是否过长、纹波是否过大下载时“无应答”RXD/TXD是否交叉连接冷启动时序是否正确、芯片型号是否选对串口通信乱码晶振频率是否准确波特率配置是否和晶振匹配按复位键偶尔能启动复位电容是否虚焊复位电阻阻值是否偏大这张表不是万能的但能覆盖80%以上的问题。剩下20%往往出在一些匪夷所思的地方比如芯片引脚虚焊、PCB板短路、电容用错型号等。7.2 万用表排查流程从电压到通断没有示波器时万用表是排查最小系统故障的最主要工具。我建议按这个顺序测。第一步测电源。万用表直流电压档测VCC和GND之间确认电压在4.5V到5.5V之间5V系统。如果电压明显偏低断开后面所有负载单独测电源输出判断是电源本身的问题还是板子短路。第二步测芯片电源引脚。有时候VCC接口有5V但芯片引脚接触不良芯片没供电这种情况在面包板和手工焊接板上很常见。第三步测RST引脚电压。正常复位完成后应接近0V如果高于0.5V查复位电路。第四步通断档测晶振两个引脚之间的阻值正常应该是几十千欧到几百千欧如果接近0说明有短路如果无穷大说明晶振内部开路这种情况极少但遇到过。这些测量都是静态的能排除大部分硬件问题。如果静态测量都正常但程序还是不跑那就需要用示波器看动态波形了。7.3 用示波器看晶振和复位波形示波器是调试最小系统的终极工具。重点看三个波形。第一个是晶振引脚波形。探头接地夹子要尽量短探头尖端直接接触晶振引脚应该看到正弦波频率接近标称值。如果波形幅度很小可能负载电容太大如果频率明显偏低可能负载电容太大或晶振质量问题如果频率偏高可能负载电容太小。第二个是RST引脚波形。上电瞬间用示波器触发捕捉应该看到一个从高电平慢慢降到低电平的波形下降沿是电容充电的指数曲线形状。如果RST没有这个脉冲就是复位电路问题。第三个是下载时RXD/TXD引脚电平点击下载时应该有数据波形如果没有说明USB转TTL模块到单片机之间的链路有问题。示波器探头一般有10x档测高频晶振时建议用10x因为1x档探头输入电容大可能改变振荡电路的工作状态导致原本能起振的晶振测了之后反而不振。7.4 最小系统的验证程序点灯硬件排查完写一个最简单的点灯程序验证整个系统是否正常。这个程序只有几十行但能同时验证电源、时钟、复位、程序下载和IO口输出。#include reg52.h sbit LED P1^0; void delay(unsigned int t) { unsigned int i; while(t--) { for(i 0; i 125; i); } } void main() { LED 1; // 初始状态灭 while(1) { LED 0; // 点亮 delay(500); // 延时约500ms LED 1; // 熄灭 delay(500); // 延时约500ms } }注意这个延时函数在12MHz晶振下大约延时500ms在11.0592MHz晶振下稍有偏差但肉眼观察闪烁频率差异不大。如果LED按预期闪烁说明最小系统的四大核心部分全部正常如果LED常亮或常灭检查IO口的接线方向和LED极性如果完全不亮也不灭回到上文的排查流程继续查。把程序烧进去那一刻LED有节奏地闪烁基本就可以宣布最小系统调试成功。之后你就可以在这个基础上扩展按键、数码管、传感器一步步做自己想要的完整项目。做最小系统这件事最忌讳的就是跳过原理直接照抄电路图。芯片手册里关于电源、时钟、复位的时序要求每一条都有它存在的理由。你在实际项目中遇到的大多数稳定性问题都能追溯到最小系统设计时留下的隐患。花一周时间把最小系统每个元器件的作用和参数计算吃透比拿开发板跑一百个例程都有价值。
