# AT89C51 八路 LED：仿真检查

测试条件由用户确认：5V、12MHz，八灯依次点亮的流水灯测试。

## 流水灯程序结果

在本机 Keil µVision 的 S8051.dll 仿真器中完成真实程序执行。构建结果为 0 错误、0 警告，生成的程序为 135 字节。

从 P0 特殊功能寄存器读取到的序列为：`FF → FE FD FB F7 EF DF BF 7F → FE FD FB F7 EF DF BF 7F → FF`。
16 个亮灯保持时间为 0.201210–0.201247 秒，约每 201ms 切换一盏灯；两轮后停止并全灭。测试程序逻辑与时序检查通过。

将上述真实 P0 采样记录作为 ngspice LED 负载模型的单向激励后，16 个亮灯区间均与预期支路一致。该过程使用理想低电平夹位测试电流需求，没有模拟过载对 CPU 的反馈。网页版动画是这些真实记录的回放，亮度不代表实际发光强度。

程序源文件与可重跑的 Keil 工程位于 `firmware`；HEX和原始日志由运行时生成，不随源码仓库上传。解析后的真实采样数据保留在results.json与p0_trace.csv。

## 电路检查结论

原图的连线可实现低电平点亮 LED 的逻辑，但原参数不能作为已验证可靠的实物设计。发现 LED 负载过重、慢速上电时自动复位失效两项问题。

采用本机实际 **ngspice 46** 引擎运行了 LED 直流负载、不同电源上升时间的复位瞬态以及按键复位测试。输入网表、原始日志与结果 CSV 均在相邻的 `analog` 文件夹。

### 1. LED 负载

| 测试量 | 原图：120Ω | 对照：1.5kΩ |
|---|---:|---:|
| 单个 LED 电流 | 20.40mA | 1.74mA |
| 单个 P0 引脚所需灌电流（含 10kΩ 上拉） | 20.85mA | 2.20mA |
| 八灯全亮时整个 P0 端口所需灌电流 | 166.80mA | 17.57mA |

上述值是 VCC=5V、引脚低电平夹位为 0.45V 时的**负载需求**，不是对已经过载的真实芯片引脚电流的预测。LED 使用示例黄光二极管模型，原照片没有给出 LED 的准确型号。

AT89C51 数据手册规定：稳态单个端口引脚电流不超过 10mA，P0 端口总电流不超过 26mA；P0 的 VOL≤0.45V 参数在 3.2mA 测试电流下给出。原图即使每次只点亮一盏灯，也超出单脚稳态限制。八灯全亮属于额外负载检查，并非流水灯程序的正常状态。

1.5kΩ 对照在 4.5–5.5V 电源、0–0.45V 低电平夹位组合下，示例模型的最大单脚需求约 2.91mA，八路约 23.31mA。该结论针对这些测试条件，不能替代实际 LED 型号、温度与元件容差验证。

### 2. 上电复位

C3 保持 10µF；RST 内部下拉以 100kΩ 建模，位于数据手册的 50–300kΩ 范围内。RST 高电平阈值使用 0.7×VCC；只在电源达到 4V 后统计有效高电平。

| 电源 0→5V 上升时间 | R1=200Ω：上升结束时 RST | R1=10kΩ：上升结束时 RST |
|---|---:|---:|
| 1µs | 5.00V | 5.00V |
| 1ms | 3.93V | 4.97V |
| 10ms | 0.99V | 4.73V |
| 100ms | 0.10V | 3.03V |

原图 R1=200Ω 在理想快速上电后只有约 0.71ms 的有效高电平；10ms 上电时没有有效复位窗口。晶振启动时间未建模，因此快速上电下有脉冲也不等于一定能成功启动。

R1=10kΩ 在 10ms 上电结束后仍有约 27.5ms 的高电平窗口，改善了本项测试；100ms 上电仍未通过。若电源上升过程无法保证，应采用合适的复位监控器，并按实际电源和器件验证。

### 3. 手动复位

模拟电源在 10ms 内上升并稳定后，于 40ms 按下复位按钮、保持 20ms。原图 200Ω 电路的 RST 达到约 4.98V。若此时晶振已经正常运行，可满足复位高电平条件。这解释了某些电路需要按复位按钮后才开始工作的现象。

## 验证范围

- 这次采用 Keil 软件仿真与 ngspice 分项电气模型，不是 Proteus 原生工程的整机联动仿真。
- 单片机程序以理想 12MHz 时钟运行；没有模拟晶振的模拟起振过程。
- 原图没有提供程序，测试固件是本次新编写的流水灯程序。
- 没有向实物单片机烧录，没有测量真实板卡，也没有验证 PCB、供电去耦、温度、LED 具体型号或全部容差。
- 原始 KiCad 复刻图保持原参数。1.5kΩ、10kΩ 是用于比较的改进参数，没有冒充原图参数。

## 参考

- [Microchip AT89C51 数据手册](https://ww1.microchip.com/downloads/en/devicedoc/doc0265.pdf)：第3页 RST，第4页晶振，第10页电流、阈值和内部下拉参数。
- [ngspice 官方文档](https://ngspice.sourceforge.io/docs.html)
- [Keil 调试批处理命令](https://www.keil.com/support/man/docs/uv4/uv4_commandline.asp)
