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 等多种封装。各封装引脚排列如下。
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.0 | T2(定时器 / 计数器 2 外部计数输入)、时钟输出(clock-out) |
| P1.1 | T2EX(定时器 / 计数器 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.0 | RXD 串行输入 | P3.4 | T0 定时器 0 外部输入 |
| P3.1 | TXD 串行输出 | P3.5 | T1 定时器 1 外部输入 |
| P3.2 | INT0 外部中断 0 | P3.6 | WR 外部数据存储器写选通 |
| P3.3 | INT1 外部中断 1 | P3.7 | RD 外部数据存储器读选通 |
控制信号
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 映射及复位值
| 寄存器 | 复位值 |
|---|---|
| B | 0000 0000 |
| ACC | 0000 0000 |
| PSW | 0000 0000 |
| T2CON | 0000 0000 |
| T2MOD | XXXX XX00 |
| RCAP2L | 0000 0000 |
| RCAP2H | 0000 0000 |
| TL2 | 0000 0000 |
| TH2 | 0000 0000 |
| IP | XX00 0000 |
| P3 | 1111 1111 |
| IE | 0X00 0000 |
| P2 | 1111 1111 |
| SCON | 0000 0000 |
| SBUF | XXXX XXXX |
| P1 | 1111 1111 |
| TCON | 0000 0000 |
| TMOD | 0000 0000 |
| TL0 | 0000 0000 |
| TL1 | 0000 0000 |
| TH0 | 0000 0000 |
| TH1 | 0000 0000 |
| P0 | 1111 1111 |
| SP | 0000 0111 |
| DPL | 0000 0000 |
| DPH | 0000 0000 |
| PCON | 0XXX 0000 |
X 表示复位值不确定。原表中成组给出的寄存器(如 T2CON / T2MOD / RCAP2L / RCAP2H / TL2 / TH2)已按原顺序拆分为逐项对应,数值未作改动。
定时器 2 寄存器
控制位和状态位包含在寄存器 T2CON 与 T2MOD 中。寄存器对(RCAP2H、RCAP2L)是定时器 2 在 16 位捕获模式或 16 位自动重装模式下的捕获 / 重装寄存器。
中断寄存器:各个中断使能位在 IE 寄存器中。六个中断源中的每一个都可以在 IP 寄存器中设置两个优先级。
表 2 · T2CON 定时器 / 计数器 2 控制寄存器
| 符号 | 功能 |
|---|---|
| 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 溢出时自动重装。 |
表 4 · T2MOD 定时器 2 模式控制寄存器
| 符号 | 功能 |
|---|---|
| — | 未实现,保留给将来使用。 |
| 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 + TCLK | CP/RL2 | TR2 | 模式 |
|---|---|---|---|
| 0 | 0 | 1 | 16 位自动重装 |
| 0 | 1 | 1 | 16 位捕获 |
| 1 | X | 1 | 波特率发生器 |
| X | X | 0 | 关闭 |
捕获模式
在捕获模式下,T2CON 中的位 EXEN2 选择两个选项。若 EXEN2 = 0,定时器 2 是 16 位定时器或计数器,溢出时置位 T2CON 中的位 TF2,该位随后可用于产生中断。若 EXEN2 = 1,定时器 2 执行相同操作,但外部输入 T2EX 上的 1→0 跳变还会导致 TH2 和 TL2 中的当前值分别被捕获到 RCAP2H 和 RCAP2L;T2EX 上的跳变同时置位 EXF2,EXF2 与 TF2 一样可以产生中断。
自动重装(加 / 减计数器)
当定时器 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 若被使能均可产生中断。
设置 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 不触发中断。
波特率发生器
通过在 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 位无符号整数取出的内容。
此图仅在 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,波特率和时钟输出频率无法彼此独立确定。
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)寄存器
| 符号 | 位置 | 功能 |
|---|---|---|
| EA | IE.7 | 禁用所有中断。若 EA = 0,不确认任何中断;若 EA = 1,通过设置或清零各使能位单独使能或禁用每个中断源。 |
| — | IE.6 | 保留。 |
| ET2 | IE.5 | 定时器 2 中断使能位。 |
| ES | IE.4 | 串行口中断使能位。 |
| ET1 | IE.3 | 定时器 1 中断使能位。 |
| EX1 | IE.2 | 外部中断 1 使能位。 |
| ET0 | IE.1 | 定时器 0 中断使能位。 |
| EX0 | IE.0 | 外部中断 0 使能位。 |
用户软件不应向未实现的位置写入 1,因为它们可能在未来 AT89 产品中使用。
09振荡器特性
XTAL1 和 XTAL2 分别是反相放大器的输入和输出,该放大器可配置用作片上振荡器(图 7)。可以使用石英晶体或陶瓷谐振器。
要从外部时钟源驱动器件,应使 XTAL2 保持悬空,而驱动 XTAL1(图 8)。对外部时钟信号的占空比没有要求,因为内部时钟电路的输入通过一个二分频触发器,但必须遵守最小和最大高 / 低电平时间规格。
注:C1、C2 —— 晶体为 30 pF ± 10 pF;陶瓷谐振器为 40 pF ± 10 pF。
10空闲模式
在空闲模式下,CPU 休眠,而所有片上外设保持活跃。此模式由软件调用。此模式下,片上 RAM 和所有特殊功能寄存器的内容保持不变。任何使能的中断或硬件复位都可终止空闲模式。
当空闲模式由硬件复位终止时,器件通常从停下的位置恢复程序执行,最多到内部复位算法接管控制前的两个机器周期。此事件中片上硬件禁止访问内部 RAM,但不禁止访问端口引脚。为消除空闲模式被复位终止时端口引脚意外写入的可能性,调用空闲模式的指令之后的下一条指令不应写入端口引脚或外部存储器。
11掉电模式
在掉电模式下,振荡器停止,调用掉电的指令是最后执行的指令。片上 RAM 和特殊功能寄存器保持其值,直到掉电模式终止。
退出掉电的唯一途径是硬件复位。复位重新定义 SFR,但不改变片上 RAM。在 VCC 恢复到正常工作电平之前不应激活复位,并且必须保持激活足够长时间,使振荡器重新启动并稳定。
空闲和掉电模式下外部引脚的状态
表两种省电模式下的引脚状态
| 模式 | 程序存储器 | ALE | PSEN | PORT0 | PORT1 | PORT2 | PORT3 |
|---|---|---|---|---|---|---|---|
| 空闲 | 内部 | 1 | 1 | 数据 | 数据 | 数据 | 数据 |
| 空闲 | 外部 | 1 | 1 | 浮空 | 数据 | 地址 | 数据 |
| 掉电 | 内部 | 0 | 0 | 数据 | 数据 | 数据 | 数据 |
| 掉电 | 外部 | 0 | 0 | 浮空 | 数据 | 数据 | 数据 |
进入空闲 / 掉电后端口仍保持原电平,外部电路若把这些引脚当作有效输出,会一直看到“旧数据”。
12程序存储器锁定位
AT89C52 有三个锁定位,可以保持未编程(U)或编程(P),以获得下表列出的附加特性。
表锁定位保护模式
| 模式 | LB1 | LB2 | LB3 | 保护类型 |
|---|---|---|---|---|
| 1 | U | U | U | 无程序锁定特性。 |
| 2 | P | U | U | 禁止从外部程序存储器执行的 MOVC 指令从内部存储器获取代码字节;EA 在复位时被采样并锁存;进一步对 Flash 存储器的编程被禁用。 |
| 3 | P | P | U | 与模式 2 相同,但验证也被禁用。 |
| 4 | P | P | P | 与模式 3 相同,但外部执行也被禁用。 |
U = 未编程,P = 已编程。
当锁定位 1 被编程时,EA 引脚处的逻辑电平在复位期间被采样并锁存。如果器件在无复位的情况下上电,锁存器初始化为随机值并保持该值直到复位被激活;锁存的 EA 值必须与该引脚当前逻辑电平一致,器件才能正常工作。
13Flash 编程
AT89C52 通常以片内 Flash 存储阵列处于已擦除状态(即内容 = FFH)并准备编程的方式出厂。编程接口接受高压(12 伏)或低压(VCC)程序使能信号。低压编程模式提供在用户系统内编程 AT89C52 的便捷方式,而高压编程模式与常规第三方 Flash 或 EPROM 编程器兼容。
AT89C52 出厂时使能高压或低压编程模式,相应的顶面标记和器件签名代码如下表所示:
表顶面标记与签名代码(区分 12V / 5V 编程)
| VPP = 12V | VPP = 5V | |
|---|---|---|
| 顶面标记 | AT89C52 / xxxx / yyww | AT89C52 / xxxx-5 / yyww |
| 签名 | (030H)=1EH, (031H)=52H, (032H)=FFH | (030H)=1EH, (031H)=52H, (032H)=05H |
AT89C52 代码存储器阵列在任一编程模式下逐字节编程。要编程片上 Flash 存储器中任何非空白字节,必须使用芯片擦除模式擦除整个存储器。
编程算法
在编程 AT89C52 之前,应根据 Flash 编程模式表和下图设置地址、数据和控制信号。编程步骤如下:
- 在地址线上输入所需的存储位置。
- 在数据线上输入适当的数据字节。
- 激活正确组合的控制信号。
- 将 EA/VPP 升至 12V 以进入高压编程模式。
- 将 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 编程模式的控制信号组合
| 模式 | RST | PSEN | ALE/PROG | EA/VPP | P2.6 | P2.7 | P3.6 | P3.7 |
|---|---|---|---|---|---|---|---|---|
| 写入代码数据 | H | L | (脉冲) | H/12V | L | H | H | H |
| 读取代码数据 | H | L | H | H | L | L | H | H |
| 写锁定位 1 | H | L | (脉冲) | H/12V | H | H | H | H |
| 写锁定位 2 | H | L | (脉冲) | H/12V | H | H | L | L |
| 写锁定位 3 | H | L | (脉冲) | H/12V | H | L | H | L |
| 芯片擦除 | H | L | (1) | H/12V | H | L | L | L |
| 读签名字节 | H | L | H | H | L | L | L | L |
1芯片擦除需要 10 ms 的 PROG 脉冲。
Flash 编程和验证特性
TA = 0°C 至 70°C,VCC = 5.0 ± 10%。
| 符号 | 参数 | 最小值 | 最大值 | 单位 |
|---|---|---|---|---|
| VPP1 | 编程使能电压 | 11.5 | 12.5 | V |
| IPP1 | 编程使能电流 | 1.0 | mA | |
| 1/tCLCL | 振荡器频率 | 3 | 24 | MHz |
| tAVGL | 地址建立到 PROG 低 | 48tCLCL | ||
| tGHAX | PROG 后地址保持 | 48tCLCL | ||
| tDVGL | 数据建立到 PROG 低 | 48tCLCL | ||
| tGHDX | PROG 后数据保持 | 48tCLCL | ||
| tEHSH | P2.7(ENABLE)高到 VPP | 48tCLCL | ||
| tSHGL | VPP 建立到 PROG 低 | 10 | µs | |
| tGHSL1 | PROG 后 VPP 保持 | 10 | µs | |
| tGLGH | PROG 宽度 | 1 | 110 | µs |
| tAVQV | 地址到数据有效 | 48tCLCL | ||
| tELQV | ENABLE 低到数据有效 | 48tCLCL | ||
| tEHQZ | ENABLE 后数据浮空 | 0 | 48tCLCL | |
| tGHBL | PROG 高到 BUSY 低 | 1.0 | µs | |
| tWC | 字节写周期时间 | 2.0 | ms |
1仅用于 12 伏编程模式。
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.5 | 0.2 VCC−0.1 | V | |
| VIL1 | 输入低电压(EA) | −0.5 | 0.2 VCC−0.3 | V | |
| VIH | 输入高电压(XTAL1、RST 除外) | 0.2 VCC+0.9 | VCC+0.5 | V | |
| VIH1 | 输入高电压(XTAL1、RST) | 0.7 VCC | VCC+0.5 | V | |
| VOL1 | 输出低电压(Ports 1,2,3) | IOL = 1.6 mA | 0.45 | V | |
| VOL11 | 输出低电压(Port 0、ALE、PSEN) | IOL = 3.2 mA | 0.45 | V | |
| VOH | 输出高电压(Ports 1,2,3、ALE、PSEN) | IOH = −60 µA,VCC = 5V ± 10% | 2.4 | V | |
| IOH = −25 µA | 0.75 VCC | ||||
| IOH = −10 µA | 0.9 VCC | ||||
| VOH1 | 输出高电压(外部总线模式下的 Port 0) | IOH = −800 µA,VCC = 5V ± 10% | 2.4 | V | |
| IOH = −300 µA | 0.75 VCC | ||||
| IOH = −80 µA | 0.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 | 复位下拉电阻 | 50 | 300 | KΩ | |
| CIO | 引脚电容 | 测试频率 = 1 MHz,TA = 25°C | 10 | pF | |
| ICC | 电源电流 | 工作模式,12 MHz | 25 | mA | |
| 空闲模式,12 MHz | 6.5 | ||||
| 掉电模式1,VCC = 6V | 100 | µA | |||
| 掉电模式1,VCC = 3V | 40 |
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 | 振荡器频率 | 0 | 24 | MHz | ||
| tLHLL | ALE 脉冲宽度 | 127 | 2tCLCL−40 | ns | ||
| tAVLL | 地址有效到 ALE 低 | 43 | tCLCL−13 | ns | ||
| tLLAX | ALE 低后地址保持 | 48 | tCLCL−20 | ns | ||
| tLLIV | ALE 低到有效指令输入 | 233 | 4tCLCL−65 | ns | ||
| tLLPL | ALE 低到 PSEN 低 | 43 | tCLCL−13 | ns | ||
| tPLPH | PSEN 脉冲宽度 | 205 | 3tCLCL−20 | ns | ||
| tPLIV | PSEN 低到有效指令输入 | 145 | 3tCLCL−45 | ns | ||
| tPXIX | PSEN 后输入指令保持 | 0 | 0 | ns | ||
| tPXIZ | PSEN 后输入指令浮空 | 59 | tCLCL−10 | ns | ||
| tPXAV | PSEN 到地址有效 | 75 | tCLCL−8 | ns | ||
| tAVIV | 地址到有效指令输入 | 312 | 5tCLCL−55 | ns | ||
| tPLAZ | PSEN 低到地址浮空 | 10 | 10 | ns | ||
| tRLRH | RD 脉冲宽度 | 400 | 6tCLCL−100 | ns | ||
| tWLWH | WR 脉冲宽度 | 400 | 6tCLCL−100 | ns | ||
| tRLDV | RD 低到有效数据输入 | 252 | 5tCLCL−90 | ns | ||
| tRHDX | RD 后数据保持 | 0 | 0 | ns | ||
| tRHDZ | RD 后数据浮空 | 97 | 2tCLCL−28 | ns | ||
| tLLDV | ALE 低到有效数据输入 | 517 | 8tCLCL−150 | ns | ||
| tAVDV | 地址到有效数据输入 | 585 | 9tCLCL−165 | ns | ||
| tLLWL | ALE 低到 RD 或 WR 低 | 200 | 300 | 3tCLCL−50 | 3tCLCL+50 | ns |
| tAVWL | 地址到 RD 或 WR 低 | 203 | 4tCLCL−75 | ns | ||
| tQVWX | 数据有效到 WR 跳变 | 23 | tCLCL−20 | ns | ||
| tQVWH | 数据有效到 WR 高 | 433 | 7tCLCL−120 | ns | ||
| tWHQX | WR 后数据保持 | 33 | tCLCL−20 | ns | ||
| tRLAZ | RD 低到地址浮空 | 0 | 0 | ns | ||
| tWHLH | RD 或 WR 高到 ALE 高 | 43 | 123 | tCLCL−20 | tCLCL+25 | ns |
外部时钟驱动
| 符号 | 参数 | 最小值 | 最大值 |
|---|---|---|---|
| 1/tCLCL | 振荡器频率 | 0 | 24 MHz |
| tCLCL | 时钟周期 | 41.6 | ns |
| tCHCX | 高电平时间 | 15 | ns |
| tCLCX | 低电平时间 | 15 | ns |
| tCLCH | 上升时间 | 20 ns | |
| tCHCL | 下降时间 | 20 ns |
原表“单位”为独立列,此处并入数值单元格以适配窄屏。
串行口定时:移位寄存器模式测试条件
下表值在 VCC = 5.0V ± 20% 且负载电容 = 80 pF 时有效。
| 符号 | 参数 | 12 MHz 振荡 | 可变振荡器 | 单位 | ||
|---|---|---|---|---|---|---|
| 最小值 | 最大值 | 最小值 | 最大值 | |||
| tXLXL | 串行口时钟周期时间 | 1.0 | 12tCLCL | µs | ||
| tQVXH | 输出数据建立到时钟上升沿 | 700 | 10tCLCL−133 | ns | ||
| tXHQX | 时钟上升沿后输出数据保持 | 50 | 2tCLCL−117 | ns | ||
| tXHDX | 时钟上升沿后输入数据保持 | 0 | 0 | ns | ||
| tXHDV | 时钟上升沿到输入数据有效 | 700 | 10tCLCL−133 | ns | ||
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-12AC | AT89C52-12AI | AT89C52-12AA |
| 44J(PLCC) | AT89C52-12JC | AT89C52-12JI | AT89C52-12JA |
| 40P6(PDIP) | AT89C52-12PC | AT89C52-12PI | AT89C52-12PA |
| 44Q(PQFP) | AT89C52-12QC | AT89C52-12QI | AT89C52-12QA |
16 MHz
| 封装 | 商用 0°C 至 70°C | 工业 −40°C 至 85°C | 汽车 −40°C 至 105°C |
|---|---|---|---|
| 44A(TQFP) | AT89C52-16AC | AT89C52-16AI | AT89C52-16AA |
| 44J(PLCC) | AT89C52-16JC | AT89C52-16JI | AT89C52-16JA |
| 40P6(PDIP) | AT89C52-16PC | AT89C52-16PI | AT89C52-16PA |
| 44Q(PQFP) | AT89C52-16QC | AT89C52-16QI | AT89C52-16QA |
20 MHz
| 封装 | 商用 0°C 至 70°C | 工业 −40°C 至 85°C | 汽车 −40°C 至 105°C |
|---|---|---|---|
| 44A(TQFP) | AT89C52-20AC | AT89C52-20AI | |
| 44J(PLCC) | AT89C52-20JC | AT89C52-20JI | |
| 40P6(PDIP) | AT89C52-20PC | AT89C52-20PI | |
| 44Q(PQFP) | AT89C52-20QC | AT89C52-20QI |
原表 20 MHz 段未见汽车温度型号,表中留空表示原文未列。
24 MHz
| 封装 | 商用 0°C 至 70°C | 工业 −40°C 至 85°C | 汽车 −40°C 至 105°C |
|---|---|---|---|
| 44A(TQFP) | AT89C52-24AC | AT89C52-24AI | |
| 44J(PLCC) | AT89C52-24JC | AT89C52-24JI | |
| 40P6(PDIP) | AT89C52-24PC | AT89C52-24PI | |
| 44Q(PQFP) | AT89C52-24QC | AT89C52-24QI |
24 MHz 段在原表中仅有商用与工业两档。
封装类型
| 封装代码 | 封装类型 |
|---|---|
| 44A | 44 引线,薄塑料鸥翼方形扁平封装(TQFP) |
| 44J | 44 引线,塑料 J 形引线芯片载体(PLCC) |
| 40P6 | 40 引线,0.600 英寸宽,塑料双列直插封装(PDIP) |
| 44Q | 44 引线,塑料鸥翼方形扁平封装(PQFP) |
附录 A定时器 2 参数计算
手册给的是“由 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。