第2章 AT89S51单片机硬件结构

【内容概要】本章介绍AT89S51单片机的片内硬件基本结构、引脚功能、存储器结构、特殊功能寄存器功能、4个并行I/O端口的结构和特点,此外还对复位电路和时钟电路的设计以及节电工作模式进行了介绍。

单片机应用的特点是软件控制硬件,所以,读者应首先熟知并掌握AT89S51单片机片内硬件的基本结构和特点。

2.1 AT89S51单片机的硬件组成

AT89S51单片机的片内硬件组成结构如图2-1所示。它把那些作为控制应用所必需的基本外围部件都集成在一个集成电路芯片上。它具有如下外围部件及特性:

(1)8位微处理器(CPU);
(2)数据存储器(128B RAM);
(3)程序存储器(4KB Flash ROM);
(4)4个8位可编程并行I/O口(P0口、P1口、P2口和P3口);
(5)1个全双工的异步串行口;
(6)2个可编程的16位定时器/计数器;
(7)1个看门狗定时器(WDT);
(8)中断系统具有5个中断源、5个中断向量;
(9)特殊功能寄存器(SFR)26个;
(10)低功耗节电模式有空闲模式和掉电模式,且具有掉电模式下的中断恢复模式;
(11)3个程序加密锁定位。

与AT89C51相比,AT89S51具有更突出的优点:

(1)增加了在线可编程功能(In System Program,ISP),灵活的在线编程方式(字节和页编程),使得现场程序调试和修改更加方便灵活;
(2)数据指针增加到两个,方便了对片外RAM的访问过程;
(3)增加了看门狗定时器,提高了系统的抗干扰能力;
(4)增加了断电标志;
(5)增加了掉电状态下的中断恢复模式。

AT89S51片内的各部件通过片内单一总线连接而成(见图2-1),其基本结构依旧是CPU加上外围芯片的传统微型计算机结构模式,但CPU对各种外围部件的控制是采用特殊功能寄存器(Special Function Register,SFR)的集中控制方式。

下面对图2-1中的片内各部件作一简单介绍。

图像说明文字

(1)CPU(微处理器):AT89S51中有1个8位的CPU,包括了运算器和控制器两大部分,此外还有面向控制的位处理功能。
(2)数据存储器(RAM):片内为128B(增强型的52子系列为256B),片外最多还可外扩64KB。
(3)程序存储器(Flash ROM):用来存储程序。AT89S51片内集成有4KB的Flash存储器(AT89S52 片内则集成了8KB的Flash存储器;AT89C55片内集成了20KB的Flash存储器),如果片内程序存储器容量不够,片外最多可外扩64KB程序存储器。
(4)中断系统:具有5个中断源,2级中断优先权。
(5)定时器/计数器:片内有2个16位的定时器/计数器(增强型的52子系列有3个16位的定时器/计数器),具有4种工作方式。
(6)1个看门狗定时器WDT,当单片机由于干扰而使程序陷入死循环或跑飞状态时,使程序恢复正常运行。
(7)串行口:1个全双工的异步串行口(UART),具有4种工作方式。可进行串行通信,扩展并行I/O口,还可与多个单片机相连构成多机串行通信系统。
(8)4个8位的并行口:P0口、P1口、P2口和P3口。
(9)特殊功能寄存器(SFR):共有26个特殊功能寄存器,用于CPU对片内各外围部件进行管理、控制和监视。特殊功能寄存器实际上是片内各个外围部件的控制寄存器和状态寄存器,这些特殊功能寄存器映射在片内RAM区80H~FFH的地址区间内。

AT89S51完全兼容AT89C51单片机,使用AT89C51单片机的系统,在保留原来软硬件的条件下,完全可以用AT89S51直接代换。

2.2 AT89S51的引脚功能

掌握AT89S51单片机,应首先熟悉并掌握各引脚的功能。AT89S51与各种51单片机的引脚是互相兼容的。目前,AT89S51单片机多采用40只引脚的塑料双列直插封装(DIP)方式,如图2-2所示。此外,还有44引脚的PLCC和TQFP封装方式的芯片。

图像说明文字

40只引脚按其功能可分为如下3类:

(1)电源及时钟引脚—VCC、VSS;XTAL1、XTAL2;
(2)控制引脚— 、ALE/ 、 / VPP、RST(即RESET);
(3)I/O口引脚—P0、P1、P2与P3,为4个8位I/O口的外部引脚。

下面结合图2-2介绍各引脚的功能。

2.2.1 电源及时钟引脚

1.电源引脚

电源引脚接入单片机的工作电源。

(1)VCC(40引脚):接+5V电源。
(2)VSS(20引脚):接数字地。

2.时钟引脚

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

2.2.2 控制引脚

控制引脚提供控制信号,有的引脚还具有复用功能。

(1)RST(RESET,9引脚)。复位信号输入端,高电平有效。在此引脚加上持续时间大于2个机器周期的高电平,就可以使单片机复位。在单片机正常工作时,此引脚应为≤0.5V的低电平。
当看门狗定时器溢出输出时,该引脚将输出长达96个时钟振荡周期的高电平。

(2) / VPP (Enable Address/Voltage Pulse of Programing,31引脚)。 (External Access Enable)为该引脚的第一功能:外部程序存储器访问允许控制端。
当 引脚接高电平时,在PC值不超出0FFFH(即不超出片内4KB Flash存储器的地址范围)时,单片机读片内程序存储器(4KB)中的程序,但PC值超出(即超出片内4KB Flash存储器地址范围)时,将自动转向读取片外60KB(1000H~FFFFH)程序存储器空间中的程序。
当引脚为低电平时,只读取外部的程序存储器中的内容,读取的地址范围为0000H~FFFFH,片内的4KB Flash 程序存储器不起作用。
VPP为该引脚的第二功能,在对片内Flash进行编程时,VPP引脚接入编程电压。

(3)ALE/ (Address Latch Enable/PROGramming,30引脚)。ALE为CPU访问外部程序存储器或外部数据存储器提供一个地址锁存信号,将低8位地址锁存在片外的地址锁存器中。
此外,单片机在正常运行时,ALE端一直有正脉冲信号输出,此频率为时钟振荡器频率fosc的1/6。该正脉冲振荡信号可作外部定时或触发信号使用。但是要注意,每当AT89S51访问外部RAM时(即执行MOVX类指令时),要丢失一个ALE脉冲。
如果需要,可将特殊功能寄存器AUXR(地址为8EH,将在本章后面介绍)的第0位(ALE禁止位)置1,来禁止ALE操作,但在执行访问外部程序存储器或外部数据存储器指令“MOVC”或“MOVX”时,ALE仍然有效。也就是说,ALE的禁止位不影响对外部存储器的访问。
为该引脚的第二功能,在对片内Flash存储器编程时,此引脚作为编程脉冲输入端。

(4) (Program Strobe ENable,29引脚)。片外程序存储器的读选通信号,低电平有效。

2.2.3 并行I/O口引脚

(1)P0口:8位,漏极开路的双向I/O口。
当AT89S51扩展外部存储器及I/O接口芯片时,P0口作为地址总线(低8位)及数据总线的分时复用端口。
P0口也可作为通用的I/O口使用,但需加上拉电阻,这时为准双向口。当作为通用的I/O输入时,应先向端口输出锁存器写入1。P0口可驱动8个LS型TTL负载。

(2)P1口:8位,准双向I/O口,具有内部上拉电阻。
P1口是专为用户使用的准双向I/O口,当作为通用的I/O输入时,应先向端口锁存器写入1。P1口可驱动4个LS型TTL负载。
P1.5/MOSI、P1.6/MISO和P1.7/SCK也可用于对片内Flash存储器串行编程和校验,它们分别是串行数据输入、输出和移位脉冲引脚。

(3)P2口:8位,准双向I/O口,具有内部上拉电阻。
当AT89S51扩展外部存储器及I/O口时,P2口作为高8位地址总线用,输出高8位地址。
P2口也可作为普通的I/O口使用。当作为通用的I/O输入时,应先向端口输出锁存器写入1。P2口可驱动4个LS型TTL负载。

(4)P3口:8位,准双向I/O口,具有内部上拉电阻。
P3口可作为通用的I/O口使用。当作为通用的I/O输入时,应先向端口输出锁存器写入1。P3口可驱动4个LS型TTL负载。
P3口还可提供第二功能,其第二功能定义如表2-1所示,读者应熟记。

图像说明文字

综上所述,P0口作为地址总线(低8位)及数据总线使用时,为双向口。作为通用的I/O口使用时,为准双向口,这时需加上拉电阻。P1口、P2口、P3口均为准双向口。

读者要特别注意准双向口与双向口的差别。准双向口仅有两个状态。而P0口作为地址总线(低8位)及数据总线使用时,口线内无上拉电阻,由两个MOS管串接且开漏输出,处于高阻的“悬浮”状态。因此P0口与P1口、P2口、P3口这3个准双向口相比,又多了一个高阻“悬浮”态,故P0口为双向三态I/O口。为什么P0口要有高阻“悬浮”态?这是由于P0口作为数据总线使用时,多个数据源都挂在数据总线上,当P0口不需与其他数据源打交道时,需要与数据总线高阻“悬浮”隔离。因此,P0口必须要有高阻的“悬浮”状态。而准双向I/O口则无高阻的“悬浮”状态。另外,准双向口作通用I/O的输入口使用时,一定要向该口先写入“1”。以上的准双向口与双向口的差别,读者在学习第4章后,将会有深刻的理解。

至此,AT89S51单片机的40只引脚已介绍完毕,读者应熟记每一个引脚的功能,这对于掌握AT89S51单片机及应用系统的硬件电路设计十分重要。

2.3 AT89S51的CPU

由图2-1可见,AT89S51的CPU是由运算器和控制器构成的。

2.3.1 运算器

运算器主要用来对操作数进行算术、逻辑和位操作运算。主要包括算术逻辑运算单元ALU、累加器A、位处理器、程序状态字寄存器PSW及两个暂存器等。

1.算术逻辑运算单元ALU

ALU的功能十分强大,它不仅可对8位变量进行逻辑与、逻辑或、逻辑异或、循环、求补和清0等基本操作,还可以进行加、减、乘、除等基本算术运算。AT89S51的ALU还具有位操作功能,它可对位(bit)变量进行位处理,如置“1”、清“0”、求补、测试转移及逻辑“与”、“或”等操作。

2.累加器A

累加器A是CPU中使用最频繁的一个8位寄存器,在使用汇编语言编程时,有些场合必须写为Acc。 累加器的作用如下。

(1)累加器A是ALU单元的输入数据源之一,它又是ALU运算结果的存放单元。
(2)CPU中的数据传送大多都通过累加器A,故累加器A又相当于数据的中转站。为解决累加器结构所带来的“瓶颈堵塞”问题,AT89S51单片机增加了一部分可以不经过累加器的传送指令。

累加器A的进位标志Cy是特殊的,因为它同时又是位处理机的位累加器。

3.程序状态字寄存器PSW

AT89S51单片机的程序状态字寄存器(Program Status Word,PSW)位于单片机片内的特殊功能寄存器区,字节地址为D0H。PSW的不同位包含了程序运行状态的不同信息,其中4位保存当前指令执行后的状态,以供程序查询和判断。PSW的格式如图2-3所示。

图像说明文字

PSW中各个位的功能如下。

(1)Cy(PSW.7)进位标志位:Cy也可写为C。在执行算术运算和逻辑运算指令时,若有进位/借位,Cy = 1;否则,Cy=0。在位处理器中,它是位累加器。
(2)Ac(PSW.6)辅助进位标志位:Ac标志位在BCD码运算时,用作十进位调整。即当D3位向D4位产生进位或借位时,Ac=1;否则,Ac=0。
(3)F0(PSW.5)用户设定标志位:F0是由用户使用的1个状态标志位,可用指令来使它置“1”或清“0”,也可由指令来测试该标志位,根据测试结果控制程序的流向。编程时,用户应当充分利用该标志位。
(4)RS1、RS0(PSW.4、PSW.3)4组工作寄存器区选择控制位1和位0:这两位用来选择片内RAM区中的4组工作寄存器区中的某一组为当前工作寄存区,RS1、RS0与所选择的4组工作寄存器区的对应关系如表2-2所示。

图像说明文字

(5)OV(PSW.2)溢出标志位:当执行算术指令时,OV用来指示运算结果是否产生溢出。如果结果产生溢出,OV=1;否则,OV=0。
(6)PSW.1位:保留位,未用。
(7)P(PSW.0)奇偶标志位:该标志位表示指令执行完时,累加器A中“1”的个数是奇数还是偶数。
P=1,表示A中“1”的个数为奇数。
P=0,表示A中“1”的个数为偶数。

此标志位对串行口通信中的串行数据传输有重要的意义。在串行通信中,常用奇偶检验的方法来检验数据串行传输的可靠性。

2.3.2 控制器

控制器的主要任务是识别指令,并根据指令的性质控制单片机各功能部件,从而保证单片机各部分能自动协调地工作。

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

程序计数器PC是控制器中最基本的寄存器,它是一个独立的16位计数器,是不可访问的。即用户不能直接使用指令对PC进行读写。当单片机复位时,PC中的内容为0000H,即CPU 从程序存储器0000H单元取指令,开始执行程序。

PC的基本工作过程是:CPU读指令时,PC的内容作为所取指令的地址发送给程序存储器,然后程序存储器按此地址输出指令字节,同时PC自动加1,这也是为什么PC被称为程序计数器的原因。

PC中内容的变化轨迹决定了程序的流程。由于PC是不可访问的,当顺序执行程序时自动加1;执行转移程序或子程序、中断子程序调用时,由运行的指令自动将其内容更改成所要转移的目的地址。

程序计数器的计数宽度决定了程序存储器的地址范围。AT89S51单片机中的PC位数为16位,故可对64KB(=216B)的程序存储器进行寻址。

2.4 AT89S51单片机存储器的结构

AT89S51单片机存储器结构的特点是采用哈佛结构,即程序存储器空间和数据存储器空间是各自独立的。

AT89S51单片机的存储器空间可划分为如下4类。

1.程序存储器空间

单片机能够按照一定的次序工作,是由于程序存储器中存放了经调试正确的程序。程序存储器可以分为片内和片外两部分。

AT89S51单片机的片内程序存储器为4KB的Flash存储器,编程和擦除完全是电气实现,且速度快。可使用通用的编程器对其编程,也可在线编程。

当AT89S51单片机的片内的4KB的Flash存储器不够用时,用户可在片外可扩展程序存储器,最多可扩展至64KB程序存储器。

2.数据存储器空间

数据存储器空间分为片内与片外两部分。

AT89S51单片机内部有128B的RAM(增强型的52子系列为256B),用来存放可读/写的数据。

当AT89S51单片机的片内RAM不够用时,又给用户提供了在片外可扩展至64KB RAM的能力,至于究竟扩展多少RAM,则根据用户实际需要来定。

3.特殊功能寄存器

特殊功能寄存器(Special Function Register,SFR)实际上是AT89S51单片机片内各外围部件的控制寄存器及状态寄存器。SFR综合反映了整个单片机基本系统内部实际的工作状态及工作方式。

4.位地址空间

AT89S51单片机内共有211个可寻址位,构成了位地址空间。它们位于内部 RAM(共128位)和特殊功能寄存器区(共83位)中。

2.4.1 程序存储器空间

程序存储器是只读存储器(ROM),用于存放程序和表格之类的固定常数。AT89S51单片机的片内程序存储器为4KB的Flash存储器,地址范围为0000H~0FFFH。AT89S51单片机有16位地址线,可外扩的程序存储器空间最大为64KB,地址范围为0000H~FFFFH。有关片内与片外扩展的程序存储器在使用时应注意以下问题。

(1)整个程序存储器空间可以分为片内和片外两部分,CPU究竟是访问片内的还是片外的程序存储器,可由 引脚上所接的电平来确定。
=1,CPU从片内0000H开始取指令,当PC值没有超出0FFFH(0000H~0FFFH为片内4KB Flash存储器的地址范围)时,CPU只访问片内的Flash程序存储器,当PC值超出0FFFH会自动转向读取片外程序存储器空间1000H~FFFFH内的程序。
=0,单片机只能执行片外程序存储器(地址范围为0000H~FFFFH)中的程序。CPU不理会片内4KB(地址范围0000H~0FFFH)Flash存储器。

(2)程序存储器的某些单元被固定用于各中断源的中断服务程序的入口地址。
64KB程序存储器空间中有5个特殊单元分别对应于5个中断源的中断服务程序的入口地址,如表2-3所示。AT89S51复位后,程序存储器地址指针PC的内容为0000H,程序从程序存储器中的0000H地址开始执行。一般在该单元存放一条跳转指令,跳向主程序的入口地址。

图像说明文字

通常在这5个中断入口地址处都放1条跳转指令跳向对应的中断服务子程序,而不是直接存放中断服务子程序。这是因为两个中断入口间隔仅有8个单元,如果这8个单元存放中断服务子程序,往往是不够用的,所以中断入口地址处都放1条跳转指令,来跳向对应的中断服务子程序。

2.4.2 数据存储器空间

数据存储器空间分为片内与片外两部分。

1.片内数据存储器

AT89S51单片机的片内数据存储器(RAM)共有128个单元,字节地址为00H~7FH。图2-4所示为AT89S51片内数据存储器的结构。

图像说明文字

地址为00H~1FH的32个单元是4组通用工作寄存器区,每个区包含8B的工作寄存器,编号为R7~R0。用户可以通过指令改变特殊功能寄存器PSW中的RS1、RS0这两位来切换当前选择的工作寄存器区。

地址为20H~2FH的16个单元的128位可进行位寻址,也可以进行字节寻址。地址为30H~7FH的单元为用户RAM区,只能进行字节寻址,用作存放数据以及作为堆栈区使用。

2.片外数据存储器

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

2.4.3 特殊功能寄存器

AT89S51单片机中的CPU对片内各功能部件的控制采用的是特殊功能寄存器集中控制方式。特殊功能寄存器的单元地址映射在片内RAM的80H~FFH区域中,共有26个,离散地分布在该区域中,表2-4所示为SFR的名称及其分布。其中有些SFR还可以进行位寻址,其位地址已在表2-4中列出。

图像说明文字

与AT89C51相比,新增加的5个SFR是:DP1L、DP1H、AUXR、AUXR1和WDTRST,已在表2-4中标出。

从表2-4中可以发现,凡是可以进行位寻址的SFR,其字节地址的末位只能是0H或8H。另外,若读/写没有定义的单元,将得到一个不确定的随机数。

SFR块中的累加器A和程序状态字寄存器PSW已在前面做过介绍。下面简单介绍SFR块中的某些SFR,余下的SFR将在后续的有关章节介绍。

1.堆栈指针SP

堆栈指针SP的内容指示出堆栈顶部在内部RAM块中的位置。它可指向内部RAM 00H~7FH的任何单元。AT89S51的堆栈结构属于向上生长型的堆栈(即每向堆栈压入1字节数据时,SP的内容自动增1)。单片机复位后,SP中的内容为07H,使得堆栈实际上从08H单元开始,考虑到08H~1FH单元分别是属于1~3组的工作寄存器区,若在程序设计中用到这些工作寄存器区,最好在复位后且运行程序前,把SP值改置为60H或更大的值,以避免堆栈区与工作寄存器区发生冲突。

堆栈主要是为子程序调用和中断操作而设立的。堆栈的具体功能有两个:保护断点和现场保护。

(1)保护断点。因为无论是子程序调用操作还是中断服务子程序调用操作,最终都要返回主程序。因此,应预先把主程序的断点在堆栈中保护起来,为程序的正确返回做准备。

(2)现场保护。在单片机执行子程序或中断服务子程序时,很可能要用到单片机中的一些寄存器单元,这就会破坏主程序运行时这些寄存器单元中的原有内容。所以在执行子程序或中断服务程序之前,要把单片机中有关寄存器单元的内容保存起来,送入堆栈,这就是所谓的“现场保护”。

堆栈的操作有两种:一种是数据压入(PUSH)堆栈,另一种是数据弹出(POP)堆栈。每次当1字节数据压入堆栈以后,SP自动加1;1字节数据弹出堆栈后,SP自动减1。例如,(SP)=60H,CPU执行1条子程序调用指令或响应中断后,PC内容(断点地址)进栈,PC的低8位PCL的内容压入到61H单元,PC的高8位PCH的内容压入到62H,此时,(SP)=62H。

2.寄存器B

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

乘法中,两个乘数分别在A、B中,执行乘法指令后,乘积存放在BA寄存器对中。B中放乘积的高8位,A中放乘积的低8位。

除法中,被除数取自A,除数取自B,商存放在A中,余数存放于B中。

3.AUXR寄存器

AUXR是辅助寄存器,其格式如图2-5所示。

图像说明文字

其中:

  • DISALE:ALE的禁止/允许位。

0:ALE有效,发出恒定频率脉冲;
1:ALE仅在CPU访问外部存储器时有效,不访问外部存储器时,ALE不输出脉冲信号。

  • DISRTO:禁止/允许WDT溢出时的复位输出。

0:WDT溢出时,允许向RST引脚输出一个高电平脉冲,使单片机复位;
1:禁止WDT溢出时的复位输出。

  • WDIDLE:WDT在空闲模式下的禁止/允许位。

0:WDT在空闲模式下继续计数;
1:WDT在空闲模式下暂停计数。

4.数据指针DPTR0和DPTR1

DPTR0和DPTR1是双数据指针寄存器。为了便于访问数据存储器,AT89S51设置了2个数据指针寄存器。DPTR0为AT89C51单片机原有的数据指针,DPTR1为AT89S51单片机新增加的数据指针。AUXR1的DPS位用于选择这两个数据指针。当DPS=0时,选用DPTR0;当DPS=1时,选用DPTR1。AT89C51复位时,默认选用DPTR0。

DPTR0(或DPTR1)是一个16位的SFR,其高位字节寄存器用DP0H(或DP1H)表示,低位字节寄存器用DP0L(或DP1L)表示。DPTR0(或DPTR1)既可以作为一个16位寄存器来用,也可以作为两个独立的8位寄存器DP0H(或DP1H)和DP0L(或DP1L)来用。

5.AUXR1寄存器

AUXR1是辅助寄存器,其格式如图2-6所示。

图像说明文字

其中:DPS—数据指针寄存器选择位。

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

6.看门狗定时器WDT

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

有关WDT在抗干扰设计中的应用以及低功耗模式下运行的状态,将在相应的章节中具体介绍。

上面介绍的特殊功能寄存器,除了前两个SP和B以外,其余的均为AT89S51在AT89C51的基础上新增加的SFR。

2.4.4 位地址空间

AT89S51在RAM和SFR中共有211个寻址位的位地址,位地址范围为00H~FFH,其中00H~7FH这128位处于片内RAM字节地址20H~2FH单元中,如表2-5所示。其余的83个可寻址位分布在特殊功能寄存器SFR中,如表2-6所示。可被位寻址的寄存器有11个,共有位地址88个,其中5个位未用,其余83个位的位地址离散地分布于片内数据存储器区字节地址为80H~FFH的范围内,其最低的位地址等于其字节地址,并且其字节地址的末位都为0H或8H。

图像说明文字

图像说明文字

图2-7所示为AT89S51单片机中各类存储器的结构图,从图中可以清楚地看出AT89S51单片机的各类存储器在存储器空间的位置。

图像说明文字

2.5 AT89S51单片机的并行I/O端口

AT89S51单片机共有4个双向的8位并行I/O端口,分别记为P0、P1、P2和P3,其中输出锁存器属于特殊功能寄存器,记为P0、P1、P2和P3。4个端口除了按字节输入/输出外,还可以按位寻址,便于位控功能的实现。本节仅对4个并行I/O端口的基本特性进行概括介绍,有关P0、P1、P2与P3端口的内部结构及工作原理,将在第4章详细介绍。

1.P0口

P0口的字节地址为80H,位地址为80H~87H。P0口可作为双功能口:在外扩程序存储器、数据存储器(或外扩I/O)情况下,只能作为系统的低8位地址/数据总线端口来使用,否则可作为通用I/O端口使用。

P0口具有如下特点。

(1)当P0口用作地址/数据复用口时,是一个真正的双向口,用作与外部存储器的连接,输出低8位地址和输出/输入8位数据。

(2)当P0口用作通用I/O口时,由于需要在片外接上拉电阻,端口不存在高阻抗(悬浮)状态,因此是一个准双向口。为保证正确读入引脚信号,应首先向锁存器写1。单片机复位后,锁存器自动被置1;当P0口由原来的输出状态转变为输入状态时,应首先向锁存器写1,方可执行输入操作。

一般情况下,P0口大多作为地址/数据复用口使用,这时就不能再作为通用I/O口使用。

2.P1口

P1口是单功能的I/O口,字节地址为90H,位地址为90H~97H。

P1口的特点如下。

(1)P1口由于有内部上拉电阻,没有高阻抗输入状态,故为准双向口。作为输出口时,不需要在片外接上拉电阻。
(2)P1口“读引脚”输入时,必须先向P1口的锁存器先写入1。

3.P2口

P2口是一个双功能口,字节地址为A0H,位地址为A0H~A7H。P2口某一位的位电路结构如图4-3所示。在片外扩有存储器或I/O的情况下,P2口大多作为高8位地址总线口使用,这时就不能再作为通用I/O口。

P2口的特点如下。

(1)作为地址输出线使用时,P2口可以输出外部存储器的高8位地址,与P0口输出的低8位地址一起构成16位地址,可以寻址64KB的地址空间。当P2口作为高8位地址输出口时,输出锁存器的内容保持不变。
(2)作为通用I/O口使用时,P2口为一个准双向口,功能与P1口一样。

4.P3口

由于AT89S51的引脚数目有限,因此在P3口电路中增加了引脚的第二功能。P3口的第二功能定义如表2-7所示,读者应熟记。

图像说明文字

P3口的每一位都可以分别定义为第二输入功能或第二输出功能。P3口的字节地址为B0H,位地址为B0H~B7H。

P3口的特点如下。

(1)P3口内部有上拉电阻,不存在高阻抗输入状态,为准双向口。
(2)P3口作为第二功能的输出/输入,或第一功能通用输入,需要先将相应位的锁存器置1。实际应用中,由于复位后P3口锁存器自动置1,满足第二功能所需的条件,所以不需要任何设置工作,就可以进入第二功能操作。

当某位不作为第二功能使用时,可作为第一功能通用I/O使用。

2.6 时钟电路与时序

时钟电路用于产生AT89S51单片机工作时所必需的控制信号,AT89S51单片机的内部电路正是在时钟信号的控制下,严格地按时序执行指令进行工作。

在执行指令时,CPU首先到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号完成指令所规定的操作。CPU发出的时序信号有两类:一类用于对片内各个功能部件的控制,用户无需了解;另一类用于对片外存储器或I/O端口的控制,这部分时序对于分析、设计硬件接口电路至关重要,这也是单片机应用系统设计者普遍关心和重视的问题。

2.6.1 时钟电路设计

AT89S51单片机各外围部件的运行都以时钟控制信号为基准,有条不紊、一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。

1.内部时钟方式

AT89S51单片机内部有一个用于构成振荡器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器,图2-8所示为AT89S51单片机内部时钟方式的电路。

电路中的电容 C1和 C2 的典型值通常选择为 30pF。晶体振荡频率的范围通常是在 1.2~12MHz。AT89S51单片机常选择振荡频率6MHz或12MHz的石英晶体。

2.外部时钟方式

外部时钟方式使用现成的外部振荡器产生脉冲信号,常用于多片AT89S51单片机同时工作,以便于多片AT89S51单片机之间的同步。

外部时钟源直接接到XTAL1端,XTAL2端悬空,其电路如图2-9所示。

图像说明文字

3.时钟信号的输出

当使用片内振荡器时,XTAL1、XTAL2引脚还能为应用系统中的其他芯片提供时钟,但需增加驱动能力。其引出的方式有两种,如图2-10所示。

图像说明文字

2.6.2 机器周期、指令周期与指令时序

单片机执行的指令均是在CPU控制器的时序控制电路的控制下进行的,各种时序均与时钟周期有关。

1.时钟周期

时钟周期是单片机时钟控制信号的基本时间单位。若时钟晶体的振荡频率为fosc,则时钟周期Tosc=1/fosc。如fosc=6MHz,Tosc=166.7ns。

2.机器周期

CPU完成一个基本操作所需要的时间称为机器周期。单片机中常把执行一条指令的过程分为几个机器周期。每个机器周期完成一个基本操作,如取指令、读或写数据等。AT89S51单片机的每12个时钟周期为一个机器周期,即Tcy=12/fosc。若fosc=6MHz,Tcy=2s;fosc=12MHz,Tcy=1s。

AT89S51单片机的一个机器周期包括12个时钟周期,分为6个状态:S1~S6。每个状态又分为两拍:P1和P2。因此,一个机器周期中的12个时钟周期表示为S1P1、S1P2、S2P1、S2P2…S6P2,如图2-11所示。

图像说明文字

3.指令周期

指令周期是执行一条指令所需的时间。AT89S51单片机中指令按字节来分,可分为单字节、双字节与三字节指令。因此执行一条指令的时间也不同。对于简单的单字节指令,取出指令立即执行,只需一个机器周期的时间。而有些复杂的指令,如转移、乘、除指令则需两个或多个机器周期。

从指令的执行时间看,单字节和双字节指令一般为单机器周期和双机器周期,三字节指令都是双机器周期,只有乘、除指令占用4个机器周期。

2.7 复位操作和复位电路

复位是单片机的初始化操作,只需给AT89S51单片机的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可使AT89S51单片机复位。

2.7.1 复位操作

当AT89S51单片机进行复位时,PC初始化为0000H,使AT89S51单片机从程序存储器的0000H单元开始执行程序。除了进入系统的正常初始化之外,当程序运行出错(如程序跑飞)或操作错误使系统处于死锁状态时,也需按复位键使RST脚为高电平,使AT89S51单片机摆脱“跑飞”或“死锁”状态而重新启动程序。

除PC之外,复位操作还对其他一些寄存器有影响,这些寄存器复位时的状态如表2-2所示。由表2-8可以看出,复位时,SP=07H,而4个I/O端口P0~P3的引脚均为高电平。在某些控制应用中,要注意考虑P0~P3引脚的高电平对接在这些引脚上的外部电路的影响。例如,当P1口某个引脚外接一个继电器绕组,当复位时,该引脚为高电平,继电器绕组就会有电流通过,就会吸合继电器开关,使开关接通,可能会引起意想不到的后果。

图像说明文字

2.7.2 复位电路设计

AT89S51 单片机的复位是由外部的复位电路实现的。AT89S51 片内复位电路结构如图 2-12所示。

图像说明文字

复位引脚RST通过一个施密特触发器与复位电路相连,施密特触发器用来抑制噪声,在每个机器周期的S5P2,施密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。

复位电路通常采用上电自动复位和按钮复位两种方式。

最简单的上电自动复位电路如图2-13所示。对于CMOS型单片机,由于在RST引脚内部有一个下拉电阻,故可将电阻R去掉,而将电容C选为10uF。

图像说明文字

上电自动复位是通过外部复位电路给电容C充电加给RST引脚一个短的高电平信号,此信号随着VCC对电容C的充电过程而逐渐回落,即RST引脚上的高电平持续时间取决于电容C充电时间。因此为保证系统能可靠地复位,RST引脚上的高电平必须维持足够长的时间。

除了上电复位外,有时还需要按键手动复位。按键手动复位有电平和脉冲两种方式。

按键手动电平复位是通过RST端经电阻与电源VCC接通来实现,具体电路如图2-14所示。

图像说明文字

脉冲复位是利用RC微分电路产生的正脉冲来实现的,脉冲复位电路如图2-15所示,图中的阻容参数适于6MHz时钟。

图2-16所示电路能输出高、低两种电平的复位控制信号,以适应外围I/O接口芯片所要求的不同复位电平信号。图2-16中74LS122为单稳电路,实验表明,电容C的选择约为0.1uF较好。

图像说明文字

在实际应用系统设计中,若有外部扩展的I/O接口电路也需初始复位,如果它们的复位端和AT89S51的复位端相连,复位电路中的R、C参数要受到影响,这时复位电路中的R、C参数要统一考虑,以保证可靠的复位。如果AT89S51单片机与外围I/O接口电路的复位电路和复位时间不完全一致,使单片机初始化程序不能正常运行,外围I/O接口电路的复位也可以不与AT89S51单片机复位端相连,采用独立的上电复位电路。若RC上电复位电路接施密特电路输入端,施密特电路输出接AT89S51单片机和外围电路复位端,则能使系统可靠地同步复位。一般来说,单片机的复位速度比外围I/O接口电路快些。为保证系统可靠复位,在单片机应用程序的初始化程序段应安排一定的复位延迟时间。

2.8 低功耗节电模式

AT89S51单片机有两种低功耗节电工作模式:空闲模式(idle mode)和掉电保持模式(power down mode),其目的是尽可能低降低系统功耗。在掉电保持模式下,Vcc可由后备电源供电。图2-17所示为两种节电模式的内部控制电路。

图像说明文字

AT89S51单片机的两种节电模式可通过指令对特殊功能寄存器PCON的位IDL和位PD的设置来实现。PCON的格式如图2-18所示,字节地址为87H。

图像说明文字

PCON寄存器各位的定义如下。

SMOD:串行通信的波特率选择位(该位的功能见第7章的介绍)。

—:保留位,未定义。

GF1、GF0:通用标志位,供用户在程序设计时使用,两个标志位用户应充分利用。
PD:掉电保持模式控制位,若PD=1,则进入掉电保持模式。
IDL:空闲模式控制位,若IDL=1,则进入空闲运行模式。

2.8.1 空闲模式

1.空闲模式的进入

如果用指令把寄存器PCON中的IDL位置“1”,则把通往CPU的时钟信号关断,单片机便进入空闲模式。这时虽然振荡器仍然运行,但是CPU进入空闲状态。此时,所有外围电路(中断系统、串行口和定时器)仍继续工作,SP、PC、PSW、A、P0~P3端口等所有其他寄存器,以及内部RAM和SFR中的内容均保持进入空闲模式前的状态。

2.空闲模式的退出

系统进入空闲模式后有两种方法可退出,一种是响应中断方式,另一种是硬件复位方式。

在空闲模式下,若任何一个允许的中断请求被响应时,IDL位被片内硬件自动清“0”,从而退出空闲模式。当执行完中断服务程序返回时,将从设置空闲模式指令的下一条指令(断点处)开始继续执行程序。

另一种退出空闲模式的是硬件复位。当使用硬件复位退出空闲模式时,在复位逻辑电路发挥控制作用前,有长达两个机器周期的时间,单片机要从断点处(IDL位置“1”指令的下一条指令处)继续执行程序。在这期间,片内硬件阻止CPU对片内RAM的访问,但不阻止对外部端口(或外部RAM)的访问。为了避免在硬件复位退出空闲模式时出现对端口(或外部RAM)的不希望的写入,系统在进入空闲模式时,紧随IDL位置1的指令后面的不应是写端口(或外部RAM)的指令。

2.8.2 掉电运行模式

1.掉电模式的进入

用指令把PCON寄存器的PD位置1,单片机便进入掉电模式。由图2-17可见,在掉电模式下,进入时钟振荡器的信号被封锁,振荡器停止工作。由于没有了时钟信号,内部的所有部件均停止工作,但片内的RAM和SFR的原来内容都被保留,有关端口的输出状态值都保存在对应的特殊功能寄存器中。

2.掉电模式的退出

掉电模式的退出有两种方法:硬件复位和外部中断。硬件复位时要重新初始化SFR,但不改变片内RAM的内容。只有当Vcc恢复到正常工作水平时,只要硬件复位信号维持10ms,便可使单片机退出掉电运行模式。

2.8.3 掉电和空闲模式下的WDT

掉电模式下振荡器停止,意味着WDT也就停止计数。用户在掉电模式下不需要操作WDT。

掉电模式的退出有两种方法:硬件复位和外部中断。当用硬件复位退出掉电模式时,对WDT的操作与正常情况一样。外部中断方式退出掉电模式时,应使中断输入保持足够长时间的低电平,以使振荡器达到稳定。当中断变为高电平之后,该中断被执行,在中断服务程序中复位寄存器WDTRST。在外部中断引脚保持低电平时,为防止WDT溢出复位,在系统进入掉电模式之前先对寄存器WDTRST复位。

在进入空闲模式之前,应先设置特殊功能寄存器AUXR中的WDIDLE位,以确认WDT是否继续计数。当WDIDLE=0时,空闲模式下的WDT保持继续计数。为防止复位单片机,用户可设计一定时器。该定时器使器件定时退出空闲模式,然后复位WDTRST,再重新进入空闲模式。

当WDIDLE=1时,WDT在空闲模式下暂停计数,退出空闲模式后,方可恢复计数。

目录

  • 第1章 单片机概述
  • 第2章 AT89S51单片机硬件结构
  • 第3章 C51语言编程基础
  • 第4章 AT89S51片内并行端口的原理及编程
  • 第5章 AT89S51单片机的中断系统
  • 第6章 AT89S51单片机的定时器/计数器
  • 第7章 AT89S51单片机的串行口
  • 第8章 AT89S51单片机外部存储器的扩展
  • 第9章 AT89S51单片机的I/O扩展
  • 第10章 AT89S51单片机与输入/输出 外设的接口
  • 第11章 AT89S51单片机与D/A、A/D 转换器的接口
  • 第12章 单片机的串行扩展技术
  • 第13章 AT89S51单片机的应用设计与调试

同系列书

人邮微信
本地服务
人邮微信
教师服务
二维码
读者服务
读者服务
返回顶部
返回顶部