目录
概述:文章摘要:AT89C52是一款基于8051内核的8位单片机,包含8KB Flash程序存储器、256B RAM、3个定时器/计数器、全双工串口和8个中断源。其40引脚PDIP封装提供32个可编程I/O口,支持多种外设控制。存储结构分为程序存储器(8KB片内Flash)、数据存储器(128B通用RAM+128B SFR)和可扩展64KB片外RAM。定时器/计数器包含T0/T1的4种工作模式和T2的增强功能(捕获/自动重装)。中断系统支持6个中断向量和2级优先级管理。使用需注意P0口上拉电阻、晶振选型和存储空间分配等要点。
1AT89C52原理图及结构框图
1.1 原理图
如上图所示,AT89C52 单片机有 PDIP(双列直插式封装)、PQFP/TQFP(塑料四方扁平封装)和 PLCC(塑料有引线芯片载体封装)三种封装形式,以适应不同产品的需求。PDIP 封装便于手工焊接与调试,适用于实验开发与小批量生产;PQFP/TQFP 封装具有引脚间距小、集成度高的特点,适合对体积要求严格的产品;PLCC 封装则在电气性能与散热方面表现出色,常用于对性能要求较高的工业级产品。
1.2 AT89C52 结构框图
1.2.1 8 位 CPU
ALU、累加器 A、程序计数器 PC、堆栈指针 SP、指令寄存器 IR 等
1.2.2 存储器
8 KB Flash ROM(程序存储器)
256 B RAM(128 B 通用 + 128 B 可位寻址)
1.2.3 I/O 端口
32 条可编程 I/O 线:P0~P3 四个 8 位端口
1.2.4 定时器 / 计数器
3 个 16 位可编程定时/计数器 T0、T1、T2
1.2.5 串行通信接口
全双工 UART(串口)
1.2.6 中断系统
8 个中断源、6 个中断向量、2 级优先级
1.2.7 时钟与复位
片内振荡器及时钟电路(XTAL1、XTAL2)
上电/手动复位逻辑(RST)
1.2.8 总线结构
内部 8-bit 数据总线
16-bit 地址总线(P0、P2 复用)
PSEN、ALE、EA 等控制总线
1.2.9 特殊功能寄存器区
控制/状态寄存器:TCON、TMOD、SCON、PCON、IE、IP 等
以上模块通过内部数据总线和地址总线互连,构成典型的 8051 内核微控制器。
2 AT89C52引脚介绍(PDIP)
AT89C52(40引脚PDIP封装)各引脚功能一览表
引脚号 |
引脚名 |
功能说明(第一功能 / 第二功能) |
1 |
P1.0 |
口线 P1.0;T2(定时器 2 外部计数输入) |
2 |
P1.1 |
口线 P1.1;T2EX(定时器 2 捕获/重装触发) |
3 |
P1.2 |
口线 P1.2;普通 I/O |
4 |
P1.3 |
口线 P1.3;普通 I/O |
5 |
P1.4 |
口线 P1.4;普通 I/O |
6 |
P1.5 |
口线 P1.5;普通 I/O |
7 |
P1.6 |
口线 P1.6;普通 I/O |
8 |
P1.7 |
口线 P1.7;普通 I/O |
9 |
RST |
复位输入;高电平 ≥2 个机器周期复位 MCU |
10 |
P3.0 |
口线 P3.0;RXD(串口数据输入) |
11 |
P3.1 |
口线 P3.1;TXD(串口数据输出) |
12 |
P3.2 |
口线 P3.2;/INT0(外部中断 0) |
13 |
P3.3 |
口线 P3.3;/INT1(外部中断 1) |
14 |
P3.4 |
口线 P3.4;T0(定时器 0 外部计数输入) |
15 |
P3.5 |
口线 P3.5;T1(定时器 1 外部计数输入) |
16 |
P3.6 |
口线 P3.6;/WR(外部 RAM 写选通) |
17 |
P3.7 |
口线 P3.7;/RD(外部 RAM 读选通) |
18 |
XTAL2 |
晶振输出端(接晶振一端或外部时钟输入反相端) |
19 |
XTAL1 |
晶振输入端(接晶振另一端) |
20 |
GND |
地 |
21 |
P2.0 |
口线 P2.0;A8(高 8 位地址总线位 8) |
22 |
P2.1 |
口线 P2.1;A9 |
23 |
P2.2 |
口线 P2.2;A10 |
24 |
P2.3 |
口线 P2.3;A11 |
25 |
P2.4 |
口线 P2.4;A12 |
26 |
P2.5 |
口线 P2.5;A13 |
27 |
P2.6 |
口线 P2.6;A14 |
28 |
P2.7 |
口线 P2.7;A15 |
29 |
/PSEN |
程序存储器读选通(外部取指时为低电平) |
30 |
ALE |
地址锁存允许;平时输出 fosc/6 脉冲,可关闭 |
31 |
/EA |
外部访问使能;低电平时强制访问外部程序存储器;高电平时访问内部 Flash |
32 |
P0.7 |
口线 P0.7;AD7(地址/数据总线位 7,需外加上拉电阻) |
33 |
P0.6 |
口线 P0.6;AD6 |
34 |
P0.5 |
口线 P0.5;AD5 |
35 |
P0.4 |
口线 P0.4;AD4 |
36 |
P0.3 |
口线 P0.3;AD3 |
37 |
P0.2 |
口线 P0.2;AD2 |
38 |
P0.1 |
口线 P0.1;AD1 |
39 |
P0.0 |
口线 P0.0;AD0 |
40 |
VCC |
+5 V 电源 |
3AT89C52使用要点
1 P0 口做普通 I/O 时需外加上拉电阻(≈10 kΩ)。
2 ALE、/PSEN、/EA 在仅使用片内 Flash 时可固定接法:
/EA → VCC
ALE、/PSEN 可悬空或保留测试点。
3晶振典型值 11.0592 MHz(便于串口波特率整除),两引脚加 30 pF 负载电容到地。
4AT89C52的存储结构
AT89C52的存储结构=“三大块 + 可选扩展”
4.1程序存储器(ROM/Flash)——放代码
片内:8 KB(= 8×1024 B)闪存,地址 0000h~1FFFh
掉电不丢失,可重复擦写>1000 次
由 /EA 引脚决定片内/片外取指:
/EA = 1——>先片内 8 KB,超过 1FFFh 自动跳到片外
/EA = 0——>强制全部从片外 0000h 开始取指
片外:最大可扩到 64 KB(0000h~FFFFh)
通过P0(AD0~AD7)+ P2(A8~A15)+ /PSEN 选通并行总线
4.2数据存储器(RAM)—— 放变量/堆栈
1.片内 RAM 256 B(地址 00h~FFh)
├─ 低 128 B(00h~7Fh)
│ ├─ 00h~1Fh:4 组工作寄存器 R0~R7(RS0/RS1 选择)
│ ├─ 20h~2Fh:位寻址区(16 B×8 bit = 128 可位寻址位)
│ └─ 30h~7Fh:通用 RAM(函数局部变量、堆栈默认从此开始)
└─ 高 128 B(80h~FFh)
└─ 特殊功能寄存器区 SFR(与 RAM 统一编址,但用直接寻址访问)
例:P0=80h, SP=81h, DPL=82h, DPH=83h, TCON=88h ……
2. 片外数据 RAM(可选)
独立 64 KB 空间(0000h~FFFFh)
通过 P0 + P2 + /RD、/WR 选通,与程序空间并行但物理隔离
C 语言用关键字 `xdata` 访问:`unsigned char xdata buf[512];`
4.3特殊功能寄存器(SFR)—— 控外设
占用了片内 RAM 高 128 B 的地址 80h~FFh;常用的有
端口:P0~P3
定时器:TMOD, TCON, TL0/TH0, TL1/TH1, T2CON, RCAP2L/H
串口:SCON, SBUF, PCON
中断:IE, IP
统:SP, DPL, DPH, AUXR, WDTRST ……
4.4地址映射总览
存储区域 |
地址范围 |
说明 |
片内 Flash ROM |
0000h~1FFFh |
8 KB 程序代码(默认) |
片外 Flash/EPROM |
2000h~FFFFh |
可选扩展,最多 56 KB |
片内 RAM |
00h~7Fh |
128 B 通用/位/寄存器区 |
SFR |
80h~FFh |
128 B 特殊寄存器 |
片外 XRAM |
0000h~FFFFh |
可选扩展,最大 64 KB |
4.5使用小贴士
1. 片内 8 KB Flash 足够中小项目,无需外扩程序存储器;
若 /EA = 1,代码超过 8 KB 会自动到片外,无需手动切换。
2. 堆栈默认在片内 RAM 07Fh 向上增长;如用片外 XRAM,需手动改 SP。
3. 无内部 EEPROM;如需掉电数据保存,外挂 24C02 等 I²C EEPROM 最方便。
5定时器 / 计数器
AT89C52内部共有3个16位可编程定时/计数器:T0、T1 和 T2。它们都以“计数源→16 位加法计数器→溢出标志→中断/硬件事件”这一基本链路工作,但在计数源选择、工作模式、重装方式及附加功能上各有差异。下面按“共性-差异”方式概述其工作原理。
5.1 共性部分
1. 核心:16 位 THn+TLn 加法计数器(n = 0,1,2)。
2. 计数源:
内部 fOSC/12(定时方式,C/T=0)
外部 Tn 引脚负跳变(计数方式,C/T=1)
3. 溢出:FFFFH→0000H 时置位 TFx 标志,可请求中断。
4. 启停:由 TRn 位(TCON 或 T2CON 中)控制。
5. 读写:通过专用寄存器 THn/TLn 访问,均为 8 位,需分两次完成。
5.2 T0、T1 的 4 种工作模式(M1:M0 决定)
00 模式0:13 位(THn 高 8 位 + TLn 低 5 位),已淘汰。
01 模式1:16 位,一次计数,溢出后需软件重装初值。
10 模式2:8 位自动重装,TLn 计数,THn 存重装值。
11 模式3:T0 分裂为两个 8 位定时器,T1 停止计数(仅作波特率发生器)。
5.3 T2 的专用特性(8052 独有)
1. 计数器:TH2+TL2 仍为 16 位。
2. 捕获/自动重装:
由 T2CON 中 CP/RL2 位决定。
CP/RL2=1:捕获方式。当 T2EX(P1.1)出现负跳变时,把当前 TH2/TL2 锁存到 RCAP2H/RCAP2L,并置 EXF2 标志。
CP/RL2=0:自动重装方式。溢出时将 RCAP2H/RCAP2L 预存值装入 TH2/TL2,并置 TF2。
3. 计数源扩展:除 fOSC/12、T2(P1.0) 外,还可选“向下计数”模式(由 DCEN 位允许),实现可逆计数。
4. 时钟输出:置 T2OE=1 时,T2 引脚可输出 fOSC/24/(65536-初值) 的方波。
5. 中断:TF2(溢出)和 EXF2(捕获/外部重载)共用中断向量 5。
5.4 小结
T0、T1:经典 8051 定时器,模式简单,常用来产生延时、波特率或外部事件计数。
T2:8052 增强定时器,带捕获/自动重装、可选向下计数、时钟输出,适合更复杂的定时需求(如脉冲宽度测量、可编程时钟产生)。
6 中断系统
AT89C52的中断系统=“6 组固定中断向量 + 1 组共用中断向量 + 2 级优先级管理”
6.1 中断源一览
编号 |
向量地址 |
标志位 |
源/功能 |
触发方式 |
0 |
0003H |
IE0 |
外部中断 0 (INT0) |
低电平 / 下降沿 |
1 |
000BH |
TF0 |
定时器 0 溢出 |
内部计数溢出 |
2 |
0013H |
IE1 |
外部中断 1 (INT1) |
低电平 / 下降沿 |
3 |
001BH |
TF1 |
定时器 1 溢出 |
内部计数溢出 |
4 |
0023H |
RI/TI |
串行口 (UART) |
收完/发完 1 字节 |
5 |
002BH |
TF2+EXF2 |
定时器 2 |
溢出或捕获/重载 |
共 8 个“物理”中断源,但向量只有 6 个(T2 两个标志共用 002BH)。
6.2 控制寄存器
1. IE(A8H)——总中断允许
EA ES ET2 ES ET1 EX1 ET0 EX0
1 = 允许;0 = 屏蔽
2. IP(B8H)——优先级(1 = 高优先级,0 = 低优先级)
— — PT2 PS PT1 PX1 PT0 PX0
8052 新增 PT2,其余位含义同 8051。
3. T2CON(C8H)——T2 专用
TF2、EXF2 由软件清 0。
6.3 优先级与嵌套规则
两级:高优先级可打断低优先级,同级不嵌套。
同优先级内部再按自然序号 0→5 排队。
6.4 外部中断细节
IT0/IT1(TCON.0/TCON.2)
0 = 低电平触发(需手动撤除低电平才能再次触发)
1 = 下降沿触发(自动锁存,脉冲宽度 ≥ 1 机器周期即可)
6.5定时器中断
TF0/TF1 在计数器溢出时置 1,CPU 响应后硬件自动清 0。
TF2/EXF2 共用向量,中断服务程序需判断是溢出还是捕获/重载,再分别清 0。
6.6串行口中断
RI 和 TI 共用向量,进入服务程序后先读 SCON 判定是“接收完”还是“发送完”,再清相应标志。
6.7 中断响应流程(精简记忆版)
1. 标志置位 → 2. 总中断 EA=1 且对应位允许 → 3. 优先级仲裁 → 4. 完成当前指令 → 5. 自动把 PC 压栈 → 6. 装入向量地址 → 7. 执行 ISR → 8. RETI 返回。
6.8 使用技巧
下降沿触发外部中断时,ITn=1 可避免“电平保持”误触发。
高优先级 ISR 里可再被更高优先级打断,但同级或低优先级不能打断。
T2 的 TF2/EXF2 必须软件清 0,否则会不停地进入中断。