AT89C51手册解读:特性、引脚、操作模式及编程详解
AT89C51 是一款低功耗、高性能的 CMOS 8 位单片机,在嵌入式控制领域应用广泛。深入了解其特性、引脚功能、操作模式和编程方法,对开发基于该芯片的应用系统至关重要。
一、AT89C51 主要特性剖析
(一)存储与兼容性
AT89C51 内部集成 4K 字节的系统内可重编程 Flash 存储器,具备 1000 次的写 / 擦除循环耐力,能满足多次程序更新需求。它完全兼容 MCS - 51 系列产品的指令集和引脚排列,开发者可基于成熟的 MCS - 51 开发经验进行项目开发,降低学习成本,提高开发效率。此外,片内拥有 128 字节的内部 RAM,为程序运行时的数据存储提供了空间。
(二)运行性能
支持全静态操作,工作频率范围为 0Hz 至 24MHz。在不同的应用场景下,可灵活调整工作频率,满足对速度和功耗的不同需求。例如,在对功耗要求苛刻的电池供电设备中,可将频率设置较低以降低功耗;而在对处理速度要求较高的实时控制场景中,则可提高频率。
(三)其他特性
它设置了三级程序存储器锁,增强程序代码的安全性,防止程序被非法读取或修改。拥有 32 条可编程 I/O 线,可满足多种外部设备的连接需求;具备两个 16 位定时器 / 计数器,用于实现定时、计数等功能;提供六个中断源,支持灵活的中断处理机制;集成可编程串行通道,便于实现与其他设备的串行通信。还具备低功耗的空闲模式和掉电模式,在空闲模式下,CPU 停止工作,但片内 RAM、定时器 / 计数器、串行端口和中断系统仍保持运行;掉电模式则停止振荡器工作,保存 RAM 内容,极大地降低系统功耗。
二、引脚功能深入解读
(一)电源引脚
VCC 为电源输入引脚,提供芯片工作所需的电能;GND 为接地引脚,是电路的参考地电位。
(二)I/O 端口引脚
- P0 端口:作为通用 I/O 口时,是 8 位开漏双向端口,输出时每个引脚能吸收 8 个 TTL 输入电流。写入 1 时,引脚呈高阻态输入。在访问外部程序和数据存储器时,P0 端口复用为低 8 位地址 / 数据总线,此时内部有上拉电阻。在 Flash 编程和验证时,P0 端口用于接收和输出代码字节。
- P1 端口:是带内部上拉电阻的 8 位双向 I/O 口,输出缓冲器可吸收 / 输出 4 个 TTL 输入电流。写入 1 后,引脚被内部上拉电阻拉高用作输入,外部拉低时会因上拉电阻产生灌电流。在 Flash 编程和验证时,用于接收低 8 位地址字节。
- P2 端口:同样带内部上拉电阻,功能与 P1 端口类似。在访问外部程序存储器和 16 位地址的外部数据存储器时,输出高 8 位地址;访问 8 位地址的外部数据存储器时,输出 P2 特殊功能寄存器的内容。在 Flash 编程和验证时,接收高 8 位地址和部分控制信号。
- P3 端口:是多功能的 8 位双向 I/O 口,除基本 I/O 功能外,各引脚还有特定的第二功能。如 P3.0 为串行输入端口 RXD,P3.1 为串行输出端口 TXD 等。在 Flash 编程和验证时,也接收部分控制信号 。
(三)控制引脚
- RST:复位输入引脚,当振荡器运行时,该引脚持续两个机器周期的高电平信号可使芯片复位,恢复到初始状态。
- ALE/PROG:在访问外部存储器时,ALE 用于锁存低 8 位地址,其输出频率为振荡器频率的 1/6,且在访问外部数据存储器时会跳过一个脉冲。在 Flash 编程时,该引脚用作编程脉冲输入。
- PSEN:外部程序存储器读选通信号,当从外部程序存储器取指令时,每个机器周期 PSEN 会被激活两次,但访问外部数据存储器时会跳过两次激活。
- \(\overline{EA}\) / \(V_{PP}\):外部访问允许引脚,当\(\overline{EA}\)接地时,芯片从外部程序存储器 0000H - FFFFH 地址处取指令;接高电平时,执行内部程序存储器的指令。在 Flash 编程时,该引脚接收编程电压\(V_{PP}\) 。
- XTAL1 和 XTAL2:用于连接外部振荡器或外部时钟源。XTAL1 是反相振荡器放大器的输入和内部时钟操作电路的输入;XTAL2 是反相振荡器放大器的输出。

三、操作模式全面解析
(一)空闲模式
通过软件进入空闲模式后,CPU 停止工作,片内其他外设继续运行,片内 RAM 和特殊功能寄存器的内容保持不变。可通过任何使能的中断或硬件复位退出空闲模式。需注意,由硬件复位退出时,在内部复位算法接管控制前,芯片通常会从停止处继续执行程序,为避免复位退出时意外写入端口引脚或外部存储器,调用空闲模式指令后的下一条指令不应是写端口引脚或外部存储器的指令。
(二)掉电模式
进入掉电模式后,振荡器停止工作,芯片仅保存片内 RAM 和特殊功能寄存器的值,直到硬件复位。复位时重新定义特殊功能寄存器,但不改变片内 RAM 内容。在\(V_{CC}\)恢复到正常工作电平前,不应激活复位信号,且复位信号需保持足够长时间,确保振荡器重启并稳定。
四、Flash 编程详细步骤
(一)编程模式选择
AT89C51 支持高电压(12V)和低电压(\(V_{CC}\))两种编程模式。芯片出厂时已启用其中一种模式,可通过芯片顶面标记和设备签名代码区分。
(二)编程流程
- 设置地址、数据和控制信号:依据 Flash 编程模式表及相关图表,配置好地址线、数据线和控制信号。
- 输入地址和数据:在地址线上输入要编程的存储单元地址,数据线上输入相应的数据字节。
- 激活控制信号:使能正确的控制信号组合。
- 施加编程电压:高电压编程模式下,将\(\overline{EA}\) / \(V_{PP}\)引脚电压提升到 12V。
- 执行编程脉冲:脉冲 ALE/PROG 一次,即可在 Flash 阵列或锁定位中写入一个字节。字节写入周期是自定时的,通常不超过 1.5ms。重复上述步骤,直至完成整个阵列的编程或达到目标文件末尾。
(三)编程状态监测
- 数据查询:通过数据查询可判断写周期是否结束。写周期中,读取最后写入字节时,P0.7 引脚会输出写入数据的反码;写周期完成后,所有输出引脚输出真实数据,即可开始下一个编程周期。
- 就绪 / 忙信号:利用 RDY/BSY 输出信号监测编程进度。编程时,ALE 变高后 P3.4 引脚拉低表示忙,编程完成后 P3.4 引脚拉高表示就绪。
(四)编程验证与擦除
若锁定位 LB1 和 LB2 未编程,可通过地址线和数据线读回已编程的代码数据进行验证,但锁定位无法直接验证,需通过观察其功能是否生效来间接验证。使用特定的控制信号组合并保持 ALE/PROG 引脚低电平 10ms,可实现整片 Flash 阵列的电擦除,擦除后代码阵列全为 “1”,在重新编程代码存储器前,必须执行芯片擦除操作。
AT89C51 单片机凭借丰富的特性、灵活的引脚功能、多样的操作模式和便捷的编程方式,在嵌入式系统开发中占据重要地位。开发者只有深入理解其各项功能和操作要点,才能充分发挥芯片性能,开发出高效、稳定的嵌入式应用系统。
本文参考来源:IC资料网AT89C51,有需要的可以自行下载。