AT89S52单片机详解及应用指南

目录

一.AT89S52单片机的硬件组成

1.CPU(微处理器)

(1)运算器

(2)控制器

2.数据存储器 (RAM)

(1)片内数据存储器

(2)片外数据存储器

3.程序存储器(Flash ROM)

4.定时器/计数器

5.中断系统

6.串行口

7.P0口、P1口、P2口和P3口

8.特殊功能寄存器 (SFR)

常用的特殊功能寄存器:

(1)堆栈指针SP

(2)寄存器B

(3)AUXR寄存器

(4)数据指针DPTR0和DPTR1

(5)AUXR1寄存器

9.1个看门狗定时器WDT

二.各类存储器的结构如下

三.单片机的引脚

引脚按其功能可分为如下3类:电源及时钟引脚,控制引脚,I/O引脚电源及时钟引脚:Vcc、Vss;XTAL1、XTAL2。

控制引脚:PSEN*,ALE/PROG*,EA*Vpp,RST

I/O口引脚:P0,P1,P2,P3,为4个8位I/O


一.AT89S52单片机的硬件组成

1.CPU(微处理器)

8位的CPU,与通用CPU基本相同,同样包括了运算器和控制器两大部分,还有面向控制的位处理功能。

(1)运算器

对操作数进行算术、逻辑和位操作运算。主要包括算术逻辑运算单元ALU、累加器A、位处理器、程序状态字寄存器(PSW)及两个暂存器等。
算术逻辑运算单元ALU
可对8位变量逻辑运算 (与、或、异或、循环、求补和清零)还可算术运算(加、减、乘、除),ALU还有位操作功能,对位变量进行位处理,如置“1”、清“0”、求补、测试转移及逻辑“与”、“或”等

累加器A
使用最频繁的寄存器,可写为Acc。位于片内的特殊功能寄存器区
(1)ALU单元的输入数据源之一,又是ALU运算结果存放单元。
(2)数据传送大多都通过累加器A,相当于数据的中转站。为解决“瓶颈堵塞”问题,AT89S52增加了一部分可以不经过累加器的传送指令。
A的进位标志Cy是特殊的,因为它同时又是位处理机的位累加器。

程序状态字寄存器PSW
PSW(Program Status Word)位于片内特殊功能寄存器区字节地址为D0H。
包含了程序运行状态的信息,其中4位保存当前指令执行后的状态,供程序查询和判断。

(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组工作寄存器区中的某一组为当前工作寄存区。

(5) 0V (PSw.2) 溢出标志位
当执行算术指令时,用来指示运算结果是否产生溢出。如果结果产生溢出,0V=1;否则,0V=0。
(6) PSW.1位:保留位
(7) P (PSW.0) 奇偶标志位
指令执行完,累加器A中“1”的个数是奇数还是偶数。
P=1,表示A中“1”的个数为奇数
P=0,表示A中“1”的个数为偶数
此标志位对串行通信有重要的意义,常用奇偶检验的方法来检验数据串行传输的可靠性。

(2)控制器

控制器包括:程序计数器、指令寄存器、指令译码器、定时及控制逻辑电路等。功能是控制指令的读入、译码和执行从而对各功能部件进行定时和逻辑控制。
程序计数器PC:

程序计数器PC是一个独立的16位计数器,不可访问。单片机复位时,PC中内容为0000H,从程序存储器0000H单元取指令,开始执行程序。

注:如果片内存储器是8K,那么片外扩展+片内最多只能到64K,因为PC计数器是16位的,2的16次方是64K,所以PC指针最多能指向64K存储单元。

PC工作过程:

CPU读指令时,PC的内容作为所取指令的地址程序存储器按此地址输出指令字节,同时PC自动加1。

PC中内容变化轨迹决定程序流程。当顺序执行程序时自动加1。执行转移程序或子程序、中断子程序调用时,自动将其内容更改成所要转移的目的地址。
PC的计数宽度决定了程序存储器的地址范围。PC为16位,故可对64KB (=216B) 寻址。

2.数据存储器 (RAM)
(1)片内数据存储器

AT89S52的片内数据存储器 (RAM)共有256个单元,字节地址为00H~FFH。图为AT89S52片内RAM的结构。地址为80H~FFH为特殊功能寄存器区,与片内的高128B的RAM单元(S51没有这一RAM单元)统一编址,但它是另一专用空间区域。

对这两个具有相同地址区域进行访问时,是由不同的指令寻址方式来区分,对地址为80H~FFH的RAM区,只能采用间接寻址方式访问,而对地址为80H~FFH的特殊功能寄存器区访问只能采用直接寻址方式。但是对于低128B (地址00H~7FH)的RAM区,即可采用直接寻址方式也可采用间接寻址方式来访问。

(2)片外数据存储器

当片内256B的RAM不够用时,需外扩,最多可外扩64KB的RAM。注意片内RAM与片外RAM两个空间是相互独立的,片内RAM与片外RAM的低256B的地址是相同的,但由于使用的是不同的访问指令,所以不会发生冲突。

3.程序存储器(Flash ROM)

用来存储程序和表格之类的固定常数。分为片内和片外两部分:
片内4KB Flash ,编程和擦除完全是电气实现。可用通用编程器对其编程,也可在线编程 (ISP)
当片内Flash存储器不够用时,可片外扩展,最多可扩展至64KB程序存储器。访问片内的还是片外的程序存储器,由EA*引脚电平决定:

EA*=1时,CPU从片内0000H开始取指令,当PC值没有超出1FFFH时,只访问片内Flash 存储器,当PC值超出1FFFH自动转向读片外程序存储器空间2000H~FFFFH内的程序。
EA*=0时,只能执行片外程序存储器(0000H~FFFFH)中的程序。不理会片内4KBFlash 存储器。

AT89S51片内有4KB的FLASH存储器,AT89S52 片内有8KB的Flash存储器,地址为0000H~1FFFH,AT89S53/AT89S54/AT89S55片内集成了12KB/16KB/20KB的Flash存储器,如果片内程序存储器容量不够,片外最多可外扩至64KB(0000H~FFFFH)程序存储器,即“片内+片外”的程序存储器总容量不超过64KB

注:程序存储器某些固定单元用于各中断源终端服务程序入口。

64KB程序存储器空间中有6个特殊单元分别对应于5个中断源的中断入口地址。
通常这5个中断入口地址处都放一条跳转指令跳向对应的中断服务子程序,而不是直接存放中断服务子程序。

每个中断地址之间差8个地址单元,一般是不够用的,因此多采用跳转

4.定时器/计数器

片内有3个16位的定时器/计数器,具有4种工作方式

5.中断系统

具有6个中断源(S51单片机只有5个),2级中断优先权。

6.串行口

1个全双工的异步串行口,4种工作方式。可进行串行通信扩展并行I/O口,可与多个单片机构成多机系统。

7.P0口、P1口、P2口和P3口

4个8位并行I/O口。(转单片机引脚处有详细介绍)

8.特殊功能寄存器 (SFR)

共有32个特殊功能寄存器(S51单片机有27个),用于CPU对片内各外设部件进行管理、控制和监视。特殊功能寄存器实际上是片内各外设部件的控制寄存器和状态寄存器,这些特殊功能寄存器映射在片内RAM区的80H~FFH的地址区间内。

特殊功能寄存器映射在片内RAM的 80H~FFH 区域中,共32个。

下表展示了SFR的名称及其分布,有些还可位寻址,位地址如下:

与AT89S51相比,新增加了6个特殊功能寄存器: T2CON、T2MODRCAP2L、RCAP2H、TL2和TH2,已在表中标出。


凡是可位寻址的SFR,字节地址末位只能是0H或8H。另外,若读/写未定义单元,将得到一个不确定的随机数。

常用的特殊功能寄存器:
(1)堆栈指针SP

堆栈只能设在片内的RAM区,SP指示堆栈顶部在内部RAM块中的位置堆栈结构一向上生长型。单片机复位后,SP为07H,使得堆栈实际上从08H单元开始,由于08H~1FH单元分别是属于1~3组的工作寄存器区,最好在复位后把SP值改置为60H或更大的值,避免堆栈与工作寄存器冲突,因为复位后,SP是07H,也就是从08H开始工作,如果工作寄存器的第1组工作寄存器区正在工作,就会发生冲突。


堆栈是为子程序调用和中断操作而设,用来保护断点和现场。

两种操作:数据压入 (PUSH) 堆栈,数据弹出 (POP) 堆栈。数据压入堆栈,SP自动加1;数据弹出堆栈,SP自动减1。

(2)寄存器B

为执行乘法和除法而设。在不执行乘、除法操作的情况下,可把它当作个普通寄存器来使用。

乘法,两乘数分别在A、B中,执行乘法指令后,乘积在BA中。
除法,被除数取自A,除数取自B,商存放在A中,余数存B中。

(3)AUXR寄存器

AUXR是辅助寄存器,其格式如图:

DISALE: ALE的禁止/允许位。
0: ALE有效,发出脉冲;
1:ALE仅在执行MOVC和MOVX类指令时有效,不访问外部存储器时,ALE不输出脉冲信号
DISRT0:禁止/允许WDT溢出时的复位输出
0:WDT溢出时,在RST引脚输出一个高电平脉冲
1:RST引脚仅为输入脚
WDIDLE:WDT在空闲模式下的禁止/允许位
0:WDT在空闲模式下继续计数;
1:WDT在空闲模式下暂停计数

(4)数据指针DPTR0和DPTR1

双数据指针寄存器,便于访问数据存储器
DPTR0: AT89C51单片机原有的数据指针;
DPTR1:新增加的数据指针。
AUXR1的DPS位用于选择两个数据指针。当DPS=0时,选用DPTR0:当DPS=1时,选用DPTR1。
数据指针可作为一个16位寄存器来用,也可作为两个独立的8位寄存器DP0H(或DP1H)和DP0L (或DP1L)来用。

(5)AUXR1寄存器

AUXR1是辅助寄存器,格式如图:


数据指针寄存器选择位DPS:
0:选择数据指针寄存器DPTR0;
1:选择数据指针寄存器DPTR1。

注:程序存储器空间,数据存储器空间,特殊功能寄存器 (SFR),还有位地址空间

位地址空间:
共有219个可寻址位,构成了位地址空间。位于片内RAM区字节地址20H~2FH(共128位)

和特殊功能寄存器区(片内RAM区字节地址80H~FFH区间内)

共定义了91个可寻址位:

9.1个看门狗定时器WDT

当单片机由于干扰而使程序陷入死循环或跑飞状态时,可引起单片机复位,使程序恢复正常运行。

WDT包含一个14位计数器和看门狗定时器复位寄存器—-WDTRST
当CPU由于干扰,程序陷入死循环或跑飞状态时,WDT提供了一种使程序恢复正常运行的有效手段。

注:AT89S52完全兼容AT89C51/AT89S51单片机,使用AT89C51/AT89S51单片机的系统,在保留原来软硬件的基础上,可用AT89S52直接代换。

二.各类存储器的结构如下

三.单片机的引脚

引脚按其功能可分为如下3类:电源及时钟引脚,控制引脚,I/O引脚
电源及时钟引脚:Vcc、Vss;XTAL1、XTAL2。

(1)电源引脚
 •Vcc(40脚) : +5V电源

•Vss(20脚) : 数字地。

(2)时钟引脚

•XTAL1 (19脚) : 片内振荡器反相放大器和时钟发生器电路输入端。用片内振荡器时,该脚接外部石英晶体和微调电容。外接时钟源时,该脚接外部时钟振荡器的信号。
•XTAL2 (18脚) : 片内振荡器反相放大器的输出端。当使用片内振荡器,该脚连接外部石英晶体和微调电容。当使用外部时钟源时,本脚悬空

控制引脚:PSEN*,ALE/PROG*,EA*Vpp,RST

(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值超出IFFFH(即超出片内8KB Flash地址范围) 时,将自动转向读取片外 (2000H-FFFFH)程序存储器空间中的程序。

EA*=0只读取外部的程序存储器中的内容,读取的地址范围为0000H~FFFFH,片内的4KBFlash 程序存储器不起作用。
Vpp:引脚第二功能,对片内Flash编程,接编程电压。

(3) ALE/PROG*(Address Latch Enable/PROGramming,30脚)
ALE为地址锁存控制信号端,为第一功能。由于引脚数目有限,P0口是作为低8位地址总线与8位数据总线分时复用的,P2口作为高8位地址总线,当单片机访问外部程序存储器或外部数据存储器时,ALE的负跳变将单片机P0口先发出的低8位地址锁存在P0口外接的地址锁存器中,然后P0口再作为8位数据总线使用。

此外,单片机正常运行时,ALE端一直有正脉冲信号输出,此频率为时钟频率的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脚)

片外程序存储器读选通信号,低电平有效。

I/O口引脚:P0,P1,P2,P3,为4个8位I/O

4个双向的8位并行I/O端口,分别记为P0、P1、P2和P3,其中输出锁存器属于特殊功能寄存器。端口的每一位均由输出锁存器、输出驱动器和输入缓冲器组成,4个端口按字节输入/输出外,也可位寻址。

(1) P0口: P0.7~P0.0引脚
作为总线口时,为漏极开路的8位并行双向I/O口,具有悬浮高阻态,作为输出口时,每个引脚可驱动8个LS型TTL负载。

P0口是一个双功能的8位并行端口,字节地址为80H,位地址为80H~87H端口的各位具有完全相同但又相互独立的电路结构。

当P0口用作地址/数据总线口使用时,是一个真正的双向口,用作与外部扩展的存储器或I/O连接,输出低8位地址和输出/输入8位数据
当P0口作通用I/O口使用时,各引脚需要在片外接上拉电阻,此时端口不存在高阻抗的悬浮状态,因此是一个准双向口。

准双向口与双向口的差别:

准双向口仅有两个状态。而PO口作为总线使用,口线内无上拉电阻,处于高阻“悬浮”态。故P0口为双向三态I/0口。另外,准双向口作通用IO的输入口使用时,一定要向该口先写入“1”。

P0口某一位的位电路结构:


(1)P0口用作系统的地址/数据总线用:

作为地址/数据总线输出;作为数据总线输入
(2) P0口用作通用I/O口使用:
P0口用作通用I/O口输出;
P0口作为通用I/O口输入时,有两种读入方式:“读锁存器”和“读引脚”(指令区别读锁存器还是读引脚,读锁存器,实际是“读-改-写”的过程。)
 

(2) P1口: P1.7~P1.0引脚
准双向I/O口(因为内部有固定的上拉电阻,输入时需要提前写入1的准备动作,所以称为准双向口) ,可驱动4个LS型TTL负载

P1口某些引脚的第二功能如下:
P1.0/T2:T2脚为定时器T2的外部计数信号输入端T2。

P1.1/T2EX: T2EX为T2的捕捉/重新装载触发及方向控制T2EX。

P1.5/MOSI:MOSI用于对片内Flash存储器串行编程和校验

P1.6/MISO:MISO用于对片内Flash存储器串行编程和校验

P17/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) 在外围接电路设计上的微小差别

P1口为通用I/O端口字节地址为90H(P1),位地址为90H~97H(P1.0,P1.2)。位电路结构如图:

P1口工作原理:

P1口只作为通用I/O口使用。
P1口作为输出口时,若CPU输出1,Q=1,Q*=0,场效应管截止,P1.x引脚的输出为1;若CPU输出0,Q=0,Q*=1,场效应管导通P1.x引脚的输出为0。
P1口作为输入口时分为“读锁存器”和“读脚”两种方式“读锁存器”时,锁存器的输出端O的状态经输入缓冲器BUF1进入内部总线;“读引脚”时,先向锁存器写1,使场效应管截止,P1.引脚上的电平经输入缓冲器BUF2进入内部总线

(3) P2口: P2.7~P2.0引脚

准双向I/O口,引脚内部接有上拉电阻,可驱动4个LS型TTL负载,当AT89S52访问外部存储器及I/O口时,P2口作为高8位地址总线使用,输出高8位地址。与P0口输出并经锁存器的锁存的低8位地址一起构成16位地址,共可寻址64KB的片外地址空间。当P2口作为高8位地址输出口时,输出锁存器的内容保持不变。
当P2口不作为高8位地址总线时,可作为通用的I/O口使用。

一般情况下,P2口大多作为高8位地址总线口使用,这时就不能再作为通用I/O口。如果不作为地址总线口使用,可作为通用IO口使用。
双功能口,字节地址为AOH位地址为A0H~A7H。P2口某一位的位电路结构如图:

P2口的工作原理:

(1) P2口用作高8位地址总线口
在内部控制信号作用下,MUX与“地址”接通。当“地址”线为0时场效应管导通,P2.引脚输出0;当“地址”线为1时,场效应管截止,P2.x引脚输出1。
(2) P2口用作通用I/O口
在内部控制信号作用下,MUX与锁存器的Q端接通。

CPU输出1时,Q=1,场效应管截止,P2.x引脚输出1;CPU输出0时,Q=0,场效应管导通,P2.x引脚输出0。
输入时,分为“读锁存器”和“读引脚”两种方式。“读锁存器”时,Q端信号经输入缓冲器BUF1进入内部总线:“读引脚”时,先向锁存器写1,使场效应管截止,P2.x引脚上的电平经输入缓冲器BUF2进入内部总线。

(4) P3口: P3.7~P3.0
准双向I/O口,具有内部上拉电阻,P3口的第一功能是作为通用的I/O口使用,可驱动4个LS型TTL负载,由于引脚数目有限,在P3口增加了第二功能。每1位都可以分别定义为第二输入功能或第二输出功能。P3口字节地址为B0H,位地址B0H~B7H。P3口某一位的位电路结构如下:

由于P3口每一引脚有第一功能与第二功能,究竟是使用哪个功能,完全是由单片机执行的指令控制来自动切换的,用户不需要进行任何设置。
引脚输入部分有两个缓冲器,第二功能的输入信号取自缓冲器BUF3的输出端,第一功能的输入信号取自缓冲器BUF2的输出端。

P3口的工作原理:

(1) P3口用作第二输入/输出功能
当选择第二输出功能时,该位的锁存器需要置“1”,使“与非门”为开启状态。当第二输出为1时,场效应管截止,P3.x引脚输出为1;当第二输出为0时,场效应管导通,P3.x引脚输出为0。
当选择第二输入功能时,该位的锁存器和第二输出功能端均应置1,保证场效应管截止,P3.x引脚的信息由输入缓冲器BUF3的输出获得

(2) P3口用作第一功能-通用I/O口
当P3口用作通用I/0的输出时,“第二输出功能”端应保持高电平“与非门”为开启状态。CPU输出1时,Q=1,场效应管截止,P3.x引脚输出为1;CPU输出0时,Q=0,场效应管导通,P3.x引脚输出为0。
当P3口用作通用I/O的输入时,P3.x位的输出锁存器和“第二输出功能”端均应置1,场效应管截止,P3.x引脚信息通过输入BUF3和BUF2进入内部总线,完成“读引脚”操作。
当P3口用作通用I/O的输入时,也可执行“读锁存器”操作,此时Q端信息经过缓冲器BUF1进入内部总线。

注:除了P0能驱动8个LS型TTL负载之外,其他只能驱动4个LS型TTL负载,这是因为P0没有上拉电阻,带负载能力比较强

以下是单片机引脚分布:


内容太多啦,后续深入学习会继续更新,若有错误,请佬们不吝赐教!!💖💖💖

物联沃分享整理
物联沃-IOTWORD物联网 » AT89S52单片机详解及应用指南

发表评论