第2章 AT89S51单片机片内硬件结构
【内容概要】本章介绍的内容是为单片机应用系统的设计打下基础。通过本章学习,读者应牢记AT89S51单片机的片内硬件结构,以及片内硬件资源;了解片内外设的基本功能,重点掌握AT89S51单片机的存储器结构、常见的特殊功能寄存器的功能,以及复位电路与时钟电路的设计。此外本书还介绍了低功耗节电模式以及看门狗的工作原理。
单片机应用的特点是通过编写程序来控制硬件电路,所以,读者应首先熟知并掌握AT89S51单片机片内硬件的基本结构和特点。
2.1 AT89S51单片机的片内硬件结构
AT89S51单片机片内硬件结构如图2-1所示,它把那些作为控制应用所必需的基本外围部件都集成在了一个集成电路芯片上。AT89S51单片机具有如下外围部件及特性。
图2-1 AT89S51单片机的片内结构
(1)8位CPU;
(2)数据存储器(128B RAM);
(3)程序存储器(4KB Flash ROM);
(4)4个8位可编程并行I/O口(P0口、P1口、P2口和P3口);
(5)2个可编程的16位定时器/计数器;
(6)1个通用的全双工的异步收发串行口(UART);
(7)中断系统具有5个中断源、5个中断向量;
(8)特殊功能寄存器(SFR)26个;
(9)1个看门狗定时器(WDT);
(10)低功耗节电的空闲模式和掉电模式,且具有掉电模式下的中断恢复模式;
(11)3个程序加密锁定位。
与AT89C51相比,AT89S51具有更突出的优点,具体如下。
(1)增加了在线可编程(ISP)功能,使得现场程序调试和修改更加方便灵活。
(2)数据指针DPTR增加到两个,方便了对片外RAM的访问;
(3)增加了看门狗定时器,提高了系统的抗干扰能力;
(4)增加了断电标志;
(5)增加了掉电状态下的中断恢复模式。
AT89S51片内的各部件通过片内单一总线连接而成(见图2-1),其基本结构依旧是CPU加上外围芯片的传统微型计算机结构模式,但CPU对各种外围部件的控制是采用特殊功能寄存器(Special Function Register,SFR)的集中控制方式。
下面对图2-1中的片内各部件做简单介绍。
(1)CPU(微处理器):8位的CPU,包括了运算器和控制器两大部分,此外还有面向控制的位处理和位控功能。
(2)数据存储器(RAM):片内为128B(增强型的52子系列为256B),片外最多还可外扩64KB的数据存储器。
(3)程序存储器(Flash ROM):用来存储程序。AT89S51片内有4KB的Flash存储器(AT89S52 片内有8KB的Flash存储器;AT89S53/AT89S54/AT89S55片内集成了12KB/20KB/20KB的Flash存储器),如果片内程序存储器容量不够,片外最多可外扩64KB程序存储器。
(4)中断系统:具有5个中断源,2级中断优先权。
(5)定时器/计数器:片内有2个16位的定时器/计数器(增强型的52子系列有3个16位的定时器/计数器),具有4种工作方式。
(6)串行口:1个全双工的异步串行口(UART),具有4种工作方式。可进行串行通信,扩展并行I/O口,还可与多个单片机相连构成多机串行通信系统。
(7)4个8位的并行口:P0口、P1口、P2口和P3口。
(8)特殊功能寄存器(SFR):共有26个特殊功能寄存器,用于CPU对片内各外围部件进行管理、控制和监视。特殊功能寄存器实际上是片内各外围部件的控制寄存器和状态寄存器,这些特殊功能寄存器映射在片内RAM区的80H~FFH的地址区间内。
(9)1个看门狗定时器WDT:当单片机由于干扰而使程序陷入死循环或跑飞状态时,可引起单片机复位,从而使程序恢复正常运行。
AT89S51完全兼容AT89C51单片机,它使用AT89C51单片机的系统,在保留原来软硬件的条件下,可用AT89S51直接代换。
2.2 AT89S51的引脚功能
要掌握AT89S51单片机,应首先熟悉各引脚的功能。AT89S51与各种8051单片机的引脚是互相兼容的。目前,AT89S51单片机多采用40只引脚的塑料双列直插封装(DIP)方式,如图2-2所示。此外,它还有44引脚的PLCC和TQFP封装方式的芯片。
40只引脚按功能可分为如下3类。
(1)电源及时钟引脚:V CC、V ss、XTAL1、XTAL2;
(2)控制引脚:、ALE/、/ V pp、RST(即RESET);
(3)I/O口引脚:P0、P1、P2与P3,为4个8位并行I/O口的外部引脚。
下面结合图2-2介绍各引脚的功能。
图2-2 AT89S51双列直插封装方式的引脚
2.2.1 电源及时钟引脚
1.电源引脚
(1)V CC(40脚):接+5V电源。
(2)V ss(20脚):接数字地。
2.时钟引脚
(1)XTAL1(19脚):片内振荡器的反相放大器和外部时钟发生器的输入端。使用AT89S51单片机片内的振荡器时,该引脚外接石英晶体和微调电容。当采用外部的独立时钟源时,本引脚接外部时钟振荡器的信号。
(2)XTAL2(18脚):片内振荡器反相放大器的输出端。当使用片内振荡器时,该引脚连接外部石英晶体和微调电容。当使用外部时钟振荡器时,本引脚悬空。
2.2.2 控制引脚
控制引脚提供控制信号,有的引脚还具有复用功能。
1.RST(RESET,9脚)
复位信号输入端,高电平有效。在此引脚加上持续时间大于2个机器周期的高电平,就可使单片机复位。在单片机正常工作时,此引脚应为≤0.5V的低电平。
当看门狗定时器溢出输出时,该引脚将输出长达96个时钟振荡周期的高电平。
2./ V PP(Enable Address/Voltage Pulse of Programing,31脚)
(External Access Enable)为该引脚的第一功能:外部程序存储器访问允许控制端。
当=1时,在单片机片内的PC值不超出0FFFH(即不超出片内4KB Flash存储器的最大地址范围)时,单片机读片内程序存储器(4KB)中的程序代码,但PC值超出0FFFH(即超出片内4KB Flash存储器地址范围)时,将自动转向读取片外60KB(1000H~FFFFH)程序存储器空间中的程序代码。
当=0时,只读取外部的程序存储器中的内容,读取的地址范围为0000H~FFFFH,片内的4KB Flash程序存储器不起作用。
V PP为该引脚的第二功能,在对片内Flash进行编程时,V PP引脚接入编程电压。
3.ALE/(Address Latch Enable/PROGramming,30脚)
ALE的第一功能为CPU访问外部程序存储器或外部数据存储器提供低8位地址的锁存控制信号,将单片机P0口发出的低8位地址锁存在片外的地址锁存器中,如图2-3所示。
图2-3 ALE作为低8位地址的锁存控制信号
此外,单片机在正常运行时,ALE端一直有正脉冲信号输出,此频率为时钟振荡器频率f osc的1/6。该正脉冲振荡信号可作外部定时或触发信号使用。但是要注意,每当AT89S51访问外部RAM或I/O时,要丢失一个ALE脉冲。所以ALE引脚的输出信号,在片外扩展有外部RAM或I/O时,频率并不是准确的f osc 1/6。
如果不需要ALE端输出脉冲信号,可将特殊功能寄存器AUXR(地址为8EH,将在本章后面介绍)的第0位(ALE禁止位)置1,来禁止ALE操作,但在执行访问外部程序存储器或外部数据存储器操作时,ALE仍然有效。也就是说,ALE的禁止位不影响对单片机对外部存储器的访问。
为该引脚的第二功能,在对片内Flash存储器编程时,此引脚作为编程脉冲输入端。
4.(Program Strobe ENable,29脚)
片内或片外程序存储器的读选通信号,低电平有效。
2.2.3 并行I/O口引脚
1.P0口:P0.7~ P0.0引脚
漏极开路的双向I/O口。当AT89S51扩展外部存储器及I/O接口芯片时,P0口作为地址总线(低8位)及数据总线的分时复用端口。
P0口也可作为通用I/O口使用,但需加上拉电阻,这时为准双向口。P0口可驱动8个LS型TTL负载。
2.P1口:P1.7~ P1.0引脚
准双向I/O口,具有内部上拉电阻,可驱动4个LS型TTL负载。
P1口是完全可提供给用户使用的准双向I/O口。
P1.5/MOSI、P1.6/MISO和P1.7/SCK也可用于对片内Flash存储器的串行编程和校验,它们分别是串行数据输入、串行数据输出和移位脉冲引脚。
3.P2口:P2.7~P2.0引脚
准双向I/O口,具有内部上拉电阻,可驱动4个LS型TTL负载。
当AT89S51扩展外部存储器及I/O口时,P2口作为高8位地址总线用,输出高8位地址。
P2口也可作为通用的I/O口使用。
4.P3口:P3.7~P3.0
准双向I/O口,具有内部上拉电阻。
P3口可作为通用的I/O口使用,可驱动4个LS型TTL负载。
P3口还可提供第二功能,其第二功能定义如表2-1所示,读者应熟记。
表2-1 P3口的第二功能定义
引 脚 |
第 二 功 能 |
说 明 |
---|---|---|
P3.0 |
RXD |
串行数据输入口 |
P3.1 |
TXD |
串行数据输出口 |
P3.2 |
外部中断0输入 |
|
P3.3 |
外部中断1输入 |
|
P3.4 |
T0 |
定时器0外部计数输入 |
P3.5 |
T1 |
定时器1外部计数输入 |
P3.6 |
外部数据存储器的写选通控制信号 |
|
P3.7 |
外部数据存储器的读选通控制信号 |
综上所述,P0口作为地址总线(低8位)及数据总线使用时,为双向口。作为通用的I/O口使用时,需加上拉电阻,这时为准双向口。而P1口、P2口、P3口均为准双向口。
双向口P0与P1口、P2口、P3口这3个准双向口相比,多了一个高阻输入的“悬浮”态。这是由于P0口作为数据总线使用时,多个数据源都挂在数据总线上,当P0口不需与其他数据源打交道时,需要与数据总线高阻“悬浮”隔离,而准双向I/O口则无高阻的“悬浮”状态。另外,准双向口作通用I/O的输入口使用时,一定要向该口先写入“1”。以上的准双向口与双向口的差别,读者在学习本章2.5节的P0~P3口的内部结构后,将会有更深入的理解。
至此,AT89S51单片机的40只引脚已介绍完毕,读者应熟记每一个引脚的功能,这对于掌握AT89S51单片机应用系统的硬件电路设计十分重要。
2.3 AT89S51的CPU
AT89S51的CPU是由运算器和控制器构成的(见图2-1)。
2.3.1 运算器
运算器主要用来对操作数进行算术、逻辑和位操作运算,主要包括算术逻辑运算单元ALU、累加器A、位处理器、程序状态字寄存器PSW及两个暂存器等。
1.算术逻辑运算单元(ALU)
ALU的功能强,不仅可对8位变量进行逻辑与、或、异或以及循环、求补和清零等操作,还可以进行加、减、乘、除等基本算术运算。ALU还具有位操作功能,可对位(bit)变量进行位处理,如置“1”、清零、求补、测试转移及逻辑“与”“或”等操作。
2.累加器(A)
累加器(A)是CPU中使用最频繁的一个8位寄存器,它的作用如下。
(1)是ALU单元的输入数据源之一,同时又是ALU运算结果的存放单元。
(2)CPU中的数据传送大多都通过累加器A,故累加器A又相当于数据的中转站。为解决累加器结构所带来的“瓶颈堵塞”问题,AT89S51单片机增加了一部分可以不经过累加器A的传送指令。
累加器(A)的进位位Cy(位于程序状态字特殊功能寄存器PSW中)是特殊的,因为它同时又是位处理器的位累加器。
3.程序状态字寄存器(PSW)
AT89S51单片机的程序状态字寄存器(Program Status Word,PSW)位于单片机片内的特殊功能寄存器区,字节地址为D0H。PSW的不同位包含了程序运行状态的不同信息,其中4位保存当前指令执行后的状态,以供程序查询和判断。PSW的格式如图2-4所示。
图2-4 PSW的格式
PSW中各个位的功能如下。
(1)Cy(PSW.7)进位标志位:也可写为C。在执行算术运算和逻辑运算指令时,若有进位/借位,则Cy = 1;否则,Cy=0。在位处理器中,它是位累加器。
(2)Ac(PSW.6)辅助进位标志位:Ac标志位用于在BCD码运算时进行十进位调整,即在运算时,当D3位向D4位产生进位或借位时,Ac=1;否则,Ac=0。
(3)F0(PSW.5)用户使用的标志位:可用指令来使它置“1”或清零,也可用指令来测试该标志位,根据测试结果控制程序的流向。编程时,用户应当充分利用该标志位。
(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-2 RS1、RS0与4组工作寄存器区的对应关系
RS1 RS0 |
所选的4组寄存器 |
---|---|
0 0 |
0区(片内RAM地址00H~07H) |
0 1 |
1区(片内RAM地址08H~0FH) |
1 0 |
2区(片内RAM地址10H~17H) |
1 1 |
3区(片内RAM地址18H~1FH) |
2.3.2 控制器
控制器的主要任务是识别指令,并根据指令的性质控制单片机各功能部件,从而保证单片机各部分能自动协调的工作。
控制器主要包括程序计数器、指令寄存器、指令译码器、定时及控制电路等。其功能是控制指令的读入、译码和执行,从而对单片机的各功能部件进行定时和逻辑控制。
程序计数器PC是控制器中最基本的寄存器,它是一个独立的16位计数器,用户不能直接使用指令对PC进行读写。当单片机复位时,PC中的内容为0000H,即CPU 从程序存储器0000H单元取指令,并开始执行程序。
PC的基本工作过程是:CPU读取指令时,PC内容作为欲读取指令的地址发送给程序存储器,然后程序存储器按此地址输出指令字节,同时PC自动加1,这也是为什么PC被称为程序计数器的原因。由于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.特殊功能寄存器
AT89S51单片机片内共有26个特殊功能寄存器(Special Function Register,SFR)。SFR实际上是各外围部件的控制寄存器及状态寄存器,它综合反映了整个单片机基本系统内部实际的工作状态及工作方式。
4.位地址空间
AT89S51单片机内共有211个可寻址位,构成了位地址空间。它们位于片RAM区地址20H~2FH(共128位)和特殊功能寄存器区(片内RAM区字节地址80H~FFH,共计83位)。
2.4.1 程序存储器空间
程序存储器是只读存储器(ROM),它用于存放程序和表格之类的固定常数。AT89S51的片内程序存储器为4KB的Flash存储器,地址范围为0000H~0FFFH。AT89S51单片机有16位地址总线,可外扩的程序存储器空间最大为64KB,地址范围为0000H~FFFFH。有关片内与片外扩展的程序存储器在使用时应注意以下问题。
(1)整个程序存储器空间可分为片内和片外两部分,CPU究竟是访问片内的还是片外的程序存储器,可由引脚上所接的电平来确定。
当=1,PC值没有超出0FFFH(为片内4KB Flash存储器的最大地址)时,CPU只读取片内的Flash程序存储器中的程序代码,当PC值>0FFFH会自动转向读取片外程序存储器空间1000H~FFFFH内的程序代码。
当=0,单片机只读取片外程序存储器(地址范围为0000H~FFFFH)中的程序代码。CPU不理会片内4KB(地址范围0000H~0FFFH)的Flash存储器。
(2)程序存储器的某些单元被固定用于各中断源的中断服务程序的入口地址。
64KB程序存储器空间中有5个特殊单元分别对应5个中断源的中断服务子程序的中断入口,如表2-3所示。
表2-3 5个中断源的中断入口地址
中 断 源 |
入 口 地 址 |
---|---|
外部中断0 |
0003H |
定时器T0 |
000BH |
外部中断1 |
0013H |
定时器T1 |
001BH |
串行口 |
0023H |
用汇编语言编程时,通常在这5个中断入口地址处都放1条跳转指令跳向对应的中断服务子程序,而不是直接存放中断服务子程序。这是因为两个中断入口间隔仅有8个单元,如果这8个单元存放中断服务子程序,往往是不够用的。
AT89S51复位后,程序存储器地址指针PC的内容为0000H,程序从程序存储器地址0000H开始执行程序。由于外部中断0的中断服务程序入口地址为0003H,为使主程序不与外部中断0的中断服务程序发生冲突,用汇编语言编程时,一般在0000H单元存放一条跳转指令,转向主程序的入口地址。
上述问题,在使用C51语言编程时,完全由C51编译时自动处理,用户无需考虑。
2.4.2 数据存储器空间
数据存储器空间分为片内与片外两部分。
1.片内数据存储器
AT89S51单片机的片内数据存储器(RAM)共有128个单元,字节地址为00H~7FH。图2-5所示为AT89S51片内数据存储器的结构。
图2-5 AT89S51片内RAM的结构
地址为00H~1FH的32个单元是4组通用工作寄存器区,每个区包含8B的工作寄存器,编号为R7~R0。用户可以通过指令改变特殊功能寄存器PSW中的RS1、RS0这两位来切换选择当前的工作寄存器区,如表2-2所示。
地址为20H~2FH的16个单元的128位(8位×16)可进行位寻址,也可以进行字节寻址。地址为30H~7FH的单元为用户RAM区,只能进行字节寻址,用作存放数据以及作为堆栈区使用。
2.片外数据存储器
当片内128B的RAM不够用时,需要外扩数据存储器,AT89S51单片机最多可外扩64KB的RAM。注意,虽然片内RAM与片外RAM的低128B的地址是相同的,但是由于是两个不同的数据存储区,访问时使用不同的指令,所以不会发生数据冲突。
2.4.3 特殊功能寄存器
AT89S51单片机中的特殊功能寄存器的单元地址映射在片内RAM区的80H~FFH区域中,它共有26个,离散地分布在该区域中,表2-4所示为SFR的名称及其分布。其中有些SFR还可进行位寻址,其位地址已在表2-4中列出。
与AT89C51相比,AT89S51新增加了5个SFR:DP1L、DP1H、AUXR、AUXR1和WDTRST(见表2-4中的序号为5、6、14、19和20的寄存器)。
从表2-4中可以发现,凡是可以进行位寻址的SFR,其字节地址的末位只能是0H或8H。另外,若CPU读/写没有定义的单元,将得到一个不确定的随机数。
表2-4 SFR的名称及其分布
序号 |
特殊功能寄存器符号 |
名 称 |
字节地址 |
位地址 |
复位值 |
---|---|---|---|---|---|
1 |
P0 |
P0口 |
80H |
87H~80H |
FFH |
2 |
SP |
堆栈指针 |
81H |
— |
07H |
3 |
DP0L |
数据指针DPTR0低字节 |
82H |
— |
00H |
4 |
DP0H |
数据指针DPTR0高字节 |
83H |
— |
00H |
5 |
DP1L |
数据指针DPTR1低字节 |
84H |
— |
00H |
6 |
DP1H |
数据指针DPTR1高字节 |
85H |
— |
00H |
7 |
PCON |
电源控制寄存器 |
87H |
— |
0×××0000B |
8 |
TCON |
定时器/计数器控制寄存器 |
88H |
8FH~88H |
00H |
9 |
TMOD |
定时器/计数器方式控制 |
89H |
— |
00H |
10 |
TL0 |
定时器/计数器0(低字节) |
8AH |
— |
00H |
11 |
TL1 |
定时器/计数器1(低字节) |
8BH |
— |
00H |
12 |
TH0 |
定时器/计数器0(高字节) |
8CH |
— |
00H |
13 |
TH1 |
定时器/计数器1(高字节) |
8DH |
— |
00H |
14 |
AUXR |
辅助寄存器 |
8EH |
— |
×××0 0××0B |
15 |
P1 |
P1口寄存器 |
90H |
97H~90H |
FFH |
16 |
SCON |
串行控制寄存器 |
98H |
9FH~98H |
00H |
17 |
SBUF |
串行发送数据缓冲器 |
99H |
— |
××××××××B |
18 |
P2 |
P2口寄存器 |
A0H |
A7H~A0H |
FFH |
19 |
AUXR1 |
辅助寄存器 |
A2H |
— |
×××× ×××0 B |
20 |
WDTRST |
看门狗复位寄存器 |
A6H |
— |
×××× ××××B |
21 |
IE |
中断允许控制寄存器 |
A8H |
AFH~A8H |
0××0 0000B |
22 |
P3 |
P3口寄存器 |
B0H |
B7H~B0H |
FFH |
23 |
IP |
中断优先级控制寄存器 |
B8H |
BFH~B8H |
××00 0000B |
24 |
PSW |
程序状态字寄存器 |
D0H |
D7H~D0H |
00H |
25 |
A(或Acc) |
累加器 |
E0H |
E7H~E0H |
00H |
26 |
B |
B寄存器 |
F0H |
F7H~F0H |
00H |
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字节数据压入堆栈;1字节数据弹出堆栈后,SP自动减1。例如,(SP)=60H,CPU执行1条子程序调用指令或响应中断后,PC内容(断点地址)进栈,PC的低8位PCL的内容压入61H单元,PC的高8位PCH的内容压入62H,此时,(SP)=62H。
2.寄存器(B)
AT89S51单片机在进行乘法和除法操作时要使用寄存器B,在不执行乘、除法操作的情况下,可把它当作一个普通寄存器来使用。
乘法运算时,两个乘数分别在A、B中,执行乘法指令后,乘积存放在BA寄存器对中。B中放乘积的高8位,A中放乘积的低8位。
除法运算时,被除数取自A,除数取自B,商存放在A中,余数存放于B中。
3.AUXR寄存器
AUXR是辅助寄存器,格式见图2-6。
图2-6 AUXR寄存器的格式
其中:
(1)DISALE:ALE的禁止/允许位。
0:ALE有效,发出ALE脉冲;
1:ALE仅在CPU访问外部存储器时有效,不访问外部存储器时,ALE引脚不输出脉冲信号,这样可减少对外部电路的干扰。
(2)DISRTO:禁止/允许看门狗定时器WDT溢出时的复位输出。
0:WDT溢出时,允许向RST引脚输出一个高电平脉冲,使单片机复位;
1:禁止WDT溢出时的复位输出。
(3)WDIDLE:WDT在空闲模式下的禁止/允许位。
0:允许WDT在空闲模式下计数;
1:禁止WDT在空闲模式下计数。
4.数据指针DPTR0和DPTR1
DPTR0和DPTR1为双数据指针寄存器,这是为了便于访问数据存储器而设置的。DPTR0为8051单片机原有的数据指针,DPTR1为新增加的数据指针。AUXR1的DPS位(见图2-7)用于选择这两个数据指针。当DPS=0时,选用DPTR0;当DPS=1时,选用DPTR1。AT89S51复位时,默认选用DPTR0。
DPTR0(或DPTR1)是一个16位的SFR,其高位字节寄存器用DP0H(或DP1H)表示,低位字节寄存器用DP0L(或DP1L)表示。DPTR0(或DPTR1)既可以作为一个16位寄存器来用,也可以作为两个独立的8位寄存器DP0H(或DP1H)和DP0L(或DP1L)来用。
5.AUXR1寄存器
AUXR1是辅助寄存器,其格式如图2-7所示。
图2-7 AUXR1寄存器的格式
其中:DPS:数据指针寄存器选择位。
0:选择数据指针寄存器DPTR0;
1:选择数据指针寄存器DPTR1。
6.看门狗定时器(WDT)
看门狗定时器WDT包含1个14位计数器和看门狗复位寄存器(WDTRST)。当CPU由于干扰,程序陷入死循环或跑飞状态时,看门狗定时器WDT提供了一种使程序恢复正常运行的有效手段。
有关WDT在抗干扰设计中的应用以及低功耗模式下运行的状态,将在本章的2.8节中介绍。
上面介绍的特殊功能寄存器,除了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-5 AT89S51片内RAM的可寻址位及其位地址
字节地址 | 位 地 址 | |||||||
---|---|---|---|---|---|---|---|---|
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
2FH | 7FH | 7EH | 7DH | 7CH | 7BH | 7AH | 79H | 78H |
2EH | 77H | 76H | 75H | 74H | 73H | 72H | 71H | 70H |
2DH | 6FH | 6EH | 6DH | 6CH | 6BH | 6AH | 69H | 68H |
2CH | 67H | 66H | 65H | 64H | 63H | 62H | 61H | 60H |
2BH | 5FH | 5EH | 5DH | 5CH | 5BH | 5AH | 59H | 58H |
2AH | 57H | 56H | 55H | 54H | 53H | 52H | 51H | 50H |
29H | 4FH | 4EH | 4DH | 4CH | 4BH | 4AH | 49H | 48H |
28H | 47H | 46H | 45H | 44H | 43H | 42H | 41H | 40H |
27H | 3FH | 3EH | 3DH | 3CH | 3BH | 3AH | 39H | 38H |
26H | 37H | 36H | 35H | 34H | 33H | 32H | 31H | 30H |
25H | 2FH | 2EH | 2DH | 2CH | 2BH | 2AH | 29H | 28H |
24H | 27H | 26H | 25H | 24H | 23H | 22H | 21H | 20H |
23H | 1FH | 1EH | 1DH | 1CH | 1BH | 1AH | 19H | 18H |
22H | 17H | 16H | 15H | 14H | 13H | 12H | 11H | 10H |
21H | 0FH | 0EH | 0DH | 0CH | 0BH | 0AH | 09H | 08H |
20H | 07H | 06H | 05H | 04H | 03H | 02H | 01H | 00H |
表2-6 SFR中的位地址分布
特殊功能寄存器 | 位 地 址 | 字节地址 | |||||||
---|---|---|---|---|---|---|---|---|---|
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
B | F7H | F6H | F5H | F4H | F3H | F2H | F1H | F0H | F0H |
Acc | E7H | E6H | E5H | E4H | E3H | E2H | E1H | E0H | E0H |
PSW | D7H | D6H | D5H | D4H | D3H | D2H | D1H | D0H | D0H |
IP | — | — | — | BCH | BBH | BAH | B9H | B8H | B8H |
P3 | B7H | B6H | B5H | B4H | B3H | B2H | B1H | B0H | B0H |
IE | AFH | — | — | ACH | ABH | AAH | A9H | A8H | A8H |
P2 | A7H | A6H | A5H | A4H | A3H | A2H | A1H | A0H | A0H |
SCON | 9FH | 9EH | 9DH | 9CH | 9BH | 9AH | 99H | 98H | 98H |
P1 | 97H | 96H | 95H | 94H | 93H | 92H | 91H | 90H | 90H |
TCON | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | 89H | 88H | 88H |
P0 | 87H | 86H | 85H | 84H | 83H | 82H | 81H | 80H | 80H |
图2-8所示为AT89S51单片机中各类存储器的结构图,从图中可清楚看出AT89S51单片机的各类存储器在存储器空间的位置。
图2-8 AT89S51单片机的存储器结构
2.5 AT89S51单片机的并行I/O端口
AT89S51单片机共有4个双向的8位并行I/O端口,即P0~P3,表2-4中的特殊功能寄存器P0、P1、P2和P3就是这4个端口的输出锁存器。4个端口除了按字节输入/输出外,还可按位寻址,以便位控功能的实现。
2.5.1 P0口
P0口是一双功能的8位并行端口,字节地址为80H,位地址为80H~87H。P0口的位电路结构如图2-9所示。
图2-9 P0口的位电路结构
1.P0口的工作原理
(1)P0口用作系统的地址/数据总线用
当AT89S51外扩存储器或I/O时,P0口作为单片机系统复用的地址/数据总线使用。此时,图2-9中的“控制”信号为1,硬件自动使转接开关MUX打向上面,接通反相器的输出,同时使“与门”处于开启状态。当输出的“地址/数据”信息为1时,“与门”输出为1,上方的场效应管导通,下方的场效应管截止,P0.x引脚输出为1;当输出的“地址/数据”信息为0时,上方的场效应管截止,下方的场效应管导通,P0.x引脚输出为0。可见P0.x引脚的输出状态随“地址/数据”控制信号的状态变化而变化。上方的场效应管起到内部上拉电阻的作用。
当P0口作为数据线输入时,仅从外部存储器(或外部I/O)读入信息,对应的“控制”信号为0,MUX接通锁存器的端。由于P0口作为地址/数据复用方式访问外部存储器时,CPU自动向P0口写入FFH,使下方的场效应管截止,由于控制信号为0,上方的场效应管也截止,从而保证数据信息的高阻抗输入,从外部存储器或I/O输入的数据信息直接由P0.x引脚通过输入缓冲器BUF2进入内部总线。
由以上分析,P0口具有高电平、低电平和高阻抗输入3种状态的端口,因此,P0口作为地址/数据总线使用时,属于真正的双向端口,简称双向口。
(2)P0口用作通用I/O口使用
P0口不作地址/数据总线使用时,也可作为通用的I/O口使用。此时,对应的“控制”信号为0,MUX打向下面,接通锁存器的端,从而“与门”输出为0,上方的场效应管截止,形成的P0口输出电路为漏极开路输出。
P0口用作通用I/O输出口时,来自CPU的“写”脉冲加在D锁存器的CP端,内部总线上的数据写入D锁存器,并由引脚P0.x输出。当D锁存器为1时,端为0,下方场效应管截止,输出为漏极开路,此时,必须外接上拉电阻才能有高电平输出;当D锁存器为0时,下方场效应管导通,P0口输出为低电平。
P0口作为通用I/O输入口时,有两种读入方式:“读锁存器”和“读引脚”。当CPU发出“读锁存器”指令时,锁存器的状态由Q端经上方的三态缓冲器BUF1进入内部总线;当CPU发出“读引脚”指令时,锁存器的输出状态=1(即端为0),从而使下方场效应管截止,引脚的状态经下方的三态缓冲器BUF2进入内部总线。
2.P0口总结
综上所述,P0口具有如下特点:
(1)当P0口用作地址/数据总线口使用时,它是一个真正的双向口,用作与外部扩展的存储器或I/O连接,输出低8位地址和输出/输入8位数据。
(2)当P0口用作通用I/O口使用时,P0口各引脚需要在片外接上拉电阻,此时端口不存在高阻抗的悬浮状态,因此它是一个准双向口。
如果单片机片外扩展了RAM和I/O接口芯片,P0口此时应作为复用的地址/数据总线口使用。如果没有外扩RAM和I/O接口芯片,此时即可作为通用I/O口使用。
2.5.2 P1口
P1口为通用I/O端口,字节地址为90H,位地址为90H~97H,它的位电路结构如图2-10所示。
图2-10 P1口的位电路结构
1.P1口的工作原理
P1口只能作为通用I/O口使用。
(1)P1口作为输出口时,若CPU输出1,则Q=1,=0,场效应管截止,P1口引脚的输出为1;若CPU输出0,则Q=0,=1,场效应管导通,P1口引脚的输出为0。
(2)P1口作为输入口时,分为“读锁存器”和“读引脚”两种方式。“读锁存器”时,锁存器的输出端Q的状态经输入缓冲器BUF1进入内部总线;“读引脚”时,先向锁存器写1,使场效应管截止,P1.x引脚上的电平经输入缓冲器BUF2进入内部总线。
2.P1口总结
P1口由于有内部上拉电阻,没有高阻抗输入状态,故为准双向口。作为输出口时,不需要在片外接上拉电阻。
P1口“读引脚”输入时,必须先向锁存器P1写入1。
2.5.3 P2口
P2口是一个双功能口,它的字节地址为A0H,位地址为A0H~A7H。P2口的位电路结构如图2-11所示。
图2-11 P2口的位电路结构
1.P2口的工作原理
(1)P2口用作地址总线口。在内部控制信号作用下,MUX与“地址”接通。当“地址”线为0时,场效应管导通,P2口引脚输出0;当“地址”线为1时,场效应管截止,P2口引脚输出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进入内部总线。
2.P2口总结
P2口作为地址输出线使用时,可输出外部存储器的高8位地址,它与P0口输出的低8位地址一起构成16位地址,共可寻址64KB的片外地址空间。当P2口作为高8位地址输出口时,输出锁存器的内容保持不变。
P2口作为通用I/O口使用时,为准双向口,功能与P1口一样。
一般情况下,P2口大多作为高8位地址总线口使用,这时它就不能再作为通用I/O口。如果不作为地址总线口使用,它可作为通用I/O口使用。
2.5.4 P3口
由于AT89S51的引脚数目有限,因此在P3口电路中增加了引脚的第二功能(第二功能定义见表2-1)。P3口的每一位都可以分别定义为第二输入功能或第二输出功能。P3口的字节地址为B0H,位地址为B0H~B7H。P3口的位电路结构如图2-12所示。
图2-12 P3口的位电路结构
1.P3口的工作原理
(1)P3口用作第二输入/输出功能。
当选择第二输出功能时,该位的锁存器需要置“1”,使“与非门”为开启状态。当第二输出为1时,场效应管截止,P3.x引脚输出为1;当第二输出为0时,场效应管导通,P3.x引脚输出为0。
当选择第二输入功能时,该位的锁存器和第二输出功能端均应置1,保证场效应管截止,P3.x引脚的信息由输入缓冲器BUF3的输出获得。
(2)P3口用作第一功能——通用I/O口。
当P3口用作通用I/O的输出时,“第二输出功能”端应保持高电平,“与非门”为开启状态。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进入内部总线。
2.P3口总结
P3口内部有上拉电阻,不存在高阻抗输入状态,故为准双向口。
由于P3口每一引脚有第一功能与第二功能,究竟使用哪个功能,完全是由单片机执行的指令控制来自动切换的,用户不需要进行任何设置。
引脚输入部分有两个缓冲器,第二功能的输入信号取自缓冲器BUF3的输出端,第一功能的输入信号取自缓冲器BUF2的输出端。
2.6 时钟电路与时序
时钟电路用于产生AT89S51单片机工作时所必需的控制信号,AT89S51单片机的内部电路正是在时钟信号的控制下,严格地按时序执行指令进行工作。
在执行指令时,CPU首先到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号完成指令所规定的操作。CPU发出的时序信号有两类:一类用于对片内各个功能部件的控制,用户无需了解;另一类用于对片外存储器或I/O端口的控制,这部分时序对于分析、设计硬件接口电路至关重要,这也是单片机应用系统设计者普遍关心和重视的问题。
2.6.1 时钟电路设计
AT89S51单片机各外围部件的运行都以时钟控制信号为基准,有条不紊、一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。AT89S51单片机的最高时钟频率为24MHz。
1.内部时钟方式
AT89S51单片机内部有一个用于构成振荡器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚外部跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器,图2-13所示为AT89S51单片机内部时钟方式的电路。
电路中的电容 C1和 C2的典型值通常选择为 30pF。晶体振荡频率通常选择6MHz、12MHz(可得到准确的定时)或11.0592MHz(可得到准确的串行通信波特率)的石英晶体。
2.外部时钟方式
外部时钟方式使用现成的外部振荡器产生时钟脉冲信号,常用于多片AT89S51单片机同时工作,以便于多片AT89S51单片机之间的同步。
外部时钟源直接接到XTAL1端,XTAL2端悬空,其电路如图2-14所示。
图2-13 AT89S51内部时钟方式的电路
图2-14 AT89S51的外部时钟方式电路
3.时钟信号的输出
当使用片内振荡器时,XTAL1、XTAL2引脚还能为应用系统中的其他芯片提供时钟,但需增加驱动能力,其引出的方式有两种,如图2-15所示。
图2-15 时钟信号的两种引出方式
2.6.2 机器周期、指令周期与指令时序
单片机执行的指令,均是在CPU控制器的时序控制电路的控制下进行的,各种时序均与时钟周期有关。
1.时钟周期
时钟周期是单片机时钟控制信号的基本时间单位。若时钟晶体的振荡频率为f osc,则时钟周期T osc=1/f osc,如f osc=6MHz,则T osc=166.7ns。
2.机器周期
CPU完成一个基本操作所需要的时间称为机器周期,单片机中常把执行一条指令的过程分为几个机器周期,每个机器周期完成一个基本操作,如取指令、读数据或写数据等。AT89S51单片机的每12个时钟周期为一个机器周期,即T cy=12/f osc。若f osc=6MHz,则T cy=2µs;f osc=12MHz,则T cy=1µs。
一个机器周期包括12个时钟周期,分为6个状态:S1~S6。每个状态又分为两拍:P1和P2。因此,一个机器周期中的12个时钟周期表示为S1P1、S1P2、S2P1、S2P2…S6P2,如图2-16所示。
图2-16 AT89S51的机器周期
3.指令周期
指令周期是执行一条指令所需的时间。AT89S51单片机中指令按字节来分,可分为单字节、双字节与三字节指令,因此执行一条指令的时间也不同。对于简单的单字节指令,取出指令立即执行,只需一个机器周期的时间。而有些复杂的指令,如转移、乘、除指令则需两个或多个机器周期。
从指令的执行时间看,单字节和双字节指令一般为单机器周期和双机器周期,三字节指令都是双机器周期,只有乘、除指令占用4个机器周期。
2.7 复位操作和复位电路
复位是单片机的初始化操作,只需给AT89S51单片机的复位引脚RST加上大于两个机器周期(即24个时钟振荡周期)的高电平就可使AT89S51单片机复位。
2.7.1 复位操作
当AT89S51单片机进行复位时,PC初始化为0000H,使AT89S51从程序存储器的0000H单元开始执行程序。除了进入系统的正常初始化之外,当程序运行出错(如程序跑飞)或操作错误使系统处于“死循环”或“跑飞”状态时,也需按复位键使RST脚为高电平,使AT89S51单片机摆脱“死循环”或“跑飞”状态而重新启动程序。
除PC之外,复位操作还对其他一些寄存器有影响,这些寄存器复位时的状态如表2-7所示。由表2-7可以看出,复位时,SP=07H,而4个I/O端口P0~P3的引脚均为高电平。在某些控制应用中,要注意考虑P0~P3引脚的高电平对接在这些引脚上的外部电路的影响。例如,当P1口某个引脚外接一个继电器绕组,当复位时,该引脚为高电平,继电器绕组就会有电流通过,就会吸合继电器开关,从而使开关接通,这可能会引起意想不到的后果。
表2-7 复位时片内各寄存器的状态
寄 存 器 |
复 位 状 态 |
---|---|
PC |
0000H |
Acc |
00H |
PSW |
00H |
B |
00H |
SP |
07H |
DPTR |
0000H |
P0~P3 |
FFH |
IP |
×××0 0000B |
IE |
0××0 0000B |
DP0H |
00H |
DP0L |
00H |
DP1H |
00H |
DP1L |
00H |
TMOD |
00H |
TCON |
00H |
TH0 |
00H |
TL0 |
00H |
TH1 |
00H |
TL1 |
00H |
SCON |
00H |
SBUF |
××××××××B |
PCON |
0××× 0 0 0 0 B |
AUXR |
××××0××0 B |
AUXR1 |
×××××××0 B |
WDTRST |
××××××××B |
2.7.2 复位电路设计
AT89S51 单片机的复位是由外部的复位电路实现的,典型的复位电路如图 2-17所示。
图2-17 复位电路
上电时的自动复位,是通过V CC(+5V)电源给电容C充电,然后加给RST引脚一个短暂的高电平信号,此信号随着V CC对电容C的充电过程而逐渐回落,即RST引脚上的高电平持续时间取决于电容C充电时间。因此为保证系统能可靠复位,RST引脚上的高电平必须大于复位所要求的高电平的时间。
除了上电复位外,有时还需要人工按键复位。按键复位是通过RST端经两个电阻对电源V CC接通分压产生的高电平来实现。当时钟频率选用6MHz时,CR的典型取值为10µF,两个电阻R1和R2的典型值分别为220×Ω和2kΩ。
一般来说,单片机的复位速度比外围I/O接口电路快些。因此在实际应用设计中,为保证系统可靠复位,在单片机的初始化程序段应安排一定的复位延迟时间,以保证单片机与外围I/O接口电路都能可靠地复位。
2.8 看门狗定时器(WDT)的使用
单片机应用系统受到干扰可能会引起程序“跑飞”或“死循环”,这会使系统失控。如果操作人员在场,可按人工复位按钮,强制系统复位。但操作人员不可能一直监视着系统,即使监视着系统,也往往是在引起不良后果之后才进行人工复位。能不能不要人来监视,使系统摆脱失控状态,重新执行正常的程序呢?这时可采用“看门狗”技术。
“看门狗”技术就是使用一个定时器来不断计数,监视程序的运行。当看门狗定时器启动运行后,为防止看门狗定时器的不必要溢出而引起非正常的复位,在程序正常运行过程中,应定期把看门狗定时器清零,以保证看门狗定时器不溢出。
AT89S51单片机片内的“看门狗”部件,包含1个14位看门狗定时器和看门狗复位寄存器(表2-4中的特殊功能寄存器WDTRST,地址A6H)。开启看门狗定时器后,14位定时器会自动对系统时钟12分频后的信号计数,即每16 384(214)个机器周期溢出一次,并产生一个高电平复位信号,使单片机复位。采用12MHz的系统时钟时,则每16 384µs产生一个复位信号。
当由于干扰,使单片机程序“跑飞”或陷入“死循环”时,单片机也就不能正常运行程序来定时把看门狗定时器清零,看门狗定时器计满溢出时,将在AT89S51的RST引脚上输出一个正脉冲(宽度为98个时钟周期),使单片机复位,在系统的复位入口0000H处重新开始执行主程序,从而使程序摆脱“跑飞”或“死循环”状态,让单片机归复于正常的工作状态。
看门狗的启动和清零的方法是一样的。实际应用中,用户只要向寄存器WDTRST(地址为A6H)先写入1EH,接着写入E1H,看门狗定时器便启动计数。为防止看门狗定时器启动后产生不必要的溢出,在执行程序的过程中,应在16 384µs(时钟为12MHz)内不断地复位清零看门狗,即向WDTRST寄存器写入数据1EH和E1H。
在C51语言编程中,若使用看门狗功能,由于在头文件reg51.h中,并没有声明WDTRST寄存器,所以必须事先声明WDTRST寄存器,如:
sfr WDTRST=0xa6
声明后可以用下面的命令启动或复位看门狗。
WDTRST=0x1e;
WDTRST=0xe1;
下面通过一个例子来说明看门狗的使用。
【例2-1】 看门狗的使用举例。
#include<reg51.h>
sfr WDTRST=0xa6
main( )
{
……;
WDTRST=0x1e; //启动看门狗运行
WDTRST=0xe1;
while(1) //无限循环
{
WDTRST=0x1e; //清零看门狗并启动运行
WDTRST=0xe1;
……; //执行时间必须小于16 384µs(系统时钟为12MHz时)
}
}
上述程序在做一个无限循环的运行,通过看门狗定时器可防止程序在执行过程中“跑飞”或 “死循环”,因为只要程序一跑出while( )循环,便不执行复位看门狗的两条复位命令,由于得不到及时复位,看门狗定时器就会溢出使单片机复位,从而使程序从main( )处开始重新运行。所以使用看门狗时一定要注意,一定要在看门狗启动后的16 384µs(系统时钟12MHz)之内将看门狗定时器及时零,以防其溢出导致单片机复位。
2.9 低功耗节电模式
AT89S51单片机有两种低功耗节电工作模式:空闲模式(idle mode)和掉电保持模式(power down mode),其目的是尽可能降低系统的功耗。在掉电保持模式下,V CC可由后备电源供电。图2-18所示为两种节电模式的内部控制电路。
图2-18 低功耗节电模式的控制电路
AT89S51单片机的两种节电模式,可通过指令对特殊功能寄存器PCON的位IDL和位PD的设置来实现。PCON的格式(见图2-19),字节地址为87H。
图2-19 特殊功能寄存器PCON的格式
PCON寄存器各位的定义如下。
(1)SMOD:串行通信的波特率选择位(该位的功能见串行口一章的介绍)。
(2)—:保留位,未定义。
(3)GF1、GF0:通用标志位,用户使用,应充分利用。
(4)PD:掉电保持模式控制位,若PD=1,则进入掉电保持模式。
(5)IDL:空闲模式控制位,若IDL=1,则进入空闲运行模式。
2.9.1 空闲模式
1.空闲模式的进入
如果用指令把寄存器PCON中的IDL位置“1”,由图2-17可见,则把通往CPU的时钟信号关断,单片机便进入空闲模式,虽然振荡器仍然运行,但是CPU进入空闲状态。此时,片内所有外围电路(中断系统、串行口和定时器)仍继续工作,SP、PC、PSW、A、P0~P3端口等所有其他寄存器,以及内部RAM和SFR中的内容均保持进入空闲模式前的状态。
2.空闲模式的退出
系统进入空闲模式后有两种方法可退出,一种是响应中断方式,另一种是硬件复位方式。
在空闲模式下,若任何一个允许的中断请求被响应时,IDL位被片内硬件自动清零,从而退出空闲模式。当执行完中断服务程序返回时,将从设置空闲模式指令的下一条指令(断点处)开始继续执行程序。
另一种退出空闲模式的是硬件复位。当使用硬件复位退出空闲模式时,在复位逻辑电路发挥控制作用前,有长达两个机器周期的时间,单片机要从断点处(IDL位置“1”指令的下一条指令处)继续执行程序。在这期间,片内硬件阻止CPU对片内RAM的访问,但不阻止对外部端口(或外部RAM)的访问。为避免在硬件复位退出空闲模式时出现对端口(或外部RAM)不希望的写入,系统在进入空闲模式时,紧随IDL位置“1”指令后面的不应是写端口(或外部RAM)的指令。
2.9.2 掉电运行模式
1.掉电模式的进入
用指令把PCON寄存器的PD位置1,便进入掉电模式。由图2-17可见,在掉电模式下,进入时钟振荡器的信号被封锁,振荡器停止工作。由于没有了时钟信号,内部的所有部件均停止工作,但片内的RAM和SFR的原来内容都被保留,有关端口的输出状态值都保存在对应的特殊功能寄存器中。
2.掉电模式的退出
掉电模式的退出有两种方法:硬件复位和外部中断。硬件复位时要重新初始化SFR,但不改变片内RAM的内容。只有当V CC恢复到正常工作水平时,只要硬件复位信号维持10ms,便可使单片机退出掉电模式。
3.掉电和空闲模式下的WDT
掉电模式下振荡器停止,意味着WDT也就停止计数。用户在掉电模式下不需要操作WDT。
掉电模式的退出有两种方法:硬件复位和外部中断。当用硬件复位退出掉电模式时,对WDT的操作与正常情况一样。外部中断方式退出掉电模式时,应使中断输入保持足够长时间的低电平,以使振荡器达到稳定。当中断变为高电平之后,该中断被执行,在中断服务程序中复位寄存器WDTRST。在外部中断引脚保持低电平时,为防止WDT溢出复位,在系统进入掉电模式之前先对寄存器WDTRST复位。
在进入空闲模式之前,应先设置特殊功能寄存器AUXR中的WDIDLE位,以确认WDT是否继续计数。当WDIDLE=0时,空闲模式下的WDT保持继续计数。为防止复位单片机,用户可设计一个定时器。该定时器使器件定时退出空闲模式,然后复位WDTRST,再重新进入空闲模式。
当WDIDLE=1时,WDT在空闲模式下暂停计数,退出空闲模式后,方可恢复计数。
2.10 AT89S52单片机与AT89S51单片机的差异
目前增强型的AT89S52单片机与基本型的AT89S51单片机的价格已经没有什么差别。两款机型相比,增强型的AT89S52的片内数据存储器(片内RAM)与片内程序存储器(片内Flash存储器)的容量分别增加了一倍,除此这外,它还增加了一个功能极强的定时器/计数器T2。本节将介绍AT89S52单片机与AT89S51单片机在片内硬件资源上的差异。
2.10.1 AT89S52单片机与AT89S51单片机片内硬件资源的差别
AT89S52与AT89S51单片机的片内硬件资源相比,主要有以下差别:
(1)片内数据存储器(片内RAM)由128B增加至256B;
(2)程序存储器由4KB 增加为8KB Flash ROM;
(3)增加了6个特殊功能寄存器;
(4)增加了1个16位定时器/计数器T2。
2.10.2 AT89S52的引脚
AT89S52单片机共有3种封装,有效引脚为40条,常见的为双列直插封装(DIP),此外,还有44引脚的PLCC和TQFP封装方式的芯片。AT89S52单片的双列直插封装(DIP)的引脚如图2-20所示。
图2-20 AT89S52双列直插封装方式的引脚
AT89S52与AT89S51引脚(见图2-2)的差别主要在P1.0和P1.1引脚上。AT89S52单片机的这两只引脚增加了复用功能:
(1)P1.0(1脚):定时器/计数器T2的外部计数输入T2;
(2)P1.1(2脚):定时器/计数器T2的捕捉/再转入触发及方向控制T2EX。
2.10.3 AT89S52单片机的存储器结构
下面介绍AT89S52单片机与AT89S51单片机的存储器空间结构的差别。
1.程序存储器地址空间
AT89S52单片机的程序存储器空间为64KB,其中片内有8KB的Flash ROM,地址为0000H~1FFFH。64KB空间是统一的,=1,是从片内程序存储器0000H处开始执行程序,=0,程序是从片外程序存储器0000H处开始执行,片内程序存储器无效。
64KB程序存储器空间中有6个特殊单元,它们分别对应6个中断源的中断服务子程序的中断入口,如表2-8所示。与AT89S51单片机相比, AT89S52单片机多了一个定时器/计数器T2的中断入口,如表2-8中的最后一行。
表2-8 6个中断源的中断入口地址
中 断 源 |
入 口 地 址 |
---|---|
外部中断0 |
0003H |
定时器/计数器T0 |
000BH |
外部中断1 |
0013H |
定时器/计数器T1 |
001BH |
串行口 |
0023H |
定时器/计数器T2 |
002BH |
2.数据存储器空间
数据存储器空间分为片内与片外两部分。
AT89S52单片机片内有256B的RAM,当AT89S52单片机的片内RAM不够用时,可在片外扩展最多64KB 的RAM。
图2-21所示为AT89S52片内数据存储器的结构,片内数据存储器共有256个单元,字节地址为00H~FFH。
AT89S52与AT89S51片内数据存储器的差别是,前者的片内数据存储器比后者的多了1倍,即增加了128B的RAM单元,其字节地址为80H~FFH。片内的特殊功能寄存器占据的字节地址与增加的128B的RAM单元的地址相同,但它们是两个不同的区域,一个是RAM区,一个是特殊功能寄存器区。
图2-21 AT89S52片内RAM的结构
3.特殊功能寄存器
AT89S52在AT89S51单片机的基础上增加了6个特殊功能寄存器:T2CON、T2MOD、RCAP2L、RCAP2H、TL2和TH2,它共有32个特殊功能寄存器(SFR),它们的名称及其分布见表2-9(新增加的6个SFR为表2-9中的序号24~29的寄存器,均与定时器/计数器T2有关,见第7章的介绍)。
表2-9 AT89S52单片机片内SFR的名称及其分布
序号 |
特殊功能寄存器符号 |
名 称 |
字节地址 |
位地址 |
复位值 |
---|---|---|---|---|---|
1 |
P0 |
P0口 |
80H |
87H~80H |
FFH |
2 |
SP |
堆栈指针 |
81H |
— |
07H |
3 |
DP0L |
数据指针DPTR0低字节 |
82H |
— |
00H |
4 |
DP0H |
数据指针DPTR0高字节 |
83H |
— |
00H |
5 |
DP1L |
数据指针DPTR1低字节 |
84H |
— |
00H |
6 |
DP1H |
数据指针DPTR1高字节 |
85H |
— |
00H |
7 |
PCON |
电源控制寄存器 |
87H |
— |
0×××0000B |
8 |
TCON |
定时器/计数器1、2的控制寄存器 |
88H |
8FH~88H |
00H |
9 |
TMOD |
定时器/计数器1、2的方式控制寄存器 |
89H |
— |
00H |
10 |
TL0 |
定时器/计数器0(低字节) |
8AH |
— |
00H |
11 |
TL1 |
定时器/计数器1(低字节) |
8BH |
— |
00H |
12 |
TH0 |
定时器/计数器0(高字节) |
8CH |
— |
00H |
13 |
TH1 |
定时器/计数器1(高字节) |
8DH |
— |
00H |
14 |
AUXR |
辅助寄存器 |
8EH |
— |
×××0 0××0B |
15 |
P1 |
P1口寄存器 |
90H |
97H~90H |
FFH |
16 |
SCON |
串行控制寄存器 |
98H |
9FH~98H |
00H |
17 |
SBUF |
串行发送数据缓冲器 |
99H |
— |
××××××××B |
18 |
P2 |
P2口寄存器 |
A0H |
A7H~A0H |
FFH |
19 |
AUXR1 |
辅助寄存器 |
A2H |
— |
×××××××0 B |
20 |
WDTRST |
看门狗复位寄存器 |
A6H |
— |
××××××××B |
21 |
IE |
中断允许控制寄存器 |
A8H |
AFH~A8H |
0××0 0000B |
22 |
P3 |
P3口寄存器 |
B0H |
B7H~B0H |
FFH |
23 |
IP |
中断优先级控制寄存器 |
B8H |
BFH~B8H |
××00 0000B |
24 |
T2CON |
定时器/计数器2控制寄存器 |
C8H |
CFH~C8H |
00H |
25 |
T2MOD |
定时器/计数器2方式控制 |
C9H |
|
×××× ××00 B |
26 |
RCAP2L |
定时器/计数器2陷阱寄存器低字节 |
CAH |
|
00H |
27 |
RCAP2H |
定时器/计数器2陷阱寄存器高字节 |
CBH |
|
00H |
28 |
TL2 |
定时器/计数器2(低字节) |
CCH |
|
00H |
29 |
TH2 |
定时器/计数器2(高字节) |
CDH |
|
00H |
30 |
PSW |
程序状态字寄存器 |
D0H |
D7H~D0H |
00H |
31 |
A(或Acc) |
累加器 |
E0H |
E7H~E0H |
00H |
32 |
B |
B寄存器 |
F0H |
F7H~F0H |
00H |
与AT89S51单片机相比,AT89S52特殊功能寄存器中增加了6个可寻址位,即表2-10中字节地址为C8H的特殊功能寄存器T2CON中的,位地址为C8H~CDH的6个位。
表2-10 SFR中的位地址分布
特殊功能寄存器 | 位 地 址 | 字节地址 | |||||||
---|---|---|---|---|---|---|---|---|---|
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
B | F7H | F6H | F5H | F4H | F3H | F2H | F1H | F0H | F0H |
Acc | E7H | E6H | E5H | E4H | E3H | E2H | E1H | E0H | E0H |
PSW | D7H | D6H | D5H | D4H | D3H | D2H | D1H | D0H | D0H |
IP | — | — | — | BCH | BBH | BAH | B9H | B8H | B8H |
P3 | B7H | B6H | B5H | B4H | B3H | B2H | B1H | B0H | B0H |
T2CON | — | — | CDH | CCH | CBH | CAH | C9H | C8H | C8H |
IE | AFH | — | — | ACH | ABH | AAH | A9H | A8H | A8H |
P2 | A7H | A6H | A5H | A4H | A3H | A2H | A1H | A0H | A0H |
SCON | 9FH | 9EH | 9DH | 9CH | 9BH | 9AH | 99H | 98H | 98H |
P1 | 97H | 96H | 95H | 94H | 93H | 92H | 91H | 90H | 90H |
TCON | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | 89H | 88H | 88H |
P0 | 87H | 86H | 85H | 84H | 83H | 82H | 81H | 80H | 80H |
图2-22所示为AT89S52单片机中各类存储器的结构图,从图中可清楚地看出AT89S52单片机的各类存储器在存储器空间的位置。
图2-22 AT89S52单片机的存储器结构
新增加的定时器/计数器T2的逻辑结构与工作原理,将在第7章中介绍。
思考题及习题
一、填空题
1.在AT89S51单片机中,如果采用6MHz晶体振荡器,一个机器周期为 。
2.AT89S51单片机的机器周期等于 个时钟振荡周期。
3.内部RAM中,位地址为40H、88H的位,该位所在字节的字节地址分别为 和 。
4.片内字节地址为2AH单元最低位的位地址是 ;片内字节地址为A8H单元的最低位的位地址为 。
5.若A中的内容为63H,那么,P标志位的值为 。
6.AT89S51单片机复位后,R4所对应的存储单元的地址为 ,因上电时PSW= 。这时当前的工作寄存器区是 组工作寄存器区。
7.内部RAM中,可作为工作寄存器区的单元地址为 H~ H。
8.通过堆栈操作实现子程序调用时,首先要把 的内容入栈,以进行断点保护。调用子程序返回指令时,再进行出栈保护,把保护的断点送回 ,先弹出的是原来 中的内容。
9.AT89S51单片机程序存储器的寻址范围是由程序计数器PC的位数决定的,因为AT89S51单片机的PC是16位的,因此其寻址的范围为 KB。
10.AT89S51单片机复位时,P0~P3口的各引脚为 电平。
11.AT89S51单片机使用片外振荡器作为时钟信号时,引脚XTAL1接 ,引脚XTAL2的接法是 。
12.AT89S51单片机复位时,堆栈指针SP中的内容为 ,程序指针PC中的内容为 。
二、单选题
1.程序在运行中,当前PC的值是 。
A.当前正在执行指令的前一条指令的地址
B.当前正在执行指令的地址
C.当前正在执行指令的下一条指令的首地址
D.控制器中指令寄存器的地址
2.下列说法正确的是 。
A.PC是一个可寻址的寄存器
B.单片机的主频越高,其运算速度越快
C.AT89S51单片机中的一个机器周期为1µs
D.特殊功能寄存器SP内存放的是堆栈栈顶单元的内容
三、判断对错
1.使用AT89S51单片机且引脚=1时,仍可外扩64KB的程序存储器。
2.区分片外程序存储器和片外数据存储器的最可靠的方法是看其位于地址范围的低端还是高端。
3.在AT89S51单片机中,为使准双向的I/O口工作在输入方式,必须事先预置为1。
4.PC可以看成是程序存储器的地址指针。
5.AT89S51单片机中特殊功能寄存器(SFR)使用片内RAM的部份字节地址。
6.片内RAM的位寻址区,只能供位寻址使用,而不能进行字节寻址。
7.AT89S51单片机共有26个特殊功能寄存器,它们的位都是可以用软件设置的,因此,都是可以位寻址的。
8.堆栈区是单片机内部的一个特殊区域,与RAM无关。
9.AT89S51单片机进入空闲模式,CPU停止工作。片内的外围电路(如中断系统、串行口和定时器)仍将继续工作。
10.AT89S51单片机不论是进入空闲模式还是掉电运行模式后,片内RAM和SFR中的内容均保持原来的状态。
11.AT89S51单片机进入掉电运行模式,CPU和片内的外围电路(如中断系统、串行口和定时器)均停止工作。
12.AT89S51单片机的掉电运行模式可采用响应中断方式来退出。
四、简答题
1.AT89S51单片机片内都集成了哪些功能部件?
2.AT89S51的64KB程序存储器空间有5个单元地址对应AT89S51单片机5个中断源的中断入口地址,请写出这些单元的入口地址及对应的中断源。
3.说明AT89S51单片机的引脚接高电平或低电平的区别。
4.AT89S51单片机有哪两种低功耗节电模式?说明两种低功耗节电模式的异同。
5.AT89S51单片机运行时程序出现“跑飞”或陷入“死循环”时,说明如何利用看门狗来摆脱困境的工作原理。