AT89C52 / 数据手册 51单片机零基础训练营
0313F–12/97 · 中文

ATMEL · 8-BIT MICROCONTROLLER · 中文翻译版

AT89C52

含 8K 字节 Flash 可编程可擦除只读存储器的 8 位微控制器。与 MCS-51 指令集和引脚排列兼容。

原文:Atmel AT89C52 数据手册 · 文档编号 0313F–12/97
封装:PDIP-40 / PQFP-44 / TQFP-44 / PLCC-44

8KB片内 Flash
256B内部 RAM
32条可编程 I/O
3×16定时器 / 计数器
0–24MHz全静态工作
6源中断向量 · 两级

01特性

  • 与 MCS-51™ 产品兼容
  • 8K 字节可在系统内重新编程的 Flash 存储器
    • 耐用性:1,000 次写入 / 擦除循环
  • 全静态工作:0 Hz 至 24 MHz
  • 三级程序存储器锁定
  • 256 × 8 位内部 RAM
  • 32 条可编程 I/O 线
  • 三个 16 位定时器 / 计数器
  • 八个中断源
  • 可编程串行通道
  • 低功耗空闲(Idle)与掉电(Power Down)模式
一处口径差异

本节写“八个中断源”,正文第 8 节按六个中断向量(两个外部 + 三个定时器 + 串行口)展开;差异源于是否把定时器 2 的 TF2 与 EXF2 各算一路。设计寄存器使能位时以第 8 节的 IE 位定义为准。

02概述

AT89C52 是一款低功耗、高性能的 CMOS 8 位微计算机,内含 8K 字节的 Flash 可编程、可擦除只读存储器(PEROM)。该器件采用 Atmel 高密度非易失性存储器技术制造,与工业标准 80C51/80C52 指令集和引脚排列兼容。

片内 Flash 允许程序存储器在系统内或通过常规非易失性存储器编程器重新编程。通过在单片芯片上结合多功能 8 位 CPU 与 Flash,Atmel AT89C52 构成了一款功能强大的微计算机,为许多嵌入式控制应用提供了高度灵活且经济高效的解决方案。

AT89C52 提供以下标准特性:8K 字节 Flash、256 字节 RAM、32 条 I/O 线、三个 16 位定时器 / 计数器、六向量两级中断结构、全双工串行口、片上振荡器及时钟电路。此外,AT89C52 采用静态逻辑设计,可在低至零频率下运行,并支持两种软件可选择的省电模式。

空闲模式停止 CPU,同时允许 RAM、定时器 / 计数器、串行口和中断系统继续运行。掉电模式保存 RAM 内容但冻结振荡器,禁用所有其他芯片功能,直到下一次硬件复位。

03引脚配置

AT89C52 提供 PDIP、PQFP/TQFP 与 PLCC 等多种封装。各封装引脚排列如下。

引脚图PDIP(40 引线)/PQFP·TQFP(44 引线)/PLCC(44 引线)三种封装的正视引脚编号与信号名。括号内为 P3、P2 口的第二功能。

04引脚功能描述

电源

VCC:电源电压。GND:接地。

Port 0

Port 0 是一个 8 位漏极开路双向 I/O 口。作为输出口,每个引脚可灌入 8 个 TTL 输入。当向 Port 0 引脚写入 1 时,这些引脚可用作高阻输入。在访问外部程序 / 数据存储器期间,Port 0 还可被配置为复用的低 8 位地址 / 数据总线,此时 P0 内部有上拉电阻。

Port 0 在 Flash 编程期间接收代码字节,并在程序验证期间输出代码字节;程序验证期间需要外部上拉电阻。

Port 1

Port 1 是一个 8 位带内部上拉的双向 I/O 口。Port 1 输出缓冲器可灌入 / 输出四个 TTL 输入。当向 Port 1 引脚写入 1 时,引脚被内部上拉拉高,可用作输入;作为输入时,被外部拉低的 Port 1 引脚会因内部上拉而输出电流(IIL)。

此外 P1.0 与 P1.1 可分别配置为定时器 / 计数器 2 的外部计数输入(P1.0/T2)与触发输入(P1.1/T2EX)。Port 1 在 Flash 编程和验证期间接收低字节地址。

表Port 1 的备用功能

Port 引脚备用功能
P1.0T2(定时器 / 计数器 2 外部计数输入)、时钟输出(clock-out)
P1.1T2EX(定时器 / 计数器 2 捕获 / 重装触发及方向控制)

Port 2

Port 2 是一个 8 位带内部上拉的双向 I/O 口,输出缓冲器可灌入 / 输出四个 TTL 输入。写 1 时引脚被内部上拉拉高,可用作输入;作为输入时,被外部拉低的引脚会因内部上拉而输出电流(IIL)。

从外部程序存储器取指,以及访问使用 16 位地址(MOVX @DPTR)的外部数据存储器时,Port 2 输出高字节地址。在此应用中,当输出 1 时 Port 2 使用强内部上拉。访问使用 8 位地址(MOVX @RI)的外部数据存储器时,Port 2 输出 P2 特殊功能寄存器的内容。Port 2 在 Flash 编程和验证期间还接收高字节地址位及部分控制信号。

Port 3

Port 3 是一个 8 位带内部上拉的双向 I/O 口,输出缓冲器可灌入 / 输出四个 TTL 输入。写 1 时引脚被内部上拉拉高,可用作输入。Port 3 还承担各种特殊功能,并接收 Flash 编程和验证的部分控制信号。

表Port 3 的备用功能

引脚功能引脚功能
P3.0RXD 串行输入P3.4T0 定时器 0 外部输入
P3.1TXD 串行输出P3.5T1 定时器 1 外部输入
P3.2INT0 外部中断 0P3.6WR 外部数据存储器写选通
P3.3INT1 外部中断 1P3.7RD 外部数据存储器读选通

控制信号

RST:复位输入。当振荡器运行时,该引脚上的高电平持续两个机器周期即可复位器件。

ALE / PROG

地址锁存使能,是用于在访问外部存储器期间锁存地址低字节的输出脉冲。此引脚在 Flash 编程期间也是编程脉冲输入(PROG)。在正常操作中,ALE 以振荡器频率的 1/6 恒定速率输出,可用于外部定时或时钟目的。

每次访问外部数据存储器时会跳过一个 ALE 脉冲。如果需要,可通过设置 SFR 地址 8EH 的位 0 来禁用 ALE 操作;置位后 ALE 仅在 MOVX 或 MOVC 指令期间有效,否则该引脚被弱上拉。如果微控制器处于外部执行模式,设置 ALE 禁用位无效。

EA / VPP

外部访问使能。EA 必须接 GND,以允许器件从起始于 0000H 至 FFFFH 的外部程序存储器位置获取代码;若锁定位 1 已编程,EA 将在复位时被内部锁存。EA 应接 VCC 以执行内部程序。在 Flash 编程期间,当选 12 伏编程时,该引脚还接收 12 伏编程使能电压(VPP)。

PSEN

程序存储使能,是外部程序存储器的读选通信号。当 AT89C52 从外部程序存储器执行代码时,每个机器周期 PSEN 激活两次;但每次访问外部数据存储器时跳过两次 PSEN 激活。

XTAL1 / XTAL2

XTAL1:反相振荡器放大器的输入,以及内部时钟工作电路的输入。XTAL2:反相振荡器放大器的输出。

三个容易踩的点

① EA 悬空或接错,内部程序不执行;② 用外部晶振驱动时,XTAL2 必须悬空,只驱动 XTAL1;③ 一旦置位 ALE 禁用位,外设若依赖 ALE 做外部定时,脉冲会只出现在 MOVX/MOVC 期间。

05特殊功能寄存器

片上称为特殊功能寄存器(SFR)区的内存映射见下表。注意并非所有地址都被占用,未占用地址可能未在芯片上实现。对这些地址的读访问通常返回随机数据,写访问会产生不确定影响。

用户软件不应向这些未列出的位置写入 1,因为它们可能在未来产品中用于调用新特性;届时新位的复位值或非活动值将始终为 0。

表 1AT89C52 SFR 映射及复位值

寄存器复位值
B0000 0000
ACC0000 0000
PSW0000 0000
T2CON0000 0000
T2MODXXXX XX00
RCAP2L0000 0000
RCAP2H0000 0000
TL20000 0000
TH20000 0000
IPXX00 0000
P31111 1111
IE0X00 0000
P21111 1111
SCON0000 0000
SBUFXXXX XXXX
P11111 1111
TCON0000 0000
TMOD0000 0000
TL00000 0000
TL10000 0000
TH00000 0000
TH10000 0000
P01111 1111
SP0000 0111
DPL0000 0000
DPH0000 0000
PCON0XXX 0000

X 表示复位值不确定。原表中成组给出的寄存器(如 T2CON / T2MOD / RCAP2L / RCAP2H / TL2 / TH2)已按原顺序拆分为逐项对应,数值未作改动。

定时器 2 寄存器

控制位和状态位包含在寄存器 T2CON 与 T2MOD 中。寄存器对(RCAP2H、RCAP2L)是定时器 2 在 16 位捕获模式或 16 位自动重装模式下的捕获 / 重装寄存器。

中断寄存器:各个中断使能位在 IE 寄存器中。六个中断源中的每一个都可以在 IP 寄存器中设置两个优先级。

表 2 · T2CON 定时器 / 计数器 2 控制寄存器

TF27
EXF26
RCLK5
TCLK4
EXEN23
TR22
C/T21
CP/RL20

地址 = 0C8H · 复位值 = 0000 0000B · 可位寻址 · 当前值 = 00H(点击位格可切换 0 / 1)

符号功能
TF2定时器 2 溢出标志,由定时器 2 溢出置位,必须由软件清零。当 RCLK = 1 或 TCLK = 1 时,TF2 不会被置位。
EXF2定时器 2 外部标志。当 T2EX 出现下降沿且 EXEN2 = 1 导致捕获或重装时置位。定时器 2 中断使能时,EXF2 = 1 将使 CPU 向量跳转到定时器 2 中断服务程序。EXF2 必须由软件清零。在加 / 减计数器模式(DCEN = 1)下 EXF2 不产生中断。
RCLK接收时钟使能。置位时,使串行口在模式 1 和 3 下使用定时器 2 溢出脉冲作为其接收时钟。RCLK = 0 使定时器 1 溢出用于接收时钟。
TCLK发送时钟使能。置位时,使串行口在模式 1 和 3 下使用定时器 2 溢出脉冲作为其发送时钟。TCLK = 0 使定时器 1 溢出用于发送时钟。
EXEN2定时器 2 外部使能。置位时,如果定时器 2 未用于给串行口计时,则允许由 T2EX 的下降沿引起捕获或重装。EXEN2 = 0 使定时器 2 忽略 T2EX 上的事件。
TR2定时器 2 的启动 / 停止控制。TR2 = 1 启动定时器。
C/T2定时器 2 的定时器 / 计数器选择。C/T2 = 0 为定时器功能;C/T2 = 1 为外部事件计数器(下降沿触发)。
CP/RL2捕获 / 重装选择。CP/RL2 = 1 时,如果 EXEN2 = 1,则在 T2EX 下降沿发生捕获。CP/RL2 = 0 时,当定时器 2 溢出或 EXEN2 = 1 时 T2EX 出现下降沿时发生自动重装。当 RCLK 或 TCLK = 1 时,该位被忽略,定时器被强制在定时器 2 溢出时自动重装。
工作模式
关闭(TR2 = 0,定时器未启动)
计数源
内部时钟,每机器周期递增一次
计数速率
fosc / 12
接收时钟
定时器 1 溢出
发送时钟
定时器 1 溢出
T2EX 触发
忽略 T2EX 上的事件
重装行为
溢出时从 (RCAP2H, RCAP2L) 自动重装

表 4 · T2MOD 定时器 2 模式控制寄存器

—7
—6
—5
—4
—3
—2
T2OE1
DCEN0

地址 = 0C9H · 复位值 = XXXX XX00B · 不可位寻址

符号功能
—未实现,保留给将来使用。
T2OE定时器 2 输出使能位。
DCEN置位时,此位允许定时器 2 配置为加 / 减计数器。

数据存储器

AT89C52 实现 256 字节片上 RAM。高 128 字节占据与特殊功能寄存器平行的地址空间——地址相同,但在物理上与 SFR 空间分开。

当指令访问地址高于 7FH 的内部位置时,指令使用的寻址方式决定 CPU 访问的是 RAM 高 128 字节还是 SFR 空间。使用直接寻址的指令访问 SFR 空间,例如以下指令访问位置 0A0H 处的 SFR(即 P2):

MOV 0A0H, #data ; 直接寻址 → P2(SFR)

使用间接寻址的指令访问 RAM 的高 128 字节。以下指令(R0 包含 0A0H)访问地址 0A0H 处的数据字节,而不是 P2:

MOV @R0, #data ; 间接寻址 → 0A0H 处的高 128 字节 RAM

注意,堆栈操作是间接寻址的实例,因此 RAM 高 128 字节可用作堆栈空间。

工程含义

同一地址 0A0H 有两个物理落点。调试时看到“写 0A0H 却没改到 P2”,通常是写成了间接寻址;反之,把 SP 设到 80H 以上再执行 PUSH/CALL,压栈会落在 RAM 而非 SFR。

06定时器 / 计数器

定时器 0 和 1

AT89C52 中的定时器 0 和定时器 1 的工作方式与 AT89C51 中的定时器 0 和定时器 1 相同。

定时器 2

定时器 2 是一个 16 位定时器 / 计数器,可作定时器或事件计数器运行。运行类型由 SFR T2CON 中的位 C/T2 选择。定时器 2 有三种工作模式:捕获、自动重装(加 / 减计数)和波特率发生器,由 T2CON 中的位选择。

定时器 2 由两个 8 位寄存器 TH2 和 TL2 组成。在定时器功能中,TL2 寄存器每个机器周期递增;由于一个机器周期由 12 个振荡器周期组成,计数速率为振荡器频率的 1/12。

在计数器功能中,寄存器响应其相应外部输入引脚 T2 上的 1→0 跳变而递增。此功能中,每个机器周期的 S5P2 期间对外部输入采样;采样在一个周期为高、下一周期为低时计数递增,新计数值出现在检测到跳变的下一周期的 S3P1 期间。

由于识别 1→0 跳变需要两个机器周期(24 个振荡器周期),最大计数速率为振荡器频率的 1/24。为确保某一电平在改变前至少被采样一次,该电平应至少保持一个完整的机器周期。

表 3定时器 2 工作模式

RCLK + TCLKCP/RL2TR2模式
00116 位自动重装
01116 位捕获
1X1波特率发生器
XX0关闭

捕获模式

在捕获模式下,T2CON 中的位 EXEN2 选择两个选项。若 EXEN2 = 0,定时器 2 是 16 位定时器或计数器,溢出时置位 T2CON 中的位 TF2,该位随后可用于产生中断。若 EXEN2 = 1,定时器 2 执行相同操作,但外部输入 T2EX 上的 1→0 跳变还会导致 TH2 和 TL2 中的当前值分别被捕获到 RCAP2H 和 RCAP2L;T2EX 上的跳变同时置位 EXF2,EXF2 与 TF2 一样可以产生中断。

图 1捕获模式下的定时器 2:T2EX 下降沿经 EXEN2 门控,把 TH2 / TL2 当前值锁存进 RCAP2H / RCAP2L,同时置位 EXF2。

自动重装(加 / 减计数器)

当定时器 2 配置为 16 位自动重装模式时,可编程为加计数或减计数。该特性由位于 SFR T2MOD 中的 DCEN(减计数使能)位调用。复位后 DCEN 位设置为 0,因此定时器 2 默认为加计数;当 DCEN 置位时,定时器 2 可根据 T2EX 引脚的值加计数或减计数。

图 2 显示 DCEN = 0 时定时器 2 自动加计数。此模式下,T2CON 中的位 EXEN2 选择两个选项:若 EXEN2 = 0,定时器 2 加计数到 0FFFFH,溢出时置位 TF2,溢出还导致定时器寄存器被重装 RCAP2H 和 RCAP2L 中的 16 位值(该值由软件预置);若 EXEN2 = 1,可由溢出或外部输入 T2EX 上的 1→0 跳变触发 16 位重装,此跳变也置位 EXF2。TF2 和 EXF2 若被使能均可产生中断。

图 2自动重装模式(DCEN = 0):COUNT DIRECTION 固定为加计数,溢出时从 (RCAP2H, RCAP2L) 重装。

设置 DCEN 位可使定时器 2 加计数或减计数(图 3)。此模式下,T2EX 引脚控制计数方向:

  • T2EX 为逻辑 1 时定时器 2 加计数,在 0FFFFH 溢出并置位 TF2;溢出还导致 RCAP2H 和 RCAP2L 中的 16 位值被分别重装到定时器寄存器 TH2 和 TL2。
  • T2EX 为逻辑 0 时定时器 2 减计数;当 TH2 和 TL2 等于 RCAP2H 和 RCAP2L 中存储的值时定时器下溢,下溢置位 TF2,并导致 0FFFFH 被重装到定时器寄存器。

每当定时器 2 溢出或下溢时 EXF2 位翻转,可作为第 17 位分辨率使用。在此工作模式下,EXF2 不触发中断。

图 3自动重装模式(DCEN = 1):T2EX 决定加 / 减方向,上溢由 (0FFFFH) 重装、下溢由 (RCAP2H, RCAP2L) 重装,EXF2 随每次上 / 下溢翻转作第 17 位。

波特率发生器

通过在 T2CON 中设置 TCLK 和 / 或 RCLK,可将定时器 2 选为波特率发生器。如果定时器 2 用于接收或发送而定时器 1 用于另一功能,则发送和接收的波特率可以不同。

波特率发生器模式与自动重装模式类似:TH2 翻转导致定时器 2 寄存器被重装软件预置的寄存器 RCAP2H 和 RCAP2L 中的 16 位值。模式 1 和 3 的波特率由定时器 2 的溢出速率决定。

模式 1 和 3 波特率 = 定时器 2 溢出速率 / 16

定时器可配置为定时器或计数器运行;在大多数应用中配置为定时器运行(CP/T2 = 0)。当定时器 2 用作波特率发生器时,其定时器操作不同:通常作为定时器时它每机器周期递增(振荡器频率的 1/12),作为波特率发生器时它每状态时间递增(振荡器频率的 1/2)。

模式 1 和 3 波特率 = fosc / [32 × (65536 − (RCAP2H, RCAP2L))]

其中 (RCAP2H, RCAP2L) 是将 RCAP2H 和 RCAP2L 作为 16 位无符号整数取出的内容。

图 4波特率发生器模式:注意 OSC 除以 2 而不是 12;TH2 翻转不置位 TF2,也不产生中断。

此图仅在 T2CON 中 RCLK 或 TCLK = 1 时有效。还应注意,如果 EXEN2 置位,T2EX 的 1→0 跳变会置位 EXF2,但不会引起从 (RCAP2H, RCAP2L) 到 (TH2, TL2) 的重装;因此当定时器 2 用作波特率发生器时,T2EX 可用作额外的外部中断。

不要在运行中读写

当定时器 2 作为波特率发生器运行(TR2 = 1)时,不应读写 TH2 或 TL2——定时器每个状态时间递增,读或写的结果可能不准确。RCAP2 寄存器可以读,但不应写,因为写入可能与重装重叠并导致写入和 / 或重装错误。访问定时器 2 或 RCAP2 寄存器之前应关闭定时器(清零 TR2)。

可编程时钟输出

可以在 P1.0 上编程输出一个 50% 占空比的时钟(图 5)。此引脚除常规 I/O 外还有两个备用功能:可编程为输入定时器 / 计数器 2 的外部时钟,或在 16 MHz 工作频率下输出频率范围 61 Hz 至 4 MHz 的 50% 占空比时钟。

要将定时器 / 计数器 2 配置为时钟发生器,必须清零位 C/T2(T2CON.1)并置位位 T2OE(T2MOD.1)。位 TR2(T2CON.2)启动和停止定时器。

时钟输出频率 = fosc / [4 × (65536 − (RCAP2H, RCAP2L))]

在时钟输出模式中,定时器 2 翻转不会产生中断,此行为类似于定时器 2 用作波特率发生器时的情况。可以将定时器 2 同时用作波特率发生器和时钟发生器,但注意由于二者都使用 RCAP2H 和 RCAP2L,波特率和时钟输出频率无法彼此独立确定。

图 5时钟输出模式:T2OE = 1、C/T2 = 0,定时器 2 的溢出经 ÷2 从 P1.0 输出 50% 占空比时钟。

07UART(通用异步收发器)

AT89C52 中的 UART 与 AT89C51 中的 UART 工作方式相同。

与本节相关的改动

串行口模式 1 / 3 的波特率除可由定时器 1 溢出产生外,也可改由定时器 2 溢出产生(T2CON 的 RCLK / TCLK)。发送与接收可分别选用不同来源,因此二者波特率可以不同。

08中断

AT89C52 共有六个中断向量:两个外部中断(INT0 和 INT1)、三个定时器中断(定时器 0、1 和 2)以及串行口中断。每个中断源都可以通过设置或清零特殊功能寄存器 IE 中的一位来单独使能或禁用;IE 还包含一个全局禁用位 EA,可一次禁用所有中断。

注意位位置 IE.6 未实现(在 AT89C51 中 IE.5 也未实现)。用户软件不应向这些位位置写入 1,因为它们可能在未来 AT89 产品中使用。

定时器 2 中断由寄存器 T2CON 中位 TF2 和 EXF2 的逻辑或产生。当服务程序被向量调用时,这两个标志都不会被硬件清零;服务程序可能需要判断是 TF2 还是 EXF2 产生了中断,并且该位必须由软件清零。

定时器 0 和定时器 1 的标志 TF0 和 TF1 在定时器溢出的那个周期的 S5P2 置位,这些值随后在下一周期被电路轮询。但定时器 2 标志 TF2 在 S2P2 置位,并在定时器溢出的同一周期被轮询。

表 5 · 中断使能(IE)寄存器

EA7
—6
ET25
ES4
ET13
EX12
ET01
EX00

(MSB) EA — ET2 ES ET1 EX1 ET0 EX0 (LSB) · 使能位 = 1 使能中断;使能位 = 0 禁用中断

符号位置功能
EAIE.7禁用所有中断。若 EA = 0,不确认任何中断;若 EA = 1,通过设置或清零各使能位单独使能或禁用每个中断源。
—IE.6保留。
ET2IE.5定时器 2 中断使能位。
ESIE.4串行口中断使能位。
ET1IE.3定时器 1 中断使能位。
EX1IE.2外部中断 1 使能位。
ET0IE.1定时器 0 中断使能位。
EX0IE.0外部中断 0 使能位。

用户软件不应向未实现的位置写入 1,因为它们可能在未来 AT89 产品中使用。

图 6中断源:六个向量经各自的使能位汇入全局 EA,再由 IP 分配两级优先级。

09振荡器特性

XTAL1 和 XTAL2 分别是反相放大器的输入和输出,该放大器可配置用作片上振荡器(图 7)。可以使用石英晶体或陶瓷谐振器。

要从外部时钟源驱动器件,应使 XTAL2 保持悬空,而驱动 XTAL1(图 8)。对外部时钟信号的占空比没有要求,因为内部时钟电路的输入通过一个二分频触发器,但必须遵守最小和最大高 / 低电平时间规格。

图 7 / 图 8上:晶体(或陶瓷谐振器)与 C1、C2 的片上振荡器连接;下:外部时钟源驱动 XTAL1、XTAL2 悬空。

注:C1、C2 —— 晶体为 30 pF ± 10 pF;陶瓷谐振器为 40 pF ± 10 pF。

10空闲模式

在空闲模式下,CPU 休眠,而所有片上外设保持活跃。此模式由软件调用。此模式下,片上 RAM 和所有特殊功能寄存器的内容保持不变。任何使能的中断或硬件复位都可终止空闲模式。

复位唤醒的边界

当空闲模式由硬件复位终止时,器件通常从停下的位置恢复程序执行,最多到内部复位算法接管控制前的两个机器周期。此事件中片上硬件禁止访问内部 RAM,但不禁止访问端口引脚。为消除空闲模式被复位终止时端口引脚意外写入的可能性,调用空闲模式的指令之后的下一条指令不应写入端口引脚或外部存储器。

11掉电模式

在掉电模式下,振荡器停止,调用掉电的指令是最后执行的指令。片上 RAM 和特殊功能寄存器保持其值,直到掉电模式终止。

退出掉电的唯一途径是硬件复位。复位重新定义 SFR,但不改变片上 RAM。在 VCC 恢复到正常工作电平之前不应激活复位,并且必须保持激活足够长时间,使振荡器重新启动并稳定。

空闲和掉电模式下外部引脚的状态

表两种省电模式下的引脚状态

模式程序存储器ALEPSENPORT0PORT1PORT2PORT3
空闲内部11数据数据数据数据
空闲外部11浮空数据地址数据
掉电内部00数据数据数据数据
掉电外部00浮空数据数据数据

进入空闲 / 掉电后端口仍保持原电平,外部电路若把这些引脚当作有效输出,会一直看到“旧数据”。

12程序存储器锁定位

AT89C52 有三个锁定位,可以保持未编程(U)或编程(P),以获得下表列出的附加特性。

表锁定位保护模式

模式LB1LB2LB3保护类型
1UUU无程序锁定特性。
2PUU禁止从外部程序存储器执行的 MOVC 指令从内部存储器获取代码字节;EA 在复位时被采样并锁存;进一步对 Flash 存储器的编程被禁用。
3PPU与模式 2 相同,但验证也被禁用。
4PPP与模式 3 相同,但外部执行也被禁用。

U = 未编程,P = 已编程。

当锁定位 1 被编程时,EA 引脚处的逻辑电平在复位期间被采样并锁存。如果器件在无复位的情况下上电,锁存器初始化为随机值并保持该值直到复位被激活;锁存的 EA 值必须与该引脚当前逻辑电平一致,器件才能正常工作。

13Flash 编程

AT89C52 通常以片内 Flash 存储阵列处于已擦除状态(即内容 = FFH)并准备编程的方式出厂。编程接口接受高压(12 伏)或低压(VCC)程序使能信号。低压编程模式提供在用户系统内编程 AT89C52 的便捷方式,而高压编程模式与常规第三方 Flash 或 EPROM 编程器兼容。

AT89C52 出厂时使能高压或低压编程模式,相应的顶面标记和器件签名代码如下表所示:

表顶面标记与签名代码(区分 12V / 5V 编程)

VPP = 12VVPP = 5V
顶面标记AT89C52 / xxxx / yywwAT89C52 / xxxx-5 / yyww
签名(030H)=1EH, (031H)=52H, (032H)=FFH(030H)=1EH, (031H)=52H, (032H)=05H

AT89C52 代码存储器阵列在任一编程模式下逐字节编程。要编程片上 Flash 存储器中任何非空白字节,必须使用芯片擦除模式擦除整个存储器。

编程算法

在编程 AT89C52 之前,应根据 Flash 编程模式表和下图设置地址、数据和控制信号。编程步骤如下:

  1. 在地址线上输入所需的存储位置。
  2. 在数据线上输入适当的数据字节。
  3. 激活正确组合的控制信号。
  4. 将 EA/VPP 升至 12V 以进入高压编程模式。
  5. 将 ALE/PROG 脉冲一次,以在 Flash 阵列或锁定位中编程一个字节。字节写周期是自定时的,通常不超过 1.5 ms。重复步骤 1 到 5,更改地址和数据以编程整个阵列,或直到达到目标文件末尾。

数据轮询(Data Polling)

AT89C52 具有数据轮询功能以指示写周期结束。在写周期期间,尝试读取最后写入的字节将在 P0.7 上产生写入数据的补码。一旦写周期完成,所有输出上的有效数据才有效,可以开始下一个周期。数据轮询可在写周期开始后的任何时间开始。

就绪 / 忙(Ready/Busy)

字节编程的进度也可以由 RDY/BSY 输出信号监控。编程期间 ALE 变高后,P3.4 被拉低以指示 BUSY(忙);编程完成后 P3.4 再次被拉高以指示 READY(就绪)。

程序验证(Program Verify)

如果锁定位 LB1 和 LB2 未编程,可以通过地址和数据线回读已编程的代码数据进行验证。锁定位无法直接验证,通过观察锁定位的特性已使能来验证锁定位。

芯片擦除(Chip Erase)

通过使用正确组合的控制信号并保持 ALE/PROG 为低 10 ms,可对整个 Flash 阵列进行电擦除。代码阵列被写为全 1。必须在代码存储器可以重新编程之前执行芯片擦除操作。

读取签名字节

签名字节的读取方式与正常验证位置 030H、031H 和 032H 相同,但 P3.6 和 P3.7 必须拉低。返回的值如下:

(030H) = 1EH —— 表示由 Atmel 制造 (031H) = 52H —— 表示 89C52 (032H) = FFH —— 表示 12V 编程 (032H) = 05H —— 表示 5V 编程

编程接口

通过使用适当的控制信号组合,可以写入 Flash 阵列中的每个代码字节并擦除整个阵列。写操作周期是自定时的,一旦启动将自动定时到完成。所有主要的编程供应商都提供对 Atmel 微控制器系列的支持;请联系当地的编程供应商以获取适当的软件修订版。

Flash 编程模式

表Flash 编程模式的控制信号组合

模式RSTPSENALE/PROGEA/VPPP2.6P2.7P3.6P3.7
写入代码数据HL(脉冲)H/12VLHHH
读取代码数据HLHHLLHH
写锁定位 1HL(脉冲)H/12VHHHH
写锁定位 2HL(脉冲)H/12VHHLL
写锁定位 3HL(脉冲)H/12VHLHL
芯片擦除HL(1)H/12VHLLL
读签名字节HLHHLLLL

1芯片擦除需要 10 ms 的 PROG 脉冲。

图 9 / 图 10上:Flash 存储器编程(P2.6、P2.7、P3.6、P3.7 置为编程组合);下:Flash 存储器验证(P2.7 拉低使能 ENABLE)。

Flash 编程和验证特性

TA = 0°C 至 70°C,VCC = 5.0 ± 10%。

符号参数最小值最大值单位
VPP1编程使能电压11.512.5V
IPP1编程使能电流1.0mA
1/tCLCL振荡器频率324MHz
tAVGL地址建立到 PROG 低48tCLCL
tGHAXPROG 后地址保持48tCLCL
tDVGL数据建立到 PROG 低48tCLCL
tGHDXPROG 后数据保持48tCLCL
tEHSHP2.7(ENABLE)高到 VPP48tCLCL
tSHGLVPP 建立到 PROG 低10µs
tGHSL1PROG 后 VPP 保持10µs
tGLGHPROG 宽度1110µs
tAVQV地址到数据有效48tCLCL
tELQVENABLE 低到数据有效48tCLCL
tEHQZENABLE 后数据浮空048tCLCL
tGHBLPROG 高到 BUSY 低1.0µs
tWC字节写周期时间2.0ms

1仅用于 12 伏编程模式。

波形Flash 编程和验证时序:地址、数据、ALE/PROG、EA/VPP(高压模式 12V / 低压模式 5V)与 RDY/BSY 的关系。

14绝对最大额定值

参数额定值
工作温度−55°C 至 +125°C
存储温度−65°C 至 +150°C
任一引脚相对地的电压−1.0V 至 +7.0V
最大工作电压6.6V
直流输出电流15.0 mA

超过“绝对最大额定值”下列出的应力可能导致器件永久损坏。这只是应力额定值,器件在这些或任何超出本规格操作部分所指明条件的功能运行不受保证。长时间暴露于绝对最大额定值条件可能影响器件可靠性。

15直流特性

下表值在 TA = −40°C 至 85°C 且 VCC = 5.0V ± 20% 时有效,除非另有说明。

符号参数条件最小值最大值单位
VIL输入低电压(EA 除外)−0.50.2 VCC−0.1V
VIL1输入低电压(EA)−0.50.2 VCC−0.3V
VIH输入高电压(XTAL1、RST 除外)0.2 VCC+0.9VCC+0.5V
VIH1输入高电压(XTAL1、RST)0.7 VCCVCC+0.5V
VOL1输出低电压(Ports 1,2,3)IOL = 1.6 mA0.45V
VOL11输出低电压(Port 0、ALE、PSEN)IOL = 3.2 mA0.45V
VOH输出高电压(Ports 1,2,3、ALE、PSEN)IOH = −60 µA,VCC = 5V ± 10%2.4V
IOH = −25 µA0.75 VCC
IOH = −10 µA0.9 VCC
VOH1输出高电压(外部总线模式下的 Port 0)IOH = −800 µA,VCC = 5V ± 10%2.4V
IOH = −300 µA0.75 VCC
IOH = −80 µA0.9 VCC
IIL逻辑 0 输入电流(Ports 1,2,3)VIN = 0.45V−50µA
ITL逻辑 1→0 跳变电流(Ports 1,2,3)VIN = 2V,VCC = 5V ± 10%−650µA
ILI输入漏电流(Port 0、EA)0.45 < VIN < VCC±10µA
RRST复位下拉电阻50300KΩ
CIO引脚电容测试频率 = 1 MHz,TA = 25°C10pF
ICC电源电流工作模式,12 MHz25mA
空闲模式,12 MHz6.5
掉电模式1,VCC = 6V100µA
掉电模式1,VCC = 3V40

1在稳态(非瞬态)条件下,IOL 必须由外部限制如下:每端口引脚最大 IOL:10 mA;每 8 位端口最大 IOL:Port 0 为 26 mA,Ports 1,2,3 为 15 mA;所有输出引脚最大总 IOL:71 mA。如果 IOL 超过测试条件,VOL 可能超过相关规格。引脚不保证灌入大于所列测试条件的电流。
2掉电模式最小 VCC 为 2V。

换算到设计上

VIL / VIH 都以 0.2 VCC、0.7 VCC 为界:5V 时高电平门槛约 3.5 V(XTAL1 与 RST),普通输入约 1.9 V。Port 0 作为输入没有内部上拉,漏电流 ±10 µA,外部必须给确定电平。

16交流特性

工作条件下,Port 0、ALE/PROG 和 PSEN 的负载电容 = 100 pF;所有其他输出的负载电容 = 80 pF。

外部程序和数据存储器特性

符号参数12 MHz 振荡器可变振荡器单位
最小值最大值最小值最大值
1/tCLCL振荡器频率024MHz
tLHLLALE 脉冲宽度1272tCLCL−40ns
tAVLL地址有效到 ALE 低43tCLCL−13ns
tLLAXALE 低后地址保持48tCLCL−20ns
tLLIVALE 低到有效指令输入2334tCLCL−65ns
tLLPLALE 低到 PSEN 低43tCLCL−13ns
tPLPHPSEN 脉冲宽度2053tCLCL−20ns
tPLIVPSEN 低到有效指令输入1453tCLCL−45ns
tPXIXPSEN 后输入指令保持00ns
tPXIZPSEN 后输入指令浮空59tCLCL−10ns
tPXAVPSEN 到地址有效75tCLCL−8ns
tAVIV地址到有效指令输入3125tCLCL−55ns
tPLAZPSEN 低到地址浮空1010ns
tRLRHRD 脉冲宽度4006tCLCL−100ns
tWLWHWR 脉冲宽度4006tCLCL−100ns
tRLDVRD 低到有效数据输入2525tCLCL−90ns
tRHDXRD 后数据保持00ns
tRHDZRD 后数据浮空972tCLCL−28ns
tLLDVALE 低到有效数据输入5178tCLCL−150ns
tAVDV地址到有效数据输入5859tCLCL−165ns
tLLWLALE 低到 RD 或 WR 低2003003tCLCL−503tCLCL+50ns
tAVWL地址到 RD 或 WR 低2034tCLCL−75ns
tQVWX数据有效到 WR 跳变23tCLCL−20ns
tQVWH数据有效到 WR 高4337tCLCL−120ns
tWHQXWR 后数据保持33tCLCL−20ns
tRLAZRD 低到地址浮空00ns
tWHLHRD 或 WR 高到 ALE 高43123tCLCL−20tCLCL+25ns
波形上:外部程序存储器读周期(ALE、PSEN、端口 2 高地址、端口 0 指令输入);下:外部数据存储器读周期(RD)。
波形上:外部数据存储器写周期(WR、数据有效到 WR 跳变与保持);下:外部时钟驱动波形。

外部时钟驱动

符号参数最小值最大值
1/tCLCL振荡器频率024 MHz
tCLCL时钟周期41.6ns
tCHCX高电平时间15ns
tCLCX低电平时间15ns
tCLCH上升时间20 ns
tCHCL下降时间20 ns

原表“单位”为独立列,此处并入数值单元格以适配窄屏。

串行口定时:移位寄存器模式测试条件

下表值在 VCC = 5.0V ± 20% 且负载电容 = 80 pF 时有效。

符号参数12 MHz 振荡可变振荡器单位
最小值最大值最小值最大值
tXLXL串行口时钟周期时间1.012tCLCLµs
tQVXH输出数据建立到时钟上升沿70010tCLCL−133ns
tXHQX时钟上升沿后输出数据保持502tCLCL−117ns
tXHDX时钟上升沿后输入数据保持00ns
tXHDV时钟上升沿到输入数据有效70010tCLCL−133ns
波形移位寄存器模式定时波形、AC 测试输入 / 输出波形及浮空(float)波形。

17订购信息

型号后缀编码:AT89C52-{速度}{封装字母}{温度字母}。封装字母 A = 44A(TQFP)、J = 44J(PLCC)、P = 40P6(PDIP)、Q = 44Q(PQFP);温度字母 C = 商用、I = 工业、A = 汽车。电源均为 5V ± 20%。

12 MHz

封装商用 0°C 至 70°C工业 −40°C 至 85°C汽车 −40°C 至 105°C
44A(TQFP)AT89C52-12ACAT89C52-12AIAT89C52-12AA
44J(PLCC)AT89C52-12JCAT89C52-12JIAT89C52-12JA
40P6(PDIP)AT89C52-12PCAT89C52-12PIAT89C52-12PA
44Q(PQFP)AT89C52-12QCAT89C52-12QIAT89C52-12QA

16 MHz

封装商用 0°C 至 70°C工业 −40°C 至 85°C汽车 −40°C 至 105°C
44A(TQFP)AT89C52-16ACAT89C52-16AIAT89C52-16AA
44J(PLCC)AT89C52-16JCAT89C52-16JIAT89C52-16JA
40P6(PDIP)AT89C52-16PCAT89C52-16PIAT89C52-16PA
44Q(PQFP)AT89C52-16QCAT89C52-16QIAT89C52-16QA

20 MHz

封装商用 0°C 至 70°C工业 −40°C 至 85°C汽车 −40°C 至 105°C
44A(TQFP)AT89C52-20ACAT89C52-20AI
44J(PLCC)AT89C52-20JCAT89C52-20JI
40P6(PDIP)AT89C52-20PCAT89C52-20PI
44Q(PQFP)AT89C52-20QCAT89C52-20QI

原表 20 MHz 段未见汽车温度型号,表中留空表示原文未列。

24 MHz

封装商用 0°C 至 70°C工业 −40°C 至 85°C汽车 −40°C 至 105°C
44A(TQFP)AT89C52-24ACAT89C52-24AI
44J(PLCC)AT89C52-24JCAT89C52-24JI
40P6(PDIP)AT89C52-24PCAT89C52-24PI
44Q(PQFP)AT89C52-24QCAT89C52-24QI

24 MHz 段在原表中仅有商用与工业两档。

封装类型

封装代码封装类型
44A44 引线,薄塑料鸥翼方形扁平封装(TQFP)
44J44 引线,塑料 J 形引线芯片载体(PLCC)
40P640 引线,0.600 英寸宽,塑料双列直插封装(PDIP)
44Q44 引线,塑料鸥翼方形扁平封装(PQFP)

附录 A定时器 2 参数计算

手册给的是“由 RCAP2 求频率”的公式,而实际配置时往往反过来:先定晶振与目标波特率,再求重装值。下面的计算器按原式反解,并对取整后的真实值做误差校验。

RCAP2H / RCAP2L 反解

RCAP2(十进制)—
RCAP2H / RCAP2L—
实际值—
相对误差—
每次溢出的计数与时长—

计算只做数学反解:N = 65536 − fosc / [32 × 目标波特率](时钟输出为 fosc / [4 × 目标频率])。误差来自 N 必须取整,串口累积偏差建议控制在 2% 以内;UART 还受接收端采样容差影响,本页不做评估。

配置顺序提醒

按第 6 节:置位 RCLK / TCLK 后定时器 2 进入波特率发生器模式,此时不应读写 TH2 / TL2,访问 RCAP2 前先清零 TR2。写成代码就是:先 TR2 = 0,再写 RCAP2H / RCAP2L,最后置 RCLK、TCLK、TR2。