1、AT89S52单片机的硬件组成
片内硬件组成结构如图所示。把作为控制应用所必需的基本功能部件都集成在一个尺寸有限的集成电路芯片上。片内各功能部件通过片内单一总线连接而成(见图),基本结构依旧是CPU 加上外围芯片的传统微机结构。CPU对各种功能部件的控制是采用特殊功能寄存器(SFR,Special Function Register)的集中控制方式。
image.png
下面介绍图中片内各功能部件。
(1)CPU(微处理器)
8位的CPU,与通用CPU基本相同,同样包括了运算器和控制器两大部分,还有面向控制的位处理功能。
(2)数据存储器(RAM)
片内为为256B,片外最多可扩64KB。片内256B的RAM以高速RAM的形式集成,可加快单片机运行的速度和降低功耗。
(3)程序存储器(Flash ROM)
    用来存储程序。AT89S52 片内有8KB的Flash存储器;AT89S53/AT89S54/AT89S55片内集成了12KB/16KB/20KB的Flash存储器,如果片内程序存储器容量不够,片外最多可外扩至64KB程序存储器,即“片内+片外”的程序存储器总容量不超过64KB。
(4)定时器/计数器
     片内有3个16位的定时器/计数器,具有4种工作方式。
(5)中断系统
     具有6个中断源,2级中断优先权。
(6)串行口
   1个全双工的异步串行口,4种工作方式。可进行串行通信,扩展并行I/O口,可与多个单片机构成多机系统。
(7)P0口、P1口、P2口和P3口
   4个8位并行I/O口。
8)特殊功能寄存器(SFR)
     共有32个特殊功能寄存器,用于CPU对片内各外设部件进行管理、控制和监视。特殊功能寄存器实际上是片内各外设部件的控制寄存器和状态寄存器,这些特殊功能寄存器映射在片内RAM区的80H~FFH的地址区间内。
(9)1个看门狗定时器WDT
     当单片机由于干扰而使程序陷入死循环或跑飞状态时,可引起单片机复位,使程序恢复正常运行。
      AT89S52完全兼容AT89C51/AT89S51单片机,使用AT89C51/AT89S51单片机的系统,在保留原来软硬件的基础上,可用AT89S52直接代换。
AT89S52的引脚功能:
     首先熟悉并掌握各引脚的功能。AT89S52与各种8051单片机的引脚是兼容的。目前,AT89S52单片机多采用40引脚的DIP封装(双列直插),以及44引脚的PLCC和TQFP封装方式的芯片, 外形见图(a)和图(b)。

image.png
       AT89S52单片机的DIP封装的引脚名称见图(a) ,44引脚的PLCC和TQFP封装方式的引脚名称, 见图(b)和图(c)。44引脚的PLCC和TQFP封装方式的芯片,有4只引脚是无用的,标为“NC”。
image.png
  引脚按其功能可分为如下3类:
(1)电源及时钟引脚—VCC、VSS;XTAL1、XTAL2。
(2)控制引脚— PSEN*、ALE/PROG*、EA* /VPP、RST
(3)I/O口引脚——P0、P1、P2、P3,为4个8位I/O口

电源及时钟引脚:
1.电源引脚
(1)VCC(40脚):+5V电源。
(2)VSS(20脚):数字地。
2.时钟引脚
(1)XTAL1(19脚):片内振荡器反相放大器和时钟发生器电路输入端。用片内振荡器时,该脚接外部石英晶体和微调电容。外接时钟源时,该脚接外部时钟振荡器的信号。
(2)XTAL2(18脚):片内振荡器反相放大器的输出端。当使用片内振荡器,该脚连接外部石英晶体和微调电容。当使用外部时钟源时,本脚悬空。
控制引脚:
(1)RST (RESET,9脚)
  复位信号输入,在引脚加上持续时间大于2个机器周期的高电平,可使单片机复位。正常工作,此脚电平应 ≤ 0.5V。
  当看门狗定时器溢出输出时,该脚将输出长达96个时钟振荡周期的高电平。
(2) EA*/VPP (Enable Address/Voltage Pulse of Programing,31脚)
    EA*:引脚第一功能:外部程序存储器访问允许控制端。
    EA*=1,在PC值不超出1FFFH(即不超出片内8KB Flash存储器的地址范围)时,单片机读片内程序存储器(8KB)中的程序,但PC值超出1FFFH (即超出片内8KB Flash地址范围)时,将自动转向读取片外(2000H-FFFFH)程序存储器空间中的程序。
   EA*=0,只读取外部的程序存储器中的内容,读取的地址范围为0000H~FFFFH,片内的4KB Flash 程序存储器不起作用。
   VPP:引脚第二功能,对片内Flash编程,接编程电压。
(3)ALE/PROG*(Address Latch Enable/PROGramming,30脚)
    ALE为地址锁存控制信号端,为第一功能。由于引脚数目有限,P0口是作为低8位地址总线与8位数据总线分时复用的。当单片机访问外部程序存储器或外部数据存储器时,ALE的负跳变将单片机P0口先发出的低8位地址锁存在P0口外接的地址锁存器中,然后P0口再作为8位数据总线使用,如下图所示。

image.png
此外,单片机正常运行时,ALE端一直有正脉冲信号输出,此频率为时钟频率fosc的1/6。可用作外部定时或触发信号。
注意,每当AT89S52访问外部RAM时(执行MOVX类指令),要丢失一个ALE脉冲。
如不需要ALE端输出脉冲信号,可将特殊功能寄存器AUXR(地址为8EH,将在后面介绍)的第0位(ALE禁止位)置1,来禁止ALE操作,但执行访问外部程序存储器或外部数据存储器指令“MOVC”或“MOVX”时,ALE仍然有效。即ALE禁止位不影响对外部存储器的访问。
PROG*:引脚第二功能,对片内Flash编程,为编程脉冲输入脚。

(4)PSEN*(Program Strobe ENable,29脚)
     片外程序存储器读选通信号,低电平有效。
3、 并行I/O口引脚
(1)P0口:P0.7~P0.0引脚
     为漏极开路的8位并行双向I/O口。作为输出口时,每个引脚可驱动8个LS型TTL负载。当AT89S52扩展外部存储器及I/O接口芯片时,P0口为分时复用的低8位地址/数据总线。在向P0口写入“1”后就成为高阻态的输入口。
      当P0口作为通用I/O口使用时,需外加上拉电阻,这时为准双向口。
       在对Flash程序存储器编程时,P0口接收字节代码,程序校验时P0口输出字节代码,程序校验期间应外接上拉电阻。

(2)P1口:P1.7~P1.0引脚
    准双向I/O口,具有内部上拉电阻,可驱动4个LS型TTL负载。
    在对片内Flash编程和校验时定义为低8位地址线。
     P1口某些引脚的第二功能如下。
P1.0/T2:T2脚为定时器T2的外部计数信号输入端T2。
P1.1/T2EX:T2EX为T2的捕捉/重新装载触发及方向控制T2EX。
P1.5/MOSI:MOSI用于对片内Flash存储器串行编程和校验。
P1.6/MISO:MISO用于对片内Flash存储器串行编程和校验。
P1.7/SCK:SCK用于对片内Flash存储器的串行编程和校验的移位脉冲输入引脚。

注意:AT89S51与AT89S52引脚的差别仅仅是在1脚(P1.0)与2脚(P1.1)上,AT89S52的1脚(P1.0)与2脚(P1.1)分别增加了定时器/计数器T2的两个外部引脚T2和T2EX的复用功能。当AT89S52单片机不使用片内的T2的两个引脚T2(P1.0)和T2EX(P1.1)的复用功能时,AT89S51以及各种8051兼容机与AT89S52的引脚功能则完全相同,它们的外围硬件接口电路是完全相互通用的。
但是如果使用定时器T2的外部计数输入T2(P1.0)和“捕捉”输入T2EX (P1.1)的功能时,则AT89S52的P1.0脚和P1.1脚就不能作为通用I/O使用,这是AT89S52与AT89S51(或AT89C51)在外围接口电路设计上的微小差别。

(3)P2口:P2.7~P2.0引脚
       准双向I/O口,引脚内部接有上拉电阻,可驱动4个LS型TTL负载。
       当AT89S52访问外部存储器及I/O口时,P2口作为高8位地址总线使用,输出高8位地址。
       当P2口不作为高8位地址总线时,可作为通用的I/O口使用。
(4)P3口:P3.7~P3.0
     准双向I/O口,具有内部上拉电阻。
  P3口的第一功能是作为通用的I/O口使用,可驱动4个LS型TTL负载。
  P3口还可提供第二功能。第二功能定义见表2-1,应熟记。
综上所述,P0口可作为总线口,为双向口。作为通用的I/O口使用时,为准双向口,这时需加上拉电阻。P1口、P2口、P3口均为准双向口。

image.png
注意:准双向口与双向口的差别。准双向口仅有两个状态。而P0口作为总线使用,口线内无上拉电阻,处于高阻“悬浮”态。故P0口为双向三态I/O口。
为什么P0口要有高阻“悬浮”态?准双向I/O口则无高阻的“悬浮”状态。
另外,准双向口作通用I/O的输入口使用时,一定要向该口先写入“1”。

2、AT89S52的CPU
CPU由运算器和控制器构成。
运算器:
对操作数进行算术、逻辑和位操作运算。主要包括算术逻辑运算单元ALU、累加器A、位处理器、程序状态字寄存器PSW及两个暂存器等。
1.算术逻辑运算单元ALU
可对8位变量逻辑运算(与、或、异或、循环、求补和清零),还可算术运算(加、减、乘、除),ALU还有位操作功能,对位变量进行位处理,如置“1”、清“0”、求补、测试转移及逻辑“与”、“或”等。
2.累加器A
使用最频繁的寄存器,可写为Acc。“A”与“Acc” 书写上的差别,将在第3章介绍。位于片内的特殊功能寄存器区。
作用如下:
(1)ALU单元的输入数据源之一,又是ALU运算结果存放单元。
(2)数据传送大多都通过累加器A,相当于数据的中转站。为解决“瓶颈堵塞”问题,AT89S52增加了一部分可以不经过累加器的传送指令。
A的进位标志Cy是特殊的,因为它同时又是位处理机的位累加器。
3.程序状态字寄存器PSW
PSW(Program Status Word)位于片内特殊功能寄存器区,字节地址为D0H。
包含了程序运行状态的信息,其中4位保存当前指令执行后的状态,供程序查询和判断。格式如下图所示。

image.png
PSW中各个位的功能:
(1)Cy(PSW.7)进位标志位
  可写为C。在算术和逻辑运算时,若有进位/借位,Cy=1;否则,Cy=0。在位处理器中,它是位累加器。
(2)Ac(PSW.6)辅助进位标志位
  在BCD码运算时,用作十进位调整。即当D3位向D4位产生进位或借位时,Ac=1;否则,Ac=0。
(3)F0(PSW.5)用户设定标志位
  由用户使用的一个状态标志位,可用指令来使它置1或清0,控制程序的流向。用户应充分利用。
(4)RS1、RS0(PSW.4、PSW.3)4组工作寄存器区选择
选择片内RAM区中的4组工作寄存器区中的某一组为当前工作寄存区见下表。

image.png
(5)OV(PSW.2)溢出标志位   当执行算术指令时,用来指示运算结果是否产生溢出。如果结果产生溢出,OV=1;否则,OV=0。
(6)PSW.1位:保留位
(7)P(PSW.0)奇偶标志位    指令执行完,累加器A中“1”的个数是奇数还是偶数。  
P=1,表示A中“1”的个数为奇数。
P=0,表示A中“1”的个数为偶数。    此标志位对串行通信有重要的意义,常用奇偶检验的方法来检验数据串行传输的可靠性
控制器:
任务识别指令,并根据指令的性质控制单片机各功能部件,从而保证单片机各部分能自动协调地工作。
  控制器包括:程序计数器、指令寄存器、指令译码器、定时及控制逻辑电路等。功能是控制指令的读入、译码和执行,从而对各功能部件进行定时和逻辑控制。
  程序计数器PC是一个独立的16位计数器,不可访问。单片机复位时,PC中内容为0000H,从程序存储器0000H单元取指令,开始执行程序。
  PC工作过程:CPU读指令时,PC的内容作为所取指令的地址,程序存储器按此地址输出指令字节,同时PC自动加1。
PC中内容变化轨迹决定程序流程。当顺序执行程序时自动加1;执行转移程序或子程序、中断子程序调用时,自动将其内容更改成所要转移的目的地址。
PC的计数宽度决定了程序存储器的地址范围。PC为16位,故可对64KB(=216B)寻址。

3、AT89S52存储器的结构
存储器的结构特点之一是将程序存储器和数据存储器分开(哈佛结构),并有各自的访问指令。
存储器空间可分为4类。
1.程序存储器空间
片内和片外两部分。
片内4KB Flash ,编程和擦除完全是电气实现。可用通用编程器对其编程,也可在线编程。
当片内4KB Flash 存储器不够用时,可片外扩展,最多可扩展至64KB程序存储器。
2.数据存储器空间
片内与片外两部分。
片内有256B RAM。
片内RAM 不够用时,在片外可扩展至64KB RAM 。
3.特殊功能寄存器SFR (Special Function Register)
   片内各功能部件的控制寄存器及状态寄存器。综合反映了整个单片机基本系统内部实际的工作状态及工作方式。
4.位地址空间
      共有219个可寻址位,构成了位地址空间。位于片RAM区字节地址20H~2FH(共128位)和特殊功能寄存器区(片内RAM区字节地址80H~FFH区间内,共定义了91个可寻址位)。
程序存储器空间:
   存放程序和表格之类的固定常数。片内为8KB的 Flash ,地址为0000H~1FFFH。16位地址线,可外扩的程序存储器空间最大为64KB,地址为0000H~FFFFH。使用时应注意以下问题:
(1)分为片内和片外两部分,访问片内的还是片外的程序存储器,由EA*引脚电平确定。
  EA*=1时,CPU从片内0000H开始取指令,当PC值没有超出0FFFH时,只访问片内Flash 存储器,当PC值超出1FFFH自动转向读片外程序存储器空间2000H~FFFFH 内的程序。
  EA*=0时,只能执行片外程序存储器(0000H~FFFFH)中的程序。不理会片内4KB Flash 存储器。
(2)程序存储器某些固定单元用于各中断源中断服务程序入口。
64KB程序存储器空间中有6个特殊单元分别对应于5个中断源 的中断入口地址,见下表。
通常这5个中断入口地址处都放一条跳转指令跳向对应的中断服务子程序,而不是直接存放中断服务子程序。

image.png
表中最后一行,即第6个中断入口地址002BH,是AT89S52在AT89S51单片机基础上新增加的T2对应的中断入口地址。
使用汇编语言编程时,通常在这些中断入口地址处存放1条跳转指令跳向对应的中断服务子程序,而不是直接存放中断服务子程序。这是因为两个中断入口间隔仅有8个单元,如果这8个单元存放中断服务子程序,有时是不够用的。
     AT89S52复位后,PC的内容为0000H,从程序存储器地址0000H处开始执行程序。由于外部中断0的中断服务程序入口地址为0003H,为使主程序不与外部中断0的中断服务程序发生冲突,一般在0000H单元存放一条跳转指令,转向主程序的入口地址。

数据存储器空间:
片内与片外两部分。
1.片内数据存储器
        AT89S52的片内数据存储器(RAM)共有256个单元,字节地址为00H~FFH。下图为AT89S52片内RAM的结构。地址为80H~FFH为特殊功能寄存器区,与片内的高128B的RAM单元统一编址,但它是另一专用空间区域,将在后面介绍。

image.png
00H~1FH 的32个单元是4组通用工作寄存器区,每区包含8B,为R7~R0。可通过指令改变RS1、RS0两位来选择。
20H~2FH的16个单元的128位可位寻址,也可字节寻址。
30H~FFH的单元只能字节寻址,用作存数据以及作为堆栈区。
      AT89S52与AT89S51片内数据存储器相比,片内数据存储器增加了128B,对应的字节地址为80H~FFH。这高128B的RAM单元地址与特殊功能寄存器区的字节地址重合,但它们是两个不同的物理区域。

对这两个具有相同地址区域进行访问时,是由不同的指令寻址方式(将在指令系统一章中介绍)来区分,对地址为80H~FFH的RAM区,只能采用间接寻址方式访问,而对地址为80H~FFH的特殊功能寄存器区访问只能采用直接寻址方式。但是对于低128B(地址00H~7FH)的RAM区,即可采用直接寻址方式也可采用间接寻址方式来访问。
2.片外数据存储器
当片内256B的RAM不够用时,需外扩,最多可外扩64KB的RAM。注意,片内RAM与片外RAM两个空间是相互独立的,片内RAM与片外RAM的低256B的地址是相同的,但由于使用的是不同的访问指令,所以不会发生冲突。

特殊功能寄存器(SFR):
特殊功能寄存器映射在片内RAM的 80H~FFH 区域中,共32个。下表为 SFR的名称及其分布。有些还可位寻址,位地址见下表。
   与AT89S51相比,新增加了6个特殊功能寄存器:T2CON、T2MOD、RCAP2L、RCAP2H、TL2和TH2,已在下表中标出。
   凡是可位寻址的SFR,字节地址末位只能是0H或8H。另外,若读/写未定义单元,将得到一个不确定的随机数。

image.png
image.png
1.堆栈指针SP
堆栈只能设在片内的RAM区, SP指示堆栈顶部在内部RAM块中的位置。
堆栈结构—向上生长型。单片机复位后,SP为07H,使得堆栈实际上从08H单元开始,由于08H~1FH单元分别是属于1~3组的工作寄存器区,最好在复位后把SP值改置为60H或更大的值,避免堆栈与工作寄存器冲突。
堆栈是为子程序调用和中断操作而设,用来保护断点和现场。
(1)保护断点。无论是子程序调用操作还是中断服务子程序调用,最终都要返回主程序。应预先把主程序的断点在堆栈中保护起来,为程序正确返回做准备。
(2)现场保护。执行子程序或中断服务子程序时,要用到一些寄存器单元,会破坏原有内容。要把有关寄存器单元的内容保存起来,送入堆栈,这就是所谓的“现场保护”。
两种操作:数据压入(PUSH)堆栈,数据弹出(POP)堆栈。数据压入堆栈,SP自动加1;数据弹出堆栈,SP自动减1。
2.寄存器B
为执行乘法和除法而设。在不执行乘、除法操作的情况下,可把它当作一个普通寄存器来使用。
乘法,两乘数分别在A、B中,执行乘法指令后,乘积在BA中。
除法,被除数取自A,除数取自B,商存放在A中,余数存B中。
3.AUXR寄存器
    AUXR是辅助寄存器,其格式如下图所示:

image.png
位地址空间:
219个寻址位的位地址,位地址范围为 00H~FFH,其中 00H~7FH 这128位处于片内RAM 字节地址 20H~2FH 单元中,如下表所示。
image.png
其余的91个可寻址位分布在特殊功能寄存器SFR中,见下表。
从表中可发现一个规律,凡是可位寻址的特殊功能寄存器,其最低的位地址等于其字节地址,且其字节地址的末位都为0H或8H。

image.png