标题：AT89S52
主要性能
1、与MCS-51单片机产品兼容；
2、8K字节在系统可编程Flash存储器；
3、1000次擦写周期； 
4、全静态操作：0Hz-33MHz； 
5、三级加密程序存储器；
6、32个可编程I/O口线；
7、三个16位定时器/计数器；
8、六个中断源；
9、全双工UART串行通道； 
10、低功耗空闲和掉电模式；
11、掉电后中断可唤醒；
12、看门狗定时器；
13、双数据指针；
14、掉电标识符 。
引脚说明
AT89S52 是一种低功耗、高性能CMOS8位微控制器，具有 8K 在系统可编程  AT89S52引脚图 DIP封装Flash 存储器。使用Atmel 公司高密度非 易失性存储器技术制造，与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程，亦适于 常规编程器。在单芯片上，拥有灵巧的8 位CPU 和在系统 可编程Flash，使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能： 8k字节Flash，256字节RAM， 32 位I/O 口线，看门狗定时器，2 个数据指针，三个16 位 定时器/计数器，一个6向量2级中断结构，全双工串行口， 片内晶振及时钟电路。另外，AT89S52 可降至0Hz 静态逻 辑操作，支持2种软件可选择节电模式。空闲模式下，CPU 停止工作，允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下，RAM内容被保存，振荡器被冻结， 单片机一切工作停止，直到下一个中断或硬件复位为止。
P0 口：P0口是一个8位漏极开路的双向I/O口。作为输出口，每位能驱动8个TTL逻 辑电平。对P0端口写“1”时，引脚用作高阻抗输入。 当访问外部程序和数据存储器时，P0口也被作为低8位地址/数据复用。在这种模式下， P0不具有内部上拉电阻。 在flash编程时，P0口也用来接收指令字节；在程序校验时，输出指令字节。程序校验 时，需要外部上拉电阻。 
P1 口：P1 口是一个具有内部上拉电阻的8 位双向I/O 口，p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时，内部上拉电阻把端口拉高，此时可以作为输入 口使用。作为输入使用时，被外部拉低的引脚由于内部电阻的原因，将输出电流（IIL）。 
此外，P1.0和P1.1分别作定时器/计数器2的外部计数输入（P1.0/T2）和定时器/计数器2 的触发输入（P1.1/T2EX）。 在flash编程和校验时，P1口接收低8位地址字节。 
引脚号第二功能： 
P1.0 T2（定时器/计数器T2的外部计数输入），时钟输出 
P1.1 T2EX（定时器/计数器T2的捕捉/重载触发信号和方向控制） 
P1.5 MOSI（在系统编程用） 
P1.6 MISO（在系统编程用） 
P1.7 SCK（在系统编程用） 
P2 口：P2 口是一个具有内部上拉电阻的8 位双向I/O 口，P2 输出缓冲器能驱动  AT89S52引脚图 PLCC封装4 个 TTL 逻辑电平。对P2 端口写“1”时，内部上拉电阻把端口拉高，此时可以作为输入 口使用。作为输入使用时，被外部拉低的引脚由于内部电阻的原因，将输出电流（IIL）。 在访问外部程序存储器或用16位地址读取外部数据存储器（例如执行MOVX @DPTR） 时，P2 口送出高八位地址。在这种应用中，P2 口使用很强的内部上拉发送1。在使用 8位地址（如MOVX @RI）访问外部数据存储器时，P2口输出P2锁存器的内容。 在flash编程和校验时，P2口也接收高8位地址字节和一些控制信号。 
P3 口：P3 口是一个具有内部上拉电阻的8 位双向I/O 口，p3 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时，内部上拉电阻把端口拉高，此时可以作为输入 口使用。作为输入使用时，被外部拉低的引脚由于内部电阻的原因，将输出电流（IIL）。 P3口亦作为AT89S52特殊功能（第二功能）使用，如下表所示。 在flash编程和校验时，P3口也接收一些控制信号。 
端口引脚 第二功能：
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INTO(外中断0)
P3.3 INT1(外中断1)
P3.4 TO(定时/计数器0)
P3.5 T1(定时/计数器1)
P3.6 WR(外部数据存储器写选通)
P3.7 RD(外部数据存储器读选通)
此外，P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
RST：复位输入。当振荡器工作时，RST引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG：当访问外部程序存储器或数据存储器时，ALE（地址锁存允许）输出脉冲用于锁存地址的低8位字节。一般情况下，ALE仍以时钟振荡频率的1/6输出固定的脉冲信号，因此它可对外输出时钟或用于定时目的。要注意的是：每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间，该引脚还用于输入编程脉冲（PROG）。如有必要，可通过对特殊功能寄存器（SFR）区中的8EH单元的D0位置位，可禁止ALE操作。该位置位后，只有一条MOVX和MOVC指令才能将ALE激活。此外，该引脚会被微弱拉高，单片机执行外部程序时，应设置ALE禁止位无效。
PSEN：程序储存允许（PSEN）输出是外部程序存储器的读选通信号，当AT89S52由外部程序存储器取指令（或数据）时，每个机器周期两次PSEN有效，即输出两个脉冲，在此期间，当访问外部数据存储器，将跳过两次PSEN信号。
EA/VPP：外部访问允许，欲使CPU仅访问外部程序存储器（地址为0000H-FFFFH），EA端必须保持低电平（接地）。需注意的是：如果加密位LB1被编程，复位时内部会锁存EA端状态。如EA端为高电平（接Vcc端），CPU则执行内部程序存储器的指令。FLASH存储器编程时，该引脚加上+12V的编程允许电源Vpp，当然这必须是该器件是使用12V编程电压Vpp。
XTAL1：振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2：振荡器反相放大器的输出端。
AT89S52 和 Atmel 信息
[1]Manufactured by Atmel, AT89S52 is a null. Atmel Corporation (Nasdaq: ATML) is a worldwide leader in the design and manufacture of microcontrollers, capacitive touch solutions, advanced logic, mixed-signal, nonvolatile memory and radio frequency (RF) components.
特殊功能寄存器
特殊功能寄存器（SFR）的地址空间映象如表1所示。  AT89S52 特殊寄存器映象及复位值并不是所有的地址都被定义了。片上没有定义的地址是不能用的。读这些地址，一般将得到一个随机数据；写入的数据将会无效。 
用户不应该给这些未定义的地址写入数据“1”。由于这些寄存器在将来可能被赋予新的功能，复位后，这些位都为“0”。 
定时器2 寄存器：寄存器T2CON 和T2MOD 包含定时器2 的控制位和状态位（如表2和表3所示），寄存器对RCAP2H和RCAP2L是定时器2的捕捉/自动重载寄存器。 
中断寄存器：各中断允许位在IE寄存器中，六个中断源的两个优先级也可在IE中设置。
表2 T2CON：定时器/计数器2控制寄存器
T2CON 地址为0C8H 复位值：0000 0000B位可寻址
TF2 
EXF2
RLCLK 
TCLK 
EXEN2
TR2
C/T2
CP/RL2
7
6
5
4 
3
2
1
0
符号
功能
TF2
定时器2 溢出标志位。必须软件清“0”。RCLK=1 或TCLK=1 时，TF2不
用置位。
EXF2
定时器2 外部标志位。EXEN2=1 时，T2EX 上的负跳变而出现捕捉或重载
时，EXF2 会被硬件置位。定时器2 打开，EXF2=1 时，将引导CPU执行定
时器2 中断程序。EXF2 必须如见清“0”。在向下/向上技术模式（DCEN=1）
下EXF2不能引起中断。
RLCLK 
串行口接收数据时钟标志位。若RCLK=1，串行口将使用定时器2 溢出脉冲
作为串行口工作模式1 和3 的串口接收时钟；RCLK=0，将使用定时器1计数
溢出作为串口接收时钟。
TCLK
串行口发送数据时钟标志位。若TCLK=1，串行口将使用定时器2 溢出脉冲作
为串行口工作模式1 和3 的串口发送时钟；TCLK=0，将使用定时器1计数溢出
作为串口发送时钟。
EXEN2
定时器2外部允许标志位。当EXEN2=1时，如果定时器2没有用作串行时钟，
T2EX（P1.1）的负跳变将引起定时器2 捕捉和重载。若EXEN2=0，定时器2
将视T2EX端的信号无效
TR2
开始/停止控制定时器2。TR2=1，定时器2开始工作
C/T2 
定时器 2 定时/计数选择标志位。C/T2 =0，定时； C/T2 =1，外部事件计
数（下降沿触发）
CP/RL2
捕捉/重载选择标志位。当EXEN2=1时， CP/RL2=1，T2EX出现负脉冲，会引
起捕捉操作；当定时器2溢出或EXEN2=1时T2EX出现负跳变，都会出现自动重载
操作。CP/RL2=0 将引起T2EX 的负脉冲。当RCKL=1或TCKL=1时，此标志位
无效，定时器2溢出时，强制做自动重载操作。
双数据指针寄存器：为了更有利于访问内部和外部数据存储器，系统提供了两路16位数据指针寄存器：位于SFR中82H~83H的DP0和位于84H～85。特殊寄存器AUXR1中DPS=0 选择DP0；DPS=1 选择DP1。用户应该在访问数据指针寄存器前先初始化DPS至合理的值。
表 3a AUXR：辅助寄存器
AUXR 地址：8EH 复位值：XXX00XX0B不可位寻址
WDIDLE
DISRTO 
DISALE 
7 
6 
5 
4
3
2 
1
0
预留扩展用
DISALE ALE使能标志位
DISALE 操作方式
0 ALE 以1/6晶振频率输出信号
1 ALE 只有在执行MOVX 或MOVC指令时激活
DISRTO 复位输出标志位
DISRTO
0 看门狗（WDT）定时结束，Reset 输出高电平
1 Reset 只有输入
WDIDLE 空闲模式下WDT 使能标志位
WDIDLE
0 空闲模式下，WDT继续计数
1 空闲模式下，WDT停止计数
掉电标志位：掉电标志位（POF）位于特殊寄存器PCON的第四位（PCON.4）。上电期间POF置“1”。POF可以软件控制使用与否，但不受复位影响。
表 3b AUXR1：辅助寄存器1
AUXR1 地址：A2H 复位值：XXXXXXX0B
不可位寻址
DPS
7
6
5
4 
3 
2
1
0
预留扩展用
DPS 数据指针选择位
DPS
0 选择DPTR寄存器DP0L和DP0H
1 选择DPTR寄存器DP1L和DP1H
存储器结构
MCS-51器件有单独的程序存储器和数据存储器。外部程序存储器和数据存储器都可以64K寻址。 
程序存储器：如果EA引脚接地，程序读取只从外部存储器开始。 
对于 89S52，如果EA 接VCC，程序读写先从内部存储器（地址为0000H～1FFFH）开始，接着从外部寻址，寻址地址为：2000H~FFFFH。 
数据存储器：AT89S52 有256 字节片内数据存储器。高128 字节与特殊功能寄存器重叠。也就是说高128字节与特殊功能寄存器有相同的地址，而物理上是分开的。 
当一条指令访问高于7FH 的地址时，寻址方式决定CPU 访问高128 字节RAM 还是特殊功能寄存器空间。直接寻址方式访问特殊功能寄存器（SFR）。 
例如，下面的直接寻址指令访问0A0H（P2口）存储单元MOV 0A0H , #data使用间接寻址方式访问高128 字节RAM。例如，下面的间接寻址方式中，R0 内容为0A0H，访问的是地址0A0H的寄存器，而不是P2口（它的地址也是0A0H）。 
MOV @R0 , #data堆栈操作也是间接寻址方式。因此，高128字节数据RAM也可用于堆栈空间。
片上资源
看门狗定时器WDT是一种需要软件控制的复位方式。WDT 由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器（WDTRST）构成。WDT 在默认情况下无法工作；为了激活WDT，用户必须往WDTRST 寄存器（地址：0A6H）中依次写入01EH 和0E1H。当WDT激活后，晶振工作，WDT在每个机器周期都会增加。WDT计时周期依赖于外部时钟频率。除了复位（硬件复位或WDT溢出复位），没有办法停止WDT工作。当WDT溢出，它将驱动RSR引脚一个高电平输出。 
WDT的使用为了激活WDT，用户必须向WDTRST寄存器（地址为0A6H的SFR）依次写入01EH和0E1H。当WDT激活后，用户必须向WDTRST写入01EH和0E1H喂狗来避免WDT溢出。当计数达到8191（1FFFH）时，13 位计数器将会溢出，这将会复位器件。晶振正常工作、WDT激活后，每一个机器周期WDT 都会增加。为了复位WDT，用户必须向WDTRST 写入01EH 和0E1H（WDTRST 是只读寄存器）。WDT 计数器不能读或写。 
当WDT 计数器溢出时，将给RST 引脚产生一个复位脉冲输出，这个复位脉冲持续96个晶振周期（TOSC），其中TOSC=1/FOSC。为了很好地使用WDT，应该在一定时间内周期性写入那部分代码，以避免WDT复位。 
掉电和空闲方式下的 WDT在掉电模式下，晶振停止工作，这意味这WDT也停止了工作。在这种方式下，用户不必喂狗。有两种方式可以离开掉电模式：硬件复位或通过一个激活的外部中断。通过硬件复位退出掉电模式后，用户就应该给WDT 喂狗，就如同通常AT89S52 复位一样。 
通过中断退出掉电模式的情形有很大的不同。中断应持续拉低很长一段时间，使得晶振稳定。当中断拉高后，执行中断服务程序。为了防止WDT在中断保持低电平的时候复位器件，WDT 直到中断拉低后才开始工作。这就意味着WDT 应该在中断服务程序中复位。 
为了确保在离开掉电模式最初的几个状态WDT不被溢出，最好在进入掉电模式前就复位WDT。 
在进入待机模式前，特殊寄存器AUXR的WDIDLE位用来决定WDT是否继续计数。 
默认状态下，在待机模式下，WDIDLE=0，WDT继续计数。为了防止WDT在待机模式下复位AT89S52，用户应该建立一个定时器，定时离开待机模式，喂狗，再重新进入待机模式。
UART在AT89S52 中，UART 的操作与AT89C51 和AT89C52 一样。为了获得更深入的关于UART 的信息，选择“Products”，然后选择“8051-Architech Flash Microcontroller”，再选择“ProductOverview”即可。
定时器 0 和定时器1在AT89S52 中，定时器0 和定时器1 的操作与AT89C51 和AT89C52 一样。为了获得更深入的关于UART 的信息，选择“Products”，然后选择“8051-Architech Flash Microcontroller”，再选择“ProductOverview”即可。
定时器 2定时器2是一个16位定时/计数器，它既可以做定时器，又可以做事件计数器。其工作方式由特殊寄存器T2CON中的C/T2位选择（如表2所示）。定时器2有三种工作模式： 
捕捉方式、自动重载（向下或向上计数）和波特率发生器。如表3 所示，工作模式由T2CON中的相关位选择。定时器2 有2 个8位寄存器：TH2和TL2。在定时工作方式中，每个机器周期，TL2 寄存器都会加1。由于一个机器周期由12 个晶振周期构成，因此，计数频率就是晶振频率的1/12。表 3 定时器2工作模式
RCLK+TCLK 
CP/RL2 
TR2 
MODE 
0
0
1
16位自动重载
0
1
1
16位捕捉
1
x
1
波特率发生器
x
x
0
（不用）
捕捉方式在捕捉模式下，通过T2CON中的EXEN2来选择两种方式。  图 5 定时器的捕捉模式如果EXEN2=0，定时器2时一个16位定时/计数器，溢出时，对T2CON 的TF2标志置位，TF2引起中断。如果EXEN2=1，定时器2做相同的操作。除上述功能外，外部输入T2EX引脚（P1.1）1至0的下跳变也会使得TH2和TL2中的值分别捕捉到RCAP2H和RCAP2L中。除此之外，T2EX 的跳变会引起T2CON 中的EXF2 置位。像TF2 一样，T2EX 也会引起中断。捕捉模式如图5所示。在计数工作方式下，寄存器在相关外部输入角T2 发生1 至0 的下降沿时增加1。在这种方式下，每个机器周期的S5P2期间采样外部输入。一个机器周期采样到高电平，而下一个周期采样到低电平，计数器将加1。在检测到跳变的这个周期的S3P1 期间，新的计数值出现在寄存器中。因为识别1－0的跳变需要2个机器周期（24个晶振周期），所以，最大的计数频率不高于晶振频率的1/24。为了确保给定的电平在改变前采样到一次，电平应该至少在一个完整的机器周期内保持不变。
自动重载当定时器2 工作于16 位自动重载模式，可对其编程实现向上计数或向下计数。这一功能可以通过特殊寄存器T2MOD（见表4）中的DCEN（向下计数允许位）来实现。通过复位，DCEN 被置为0，因此，定时器2 默认为向上计数。DCEN 设置后，定时器2就可以取决于T2EX向上、向下计数。
如图6 所示，DCEN=0 时，定时器2 自动计数。通过T2CON 中的EXEN  图 6 定时器2重载模式（DCEN=0）2 位可以选择两种方式。如果EXEN2=0，定时器2计数，计到0FFFFH后置位TF2溢出标志。计数溢出也使得定时器寄存器重新从RCAP2H 和RCAP2L 中加载16 位值。定时器工作于捕捉模式，RCAP2H和RCAP2L的值可以由软件预设。如果EXEN2=1，计数溢出或在外部T2EX（P1.1）引脚上的1到0的下跳变都会触发16位重载。这个跳变也置位EXF2中断标志位。T2EX 上的一个逻辑0 使得定时器2 向下计数。当TH2 和TL2 分别等于RCAP2H 和RCAP2L中的值的时候，计数器下溢。计数器下溢，置位TF2，并将0FFFFH加载到定时器存储器中。如图6所示，置位DCEN，允许定时器2向上或向下计数。在这种模式下，T2EX引脚控制着计数的方向。T2EX上的一个逻辑1使得定时器2向上计数。定时器计到0FFFFH溢出，并置位TF2。定时器的溢出也使得RCAP2H和RCAP2L中的16位值分别加载到定时器存储器TH2和TL2中。
定时器2上溢或下溢，外部中断标志位EXF2 被锁死。在这种工作模式下，EXF2不能触发中断。
表 4 T2MOD-定时器2控制寄存器
T2MOD 地址：0C9H 复位值：XXXXXX00B
不可位寻址
T2OE 
DCEN
7 
6
5 
4
3 
2
1
0
符号 
功能 
无定义，预留扩展
定时器2输出允许位
置1后，定时器2可配置成向上/向下计数

中断源
AT89S52 有6个中断源：两个外部中断（INT0 和INT1），三个定时中断（定时器0、1、2）和一个串行中断。这些中断如图10所示每个中断源都可以通过置位或清除特殊寄存器IE 中的相关中断允许控制位分别使得中断源有效或无效。IE还包括一个中断允许总控制位EA，它能一次禁止所有中断。
如表5所示，IE.6位是不可用的。对于AT89S52，IE.5位也是不能用的。用户软件不应给这些位写1。它们为AT89系列新产品预留。
定时器2可以被寄存器T2CON中的TF2和EXF2的或逻辑触发。程序进入中断服务后，这些标志位都可以由硬件清0。实际上，中断服务程序必须判定是否是TF2 或EXF2激活中断，标志位也必须由软件清0。
定时器0和定时器1标志位TF0 和TF1在计数溢出的那个周期的S5P2被置位。它们的值一直到下一个周期被电路捕捉下来。然而，定时器2 的标志位TF2 在计数溢出的那个周期的S2P2被置位，在同一个周期被电路捕捉下来。
表 4 中断允许控制寄存器（IE）
（MSB） （LSB）
EA 
ET2 
ES 
ET1 
EX1
ET0
EX0
中断允许控制位=1，允许中断
中断允许控制位=0，禁止中断
符号
位地址
功能
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允许控制位