首页 百科知识 单片机的外部引脚及功能

单片机的外部引脚及功能

时间:2022-10-22 百科知识 版权反馈
【摘要】:本章要求掌握单片机总线相关概念,了解AT89S52单片机内部系统结构的组成及各寄存器的功能与使用方法,理解AT89S52单片机存储器结构,掌握AT89S52单片机端口操作方法。“中断系统”在单片机中起着“传达室”的作用,当单片机控制对象的参数到达某个需要加以干预的状态时,就可经此“传达室”通报给CPU,使CPU根据外部事态的轻重缓急来采取适当的应付措施。控制总线是用来传送控制信息的总线,主要功能是传送控制信息,使单片机与外部电路的操作同步。

第2章 AT89S52单片机系统结构

【教学目的】

本章主要讲述AT89S52单片机的系统结构。主要学习和理解单片机的端口、总线等基本结构,然后以AT89S52单片机为例学习单片机的基本结构及其寄存器的功能和使用方法。

【教学要求】

本章要求掌握单片机总线相关概念,了解AT89S52单片机内部系统结构的组成及各寄存器的功能与使用方法,理解AT89S52单片机存储器结构,掌握AT89S52单片机端口操作方法。

【重点难点】

本章重点是单片机的内部结构、存储器结构和I/O端口。难点是单片机的存储器结构和单片机内部的时序。

【知识要点】

本章知识点较多,要重点掌握的知识点有:单片机的总线结构,单片机的内部结构,单片机的寄存器组织,存储器结构,单片机的端口,机器周期和指令周期,复位电路等。

2.1 单片机的组成

单片机要自动完成计算,它应该具有哪些最重要的部分呢?

我们以打算盘计算一道算术题为例进行说明。

例:111+109×188-128÷32

现在要进行运算,首先需要一把算盘,其次是纸和笔。我们把要计算的问题记录下来。第一步先算109×188,再把它与111相加的结果记在纸上,第二步计算128÷32,再把它从上一次结果中减去,就得到最后的结果。

现在,用单片机来完成上述过程,显然,它首先要有代替算盘进行运算的部件,这就是“运算器”;其次,要有能起到纸和笔作用的器件,即能记忆原始题目、原始数据和中间结果,还要记住使单片机能自动进行运算而编制的各种命令,这类器件就称为“存储器”。此外,还需要有能代替人作用的控制器,它能根据事先给定的命令发出各种控制信号,使整个计算过程一步步地进行。但是光有这三部分还不够,原始的数据与命令要输入,计算的结果要输出,都需要按先后顺序进行,有时还需等待。

如上例中,当在计算109×188时,数字111就不能同时进入运算器。因此就需要在单片机上设置按控制器的命令进行动作的“门”,当运算器需要时,就让新数据进入。或者,当运算器得到最后结果时,再将此结果输出,而中间结果不能随便“流出”单片机。这种对输入、输出数据进行一定管理的“门”电路在单片机中称为“口”(Port)。

在单片机中,基本上有三类信息在流动,第一类是数据,即各种原始数据(如上例中的111、109等)、中间结果(如128÷32所得的商4)、程序(命令的集合)等。这些数据要由外部设备通过相应的通道进入单片机,再存放在存储器中。在运算处理过程中,数据从存储器读入运算器进行运算,运算的中间结果要存入存储器中,或最后由运算器经“I/O口”输出。第二类信息是控制命令。用户发给单片机执行的各种命令(程序)也以数据的形式由存储器送入控制器,由控制器译码后变为各种控制信号,以便执行如加、减、乘、除等功能的各种命令,这类信息称为控制命令,控制器控制运算器进行运算和处理,同时控制存储器的读(取出数据)和写(存入数据)等操作。第三类信息是地址信息,其作用是告诉运算器和控制器在何处去取命令取数据,将结果存放到什么地方,通过哪个口输入和输出信息等。

存储器又分为只读存储器(ROM)和读写存储器(RAM)。只读存储器存放调试好的固定程序和常数,一旦将数据存入,就只能读出,不能更改;读写存储器存放一些随时有可能变动的数据,可随时存入或读出数据,但是数据在掉电后丢失。

运算器和控制器合称为中央处理单元——CPU。单片机除了进行运算外,还要完成控制功能,所以离不开计数和定时,在单片机中一般设置有定时器和计数器,单片机里的时钟电路,控制单片机按照一定的时序进行运算和控制。单片机中还有一个重要的概念“中断系统”。“中断系统”在单片机中起着“传达室”的作用,当单片机控制对象的参数到达某个需要加以干预的状态时,就可经此“传达室”通报给CPU,使CPU根据外部事态的轻重缓急来采取适当的应付措施。

现在,我们已经知道了单片机的组成,下面的问题是如何将各部分连接成一个整体。在单片机内部有一条将它们连接起来的“纽带”,即所谓的“总线”。“总线”就像我们生活中的交通“干道”一样,把不同的地方和城市连接起来。而CPU、ROM、RAM、I/O口、中断系统等就分布在此“总线”的两旁,并和它连通。在计算机中,一切指令、数据都可经内部总线传送。

2.2 单片机中的总线

微处理器是计算机的核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,微处理机中引入了总线的概念,各个器件共同享用总线。在计算机中,根据总线的功能可以分为数据总线、地址总线和控制总线。

1.数据总线(DB,Data Bus)

数据总线是片内外之间用来相互传送数据的总线,所有器件的数据线全部接到公用的数据总线上,即相当于各个器件并联起来。在AT89S52中,数据总线宽度为8位,就是一次可以同时处理8位数据,每次恰好操作一个字节。

2.地址总线(AB,Address Bus)

在单片机的外部存储器和其它器件中有存储单元,这些存储单元要被分配地址才能使用。数据是按照地址进行存储的,就像我们坐火车一样,首先对火车进行编号,比如哪节车厢,哪个座位,这就是地址,然后我们每个人才可以按照这个地址就坐,这个时候,我们每个人就是数据。单片机信息按存储单元分组存放在存储器中,每一个存储单元有唯一的存储器地址与之对应。在一个存储单元中进行读写之前,单片机首先选择所需要的存储器地址,把地址信息输出到地址总线上,然后通过译码器译出相应的地址。

AT89S52单片机地址总线宽度为16位,表示符号为A0~A15,可以分配216=65536个地址,地址从0000H~FFFFH。

3.控制总线(CB,Control Bus)

控制总线是用来传送控制信息的总线,主要功能是传送控制信息,使单片机与外部电路的操作同步。控制总线分为输入控制线和输出控制线,计算机在控制总线的控制下进行相应的操作。

2.3 单片机的指令和指令系统

前面已经讲述了单片机的几个主要组成部分,这些部分构成了单片机的硬件(Hardware),有了硬件才有了实现计算和控制功能的基础。单片机要真正地能进行计算和控制,还必须有软件(Software)的配合。只有将各种正确的程序存入单片机,给计算机相应的数据和指令,它才能有效地工作。单片机之所以能自动地进行运算和控制,正是由于人把实现计算和控制的步骤用命令的形式,即一条条指令(Instruction)预先存入到存储器中,单片机在CPU的控制下,将指令一条条地取出来,并加以翻译和执行,最终得到相应的结果。

A+B=C,这是一个简单的两数的运算,我们看看运算过程。在进行运算前,首先应该把A和B这两个数存入存储器后,然后进行下面的运算:

第一步:把A从它的存贮单元中取出来,送至运算器;

第二步:把B从它所在的存贮单元中取出来,送至运算器;

第三步:进行相加运算,A+B;

第四步:把相加完的结果C,送至存储器中指定的单元。

在上面的运算过程中,数据的输入、输出、相加等,我们称作一次操作(Operation),我们把要求计算机执行的各种操作用命令的形式写下来,这就是指令。单片机怎样才能辨别和执行这些操作呢?这是在设计单片机时由设计人员赋予它的指令系统所决定的。一条指令对应着一种基本操作,单片机所能执行的全部指令,就是该单片机的指令系统(Instruction Set),不同种类的单片机,其指令系统亦不相同。

2.4 AT89S52单片机的外部引脚及功能

AT89S52是一种带8KB闪速可编程可擦除只读存储器(FPEROM,Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 型8位单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的80C51指令集和输出管脚相兼容。由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89S52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,具有以下主要基本特征:

◆ 8位CPU,和MCS-51单片机产品完全兼容

◆ 8KB在系统可编程Flash存储器

◆ 1000次擦写周期

◆ 振荡器和时钟电路的全静态操作:0Hz~33Hz

◆ 三级加密程序存储器

◆ 32个可编程I/O口线

◆ 3个16位定时器/计数器

◆ 8个中断源,6个中断矢量,2级优先权的中断系统

◆ 全双工UART串行通道

◆ 低功耗空闲和掉电模式

◆ 掉电后中断可唤醒

◆ 具有看门狗定时器

◆ 双数据指针DPTR0和DPTR1

◆ 具有掉电标识符POF

AT89S52的制造工艺为HMOS,采用40引脚的双列直插式的PDIP封装。PDIP(Plastic Dual Inline Package)称为塑封双列直插式封装,可直接插入标准插座或焊在印制板上。其外部引脚为图2-1所示。

图2-1 AT89S52单片机外部引脚图

除采用PDIP封装外,还可以采用TQFP(Thin Quad Flat Pack)纤薄四方扁平封装,或者采用PLCC(Plastic Leaded Chip Carrier)有引线塑料芯片载体封装,如图2-2、2-3所示。

图2-2 PLCC封装

图2-3 TQFP封装

1.主电源及时钟引脚

此类引脚主要包括电源引脚VCC、GND,时钟引脚XTAL1、XTAL2。

①VCC(40脚):接+5V电压,为单片机提供电源。

②GND接地端(20脚):接地。

③单片机的时钟引脚。单片机的时钟提供单片机运行的时序控制信号。单片机的时钟信号是一个方波脉冲信号,如果没有这个脉冲信号,单片机就根本无法工作,就像人身上的脉搏一样。单片机在此脉冲信号的基础上,通过内部分频电路周期性地产生一系列的时序控制信号来满足各功能的分时处理要求。

XTAL1(18脚)、XTAL2(19脚):外接晶体引线端。当使用内部时钟振荡器时,这两个引线端外接石英晶体和微调电容。当使用外部时钟时,XTAL1用于外接外部时钟源。

2.控制引脚

控制引脚共有4根,分别是

①ALE/PROG(Address Latch Enable/Programming)

ALE/为地址锁存信号端/编程脉冲输入端。地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲,实现低字节地址和数据的分时复用。在一般情况下,ALE以晶振1/6的固定频率输出脉冲,可用来作为外部定时器或时钟使用。编程输入端在flash编程时,用作编程输入脉冲。

(Programe Store Enable)引脚是外部程序存储器选通信号。当AT89S52从外部程序存储器执行外部代码时,在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。

③RST(Reset)

RST(Reset)为复位信号输入端,晶振工作时,RST引脚持续加上2个机器周期高电平将使单片机复位。看门狗计时完成后,RST脚输出96个晶振周期的高电平。

(External Access enable/Vpower programming)

为外部程序存储地址允许输入端/编程电源输入端。为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。 VPP是编程电源输入端,在Flash编程期间,它和30引脚的第二功能PROG编程脉冲输入端一起使用。

2.5 AT89S52单片机的内部结构

AT89S52单片机的内部结构如图2-4所示,按照功能划分为5部分,分别是微处理器(CPU)、存储器、I/O端口、定时器/计数器和中断系统。

图2-4 AT89S52单片机的内部结构框图

2.5.1 AT89S52单片机微处理器(CPU)

微处理器是单片机内部的核心部件,它决定了单片机的主要功能特性。微处理器由运算器、控制器和专用寄存器组等组成。

1.以ALU为核心的运算器

运算器主要包括算术逻辑运算单元ALU、累加器ACC(A)、暂存寄存器、B寄存器、程序状态标志寄存器PSW以及BCD码运算修正电路等。

(1)算术逻辑单元ALU

AT89S52单片机的ALU功能十分强大,主要用来实现对操作数的算术逻辑运算和位操作等,对传送到CPU的数据进行加、减、乘、除等算术运算,与、或、异或等逻辑操作。ALU还具有布尔处理功能,指令系统中的布尔指令集、存储器中的位地址空间与CPU中的位操作构成了片内的布尔功能系统,它可对位(bit)变量进行布尔处理,如置位、清零、求补、测试转移及逻辑“与”、“或”等操作,主要具有以下特点:

◆ 在B寄存器配合下,能完成乘法与除法操作;

◆ 可进行多种内容交换操作;

◆ 能做比较和跳转操作;

◆ 很强的位操作功能。

ALU主要进行数据运算,有以下两个输出:

◆ 数据经过运算后,其结果又通过内部总线送回到累加器中;

◆ 数据运算后产生的标志位输出至程序状态字寄存器PSW。

(2)B寄存器

为了乘除运算的需要,AT89S52单片机中专门设置了B寄存器。在执行乘法运算指令时,B寄存器用来存放其中一个乘数和乘积的高8位数;在执行除法运算指令时,B寄存器中存入除数及余数。

B寄存器在乘法和除法指令中作为ALU的输入之一。乘法中,ALU的两个输入分别为A、B,运算结果存放在A、B寄存器中。A存放积的低8位,B存放积的高8位。除法中,被除数取自A,除数取自B,商数存放于A,余数存放于B。在其他情况下,B寄存器可以作为内部RAM中的一个单元来使用。

例如:

  MUL AB; A×B→(BA) B中高8位, A中低8位

  DIV AB; A÷B→(A)  A中商,B中余数

(3)累加器ACC

运算部件中的累加器ACC是一个最常用的具有特殊用途的二进制8位寄存器(ACC也可简写为A),累加器A(Accumulator)专门用来存放操作数或运算结果。在CPU执行运算前,大部分单操作数指令的操作数取自累加器;两操作数指令通常有一个操作数放入累加器中,运算完成后再把运算结果放入累加器中。从功能上看,它与一般微机的累加器相比没有什么特别之处,但需要说明的是ACC的进位标志CY就是布尔处理器进行位操作的一个累加器。

累加器相当于数据的中转站。由于数据传送大多数都通过累加器,容易产生“堵塞”现象,即累加器具有“瓶颈”现象。

(4)程序状态字寄存器PSW

程序状态字寄存器是一个8位寄存器,可读可写,用于存放程序运行的状态信息,相当于一个标志寄存器,这个寄存器的一些位可由软件设置,有些位则由硬件运行时自动设置,表2-1是它的功能说明。

表2-1 程序状态字

PSW.7(CY):进位标志位,最近一次算术指令或逻辑指令执行后,该位对进位位进行标识。当有进位或借位时,CY=1,否则CY=0。此位有两个功能:一是执行算数运算时,存放进位标志,可被硬件或软件置位或清零;二是在位操作中作累加器使用。

PSW.6(AC):辅助进位标志位,用于BCD码的十进制调整运算。在加、减运算中,当D3向D4有进位或借位时AC=1,否则AC=0。

PSW.5(F0):用户标志位,供用户设置。用户可以根据需要对PSW.5赋予一定的含义,并依据PSW.5=0或PSW.5=1来决定程序的执行方式。

PSW.4、PSW.3(RS1和RS0):寄存器组选择位。AT89S52共有4组工作寄存器,每组8个单元。8个8位工作寄存器分别用R0~R7表示,可以用软件置位或清除以确定当前使用的工作寄存器区。可以通过改变RS1和RS0的状态来决定R0~R7的实际物理地址,RS1和RS0与工作寄存器R0~R7的物理地址之间的关系如表2-2所示。

表2-2 工作寄存器区选择

PSW.2(OV):溢出标志。溢出标志OV在硬件上是通过一个异或门来实现的,即:OV=C6⊕C7,其中,C6为D6位向D7位的进位或借位,C7为D7向C的进位或借位。具体情况如下:

◆ 带符号数运算中,OV=1表示加减运算结果超出了累加器A所能表示符号数的有效范围(–128~+127),即产生了溢出,因此运算结果是错误的;否则OV=0,运算结果正确,无溢出。

◆ 乘法运算中,OV=1,表示乘积超过255,运算的乘积分别放在B与A中;否则OV=0,表示乘积只放在A中。

◆ 除法运算中,OV=1,表示除数为0,除法不能进行;OV=0,除数不为0,除法可正常进行。

PSW.0(P):奇偶校验位。每个指令周期都由硬件来置位或清除,表示累加器A中1的个数的奇偶性。P=1,累加器A中1的个数为奇数;若P=0,则累加器A中1的个数为偶数。

2.控制器

控制器是CPU的大脑中枢,主要功能是控制指令的读入、译码和执行,它以定时控制逻辑为中心,按照预先给定的计算步骤,即预先编写好的已经输入到计算机存储器中的程序发出控制信号,对指令的执行过程进行定时和逻辑控制,根据不同的指令协调单片机各个单元进行有序的工作。控制器主要包括程序计数器PC、指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)、堆栈指针SP、双数据指针DPTR0、DPTR1以及控制电路(时序电路、中断控制部件、微操作控制部件)等。

(1)程序计数器PC(Program Counter)

单片机执行一个程序,首先应该把该程序按顺序预先装入存储器ROM的某个区域。单片机工作时按顺序一条条取出指令并执行。这个过程中,必须有一个电路能找出指令所在的单元地址,该电路就是程序计数器PC。当单片机开始执行程序时,给PC装入第一条指令所在地址,它每取出一个字节的指令,PC的内容就自动加1,以指向下一条指令的地址,使指令能顺序执行。只有当程序遇到转移指令、子程序调用指令,或遇到中断时,PC才转到所需要的地方去。

AT89S52 CPU根据PC指定的地址,从ROM相应单元中取出指令字节放在指令寄存器中寄存,指令代码被译码器译成各种形式的控制信号,这些信号与单片机时钟振荡器产生的时钟脉冲在定时与控制电路中相结合,形成按一定时间节拍变化的电平和时钟,即所谓控制信息,在CPU内部协调寄存器之间的数据传输、运算等操作。

AT89S52的PC是一个16位计数器,寻址范围为64KB,可以对64KB的程序存储器直接寻址。复位时,PC=0000H,程序从0单元开始执行。

(2)指令寄存器IR和指令译码器ID

PC指向相应的ROM地址,取出来的指令经IR送至ID,由ID对指令译码产生一定序列的控制信号,以执行指令所规定的操作。

指令寄存器IR是8位寄存器,用于存放从ROM中取出的指令码。指令译码器ID对指令码进行译码,用于对送入指令寄存器中的指令进行译码,所谓译码就是把指令转变成执行此指令所需要的电信号。当执行指令时,CPU把从程序存储器中读取的指令代码送入指令寄存器,然后传送到指令译码器ID,当指令送入译码器后,由译码器对该指令进行译码,根据译码器输出的信号,CPU控制电路定时地产生执行该指令所需的各种控制信号,使单片机正确地执行程序所需要的各种操作,这些工作都是自动完成的。

(3)堆栈指针SP(Stack Pointer)

堆栈是一种数据结构,它是一个8位寄存器,指示堆栈顶部在内部RAM中的位置。堆栈的最主要特征是“后进先出”规则,也即最先入栈的数据放在堆栈的最底部,而最后入栈的数据放在栈的顶部,因此,最后入栈的数据出栈时则是最先的,其结构如图2-5所示。这和我们在一个箱里存取书本一样,要将放入箱底部的书取出,必须先取走最上层的书籍。

图2-5 堆栈结构示意图

堆栈的设立是为了中断操作和子程序的调用而用于保存数据的,即常说的断点保护和现场保护。微处理器在执行完子程序和中断服务程序的执行后,需要转回到主程序中来,继续执行原来的程序。在转入子程序和中断服务程序前,必须先将现场的数据进行保存起来,否则返回时,CPU并不知道原来的程序执行到哪一步,原来的中间结果如何。所以在转入执行其他子程序前,先将需要保存的数据压入堆栈中保存,以备返回时,能够返回原来的数据,供主程序继续执行。

AT89S52的堆栈位于RAM中,堆栈占据一定的RAM存储单元。堆栈的操作只有入栈和出栈两种,数据写入堆栈称为入栈(PUSH),从堆栈中取出数据称为出栈(POP)。无论向堆栈写入数据还是从堆栈中读出数据,都是对栈顶单元进行的,SP即指示出栈顶的位置(即地址)。在子程序调用和中断服务程序响应的开始和结束期间,CPU根据SP指示的地址与相应的RAM存储单元交换数据。系统复位后,SP的初始值为07H,堆栈实际上是从08H开始进行数据操作。但从RAM的结构分布中可知,08H~1FH隶属1~3工作寄存器区,编程时需要用到这些数据单元,必须对堆栈指针SP进行初始化,原则上设在任何一个区域均可,但要根据需要灵活设置。

(4)数据指针DPTR(16位)

在AT89S52单片机中,内含2个16位的数据指针寄存器DPTR0和DPTR1。数据指针寄存器DPTR0和DPTR1是两个独特的16位寄存器,DPTR既可以作为一个16位寄存器处理,也可以作为两个8位寄存器处理,其高8位用DPH表示,低8位用DPL表示。DPTR主要功能是作为片外数据存储器或I/O寻址用的地址寄存器(间接寻址),故称为数据存储器地址指针。访问片外数据存储器或I/O的指令为:

MOVX A,@DPTR

MOVX @DPTR,A

DPTR寄存器也可以作为访问程序存储器时的基址寄存器。这里访问的是程序存储器中的表格、常数等单元,具体指令如下:

MOVC A,@A+DPTR

JMP   @A+DPTR

对DPTR的读操作,是通过将DPTR中数据传送给数据暂存寄存器S_REGDATA,再通过对S_REGDATA进行读操作来实现的,因此可在进行DPTR数据暂存前,利用选择位dps来对DPTR进行选取,具体结构如图2-6所示。

在对DPTR进行写操作时,实际上是对DPH和DPL进行操作(DPH地址为83H,DPL地址为82H),因此对DPTR进行写操作时需对DPH和DPL分别进行操作。将要写入的数据暂存在S_DATA寄存器中,再通过将S_DATA数据分别写入DPH和DPL来实现的。因此可在S_DATA数据写入前对DPTR0和DPTR1进行选择判断,来实现对DPTR0和DPTR1的写操作,即dps=1时,将S_DATA数据写入DPH1和DPL1;dps=0时,将S_DATA数据写入DPH0和DPL0,具体结构如图2-7所示。

图2-6 DPTR读模块示意图

图2-7 DPTR写模块结构图

在PC指针模块和片外RAM地址模块中,也涉及DPTR的读操作,因此该模块的修改与SFR读模块中的修改类似,同样利用dps来实现DPTR0、DPTR1的选取。

2.5.2 存储器基本知识

1.半导体存储芯片的基本结构

半导体存储芯片采用超大规模集成电路制造工艺,其结构如图2-8所示。

图2-8 存储芯片的基本结构

存储器芯片通过地址总线、数据总线和控制总线与外部连接。地址线是单向输入,数据线是双向输入输出,数据线和地址的位数共同反映存储芯片的容量。例如:地址线为10根,数据线为4根,则芯片容量为210×4=4096=4KB。

控制线主要有读/写控制线与片选线两种。通常主存由多个存储芯片构成,读/写控制线决定芯片进行读/写操作,片选线用来选择存储芯片,如图2-9所示。

图2-9 64KB×8位的存储器

2.半导体存储芯片的分类

根据存储器使用的不同,可以分为只读存储器(ROM)和随机存取存储器(RAM)。

(1)RAM随机存取存储器(Random Access Memory)

CPU根据RAM的地址将数据随机地写入或读出,电源切断后,所存数据全部丢失。按照集成电路内部结构不同,RAM又分为两类:

① SRAM(静态RAM,Static RAM)

静态RAM速度非常快,只要电源存在内容就不会消失。但它的基本存储电路是由6 个MOS管组成1位。集成度较低,功耗也较大。一般高速缓冲存储器(Cache Memory)用它组成。

② DRAM(动态RAM,Dynamic RAM)

DRAM内容会在几秒之后自动消失,因此必须周期性地在内容消失之前进行刷新(Refresh)。由于他的基本存储电路由一个晶体管及一个电容组成,因此它的集成成本较低,另外耗电也少,但需要刷新电路不断刷新。

(2)ROM只读存储器(Read Only Memory)

ROM存储器将程序及数据固化在芯片中,数据只能读出不能写入,电源关掉,数据也不会丢失。ROM按集成电路的内部结构可以分为:

① EPROM可擦除、可编程(Erasable PROM)

可编程固化程序,且在程序固化后可通过紫外线光照擦除,以便重新固化新数据。

② EEPROM电可擦除可编程(Electrically Erasable PROM)

可编程固化程序,并可利用电压来擦除芯片内容,以便重新固化新数据。这种存储器不但能够读取已存放在其各个存储单元中的数据,而且还能够随时写进新的数据,或者改写原来的数据。

(3)Flash存储器

AT89S52单片机的程序存储器采用的是Flash存储器,它是Intel公司于1988年推出的一种新型半导体存储器,具有非挥发存储特性,可作为新一代可编程只读存储器。它的最大优点是集成度高、价格便宜,不需要脱机擦写,可在线编程。

Flash存储器可在几秒钟的时间内完成全片的擦除,其典型值为10µs/byte;价格上,Flash存储器具有很大的优势,相同容量的Flash存储器价格是通用EEPROM的一半。Flash存储器另外一个突出的优点是支持在线编程,允许芯片在不离开电路板或不离开设备的情况下,实现固化和擦除操作,同时具有较强的抗干扰能力,允许电源有10%的噪声波动。

2.5.3 AT89S52单片机存储器结构

AT89S52有单独的程序存储器和数据存储器,具有64KB寻址的寻址范围。程序存储器和数据存储器又包括片内和片外两个部分。因此,单片机的存储器结构共分片内程序存储器、片外程序存储器、片内数据存储器和片外数据存储器4个部分。

1.程序存储器

一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之,程序相当于给微处理器处理问题的一系列命令。设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。

AT89S52具有64KB程序存储器寻址空间,它用于存放用户程序、数据和表格等信息,程序存储器的结构如图2-10所示。

图2-10 AT89S52程序存储器的结构

程序存储器是以程序计数器(PC)作地址指针的。AT89S52单片机的程序计数器(PC)为16位,因此可以寻址到的地址空间为64KB。AT89S52片内片外的程序存储器在统一逻辑空间中,地址从0000H~FFFFH,共有64KB范围。其中片内有8KB的程序存储单元,其地址为0000H~1FFFH,片外地址为2000H~FFFFH。

引脚接高电平时,程序从片内程序存储器0000H开始执行,即访问片内存储器。当PC值超出片内ROM容量时,会自动转向片外程序存储器空间执行。引脚接低电平时,迫使系统全部执行片外程序存储器0000H开始存放的程序。

AT89S52单片机在复位后程序计数器(PC)的内容为0000H,所以系统必须从0000H单元开始取指令,执行程序。0000H是系统的启动地址,用户在设计程序时一般会在该单元中存放一条绝对跳转指令,主程序则从跳转到的新地址处开始安放。

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

数据存储器也称为随机存取数据存储器。AT89S52单片机的数据存储器在物理上和逻辑上都分为两个地址空间,一个内部数据存储区和一个外部数据存储区。内部数据存储器使用MOV指令访问,外部数据存储器使用MOVX指令访问。外部数据存储器的最大地址空间为64KB,地址范围为0000H~FFFFH。

AT89S52有256字节片内数据存储器。地址为00H~FFH。这256个单元共分为两部分。一是地址从00H~7FH单元(共128个字节)为用户数据RAM。二是80H~FFH地址单元(也是128个字节)为特殊寄存器(SFR)单元。高128字节与特殊功能寄存器重叠,也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。从图2-11中可清楚地看出它们的结构分布。

图2-11 内部数据存储器结构图

在00H~1FH共32个单元被均匀地分为四块,每块包含8个8位寄存器,均以R0~R7来命名,称这些寄存器为通用寄存器。这四块中的寄存器都称为R0~R7,那么在程序中怎么区分和使用它们呢?根据前面我们讲过的程序状态字寄存器(PSW)来管理它们,CPU只要定义这个寄存的PSW的第3和第4位(RS0和RS1),即可选中这四组通用寄存器。

内部数据存储器的20H~2FH单元为位寻址区,可作为一般单元用字节寻址,也可对它们的位进行寻址,位寻址区地址如表2-3所示。AT89S52单片机有一个功能很强的位处理器,它实际上是一个完整的1位微计算机,在开关决策、逻辑电路仿真和实时控制方面得到广泛应用。

表2-3 RAM位寻址区地址表

位寻址16个RAM单元具有双重功能,既可以像普通RAM单元一样按字节存取,也可以对每个RAM单元中的任何一位单独存取,简称位寻址。20H~2FH用作位寻址时,共有16×8=128位,每位都分配了一个特定地址,即00H~7FH。这些地址称为位地址,CPU能直接寻址这些位,执行例如置1、清0、求反、转移、传送和逻辑等操作。我们常称AT89S52具有布尔处理功能,布尔处理的存储空间指的就是这些位寻址区。位寻址过程中经常用到位寻址,详细内容将在第3章中介绍。

3. 中断服务程序的入口地址

在程序存储区中,为中断服务程序保存了一段中断服务程序的入口地址:其中一组特殊单元是0003H~0032H,各个单元各有用途,它们被分为五段,专门留给中断服务程序使用,被称为中断矢量区。AT89S52共有8个中断源,6个中断矢量,它们的定义如表2-4所示。

从表中可以看到,各中断矢量地址的间隔为8个字节,即为每个中断服务程序留有8个字节的存储空间。中断响应后,按中断的类型,自动转到各自的中断区去执行程序。因此以上地址单元不能用于存放程序的其他内容,只能存放中断服务程序。但是通常情况下,每段只有8个地址单元是不能存下完整的中断服务程序的,因而一般也在中断响应的地址区安放一条无条件转移指令,指向程序存储器的其他真正存放中断服务程序的空间,这样中断响应后,CPU读到这条转移指令,便转向相应的地方去继续执行中断服务程序,可以认为中断矢量区实际存放的是中断服务程序的入口地址。

表2-4 中断服务程序的入口地址

另一组特殊单元是0000H~0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,因此需要在程序存储器的0000H~0002H存储单元存储一条跳转指令,使程序的执行跳过中断矢量区而转到程序的真正起始地址。

4.特殊功能寄存器SFR(Special Function Register)

特殊功能寄存器是指有特殊用途的寄存器集合,也称为专用寄存器,本质上是一些具有特殊功能的片内RAM单元,反映单片机的运行状态,很多功能也通过特殊功能寄存器来定义和控制程序的执行。

AT89S52单片机内部高128字节地址(80~FFH)分配给特殊功能寄存器。这个地址空间和芯片内数据存储器的高128字节地址完全重叠,但两者在物理硬件上是完全独立的,用寻址方式来区分这个完全重叠的地址空间。使用直接寻址方式访问这个地址空间时,访问的是特殊功能寄存器;使用间接寻址方式访问这个地址空间时,访问的是数据存储器。

AT89S52有32个特殊功能寄存器,它们被离散地分布在内部RAM的80H~FFH地址中,这些寄存的功能已作了专门的规定,用户不能修改其结构。这些特殊功能寄存器大体上分为两类,一类与芯片的引脚有关,另一类作片内功能的控制用。与芯片引脚有关的特殊功能寄存器是P0~P3,它们实际上是4个八位锁存器(每个I/O口一个),每个锁存器附加有相应的输出驱动器和输入缓冲器就构成了一个并行口。AT89S52共有P0~P3四个这样的并行口,可提供32根I/O线,每根线都是双向的,并且大都有第二功能,其余用于芯片控制的寄存器中。表2-5是按照寄存器地址的顺序排列的,这些寄存器的地址没有占满80~FFH地址单元,留有一些空闲的存储单元。对这些空闲的存储单元用户不可以访问,表2-5中标记*的特殊功能寄存器既可以按位又可以按字节寻址,其余则不能按位寻址。

表2-5 特殊寄存器SFR名称、符号、地址和复位值

5.几个注意问题

(1)地址的重叠性

单片机中的所有存储器都必须分配地址,可以寻址的地址范围为64KB,数据存储器与程序存储器都占用相同的地址。

程序存储器中片内片外0000H~0FFFFH低4KB地址完全重叠,但是我们使用EA引脚进行区分:=0时,选择片外,EA=1时,选择片内,这样就完全区分开来了。

数据存储器中片内外0000H~00FFH的256个单元地址完全重叠,片内外数据的访问采用不同指令来区分:MOV指令访问片内数据存储器,MOVX指令访问片外数据存储器。

(2)程序存储器(ROM)与数据存储器(RAM)的区分

程序存储器(ROM)与数据存储器(RAM)的区分在使用上是严格区分的,程序存储器只能放置程序指令及常数表格,对程序存储器中数据的访问只可以使用MOVC指令。而数据存储器则存放数据,片内外的操作指令分别用MOV、MOVX进行操作。

(3)位地址空间的区域划分

片内RAM中的20H~2FH的128位,以及SFR中的位地址,这些位寻址单元与位指令集构成了位处理器系统。

2.5.4 AT89S52单片机并行I/O端口

学习单片机知识一定要掌握单片机I/O 口的功能。I/O端口又称为I/O接口,也叫做I/O通道或I/O通路,是单片机对外部实现控制和信息交换的必经之路。单片机I/O端口是数据输入缓冲、数据输出驱动及锁存多项功能I/O电路。该引脚可作输入用,也可作输出用,由用户用软件进行决定,由单片机来指挥分析运算协调处理。

AT89S52单片机有P0、P1、P2和P3四个8位并行I/O端口,共占32根引脚,每一个I/O端口都能独立地用作输入或输出。每个端口包括一个锁存器、一个输出驱动器和输入缓冲器(作输出时数据可以锁存,作输入时数据可以缓冲)。I/O端口有串行和并行之分,串行I/O端口一次只能传送一位二进制信息,并行I/O端口一次能传送一组二进制信息。

1.并行I/O端口

P0口为三态双向口,能驱动8个LS型的TTL负载。P0口作通用I/O口时,由于输出级是漏极开路,故用它驱动NMOS电路时需外加上拉电阻。

P1、P2、P3口为准双向口,负载能力为4个LS型的TTL负载路。准双向口的输入操作和输出操作的本质不同,输入操作是读引脚状态,输出操作是对口锁存器的写入操作。由于它们的输出级内部有上拉电阻,因此组成系统时无需外加上拉电阻。

四个并行I/O端口作为通用I/O口使用时,共有写端口、读端口和读引脚三种操作方式。写端口实际上就是输出数据,是将累加器A或其他寄存器中数据传送到端口锁存器中,然后由端口自动从端口引脚线上输出。读端口不是真正的从外部输入数据,而是将端口锁存器中的输出数据读到CPU的累加器。读引脚从端口引脚线上读入外部的输入数据,是真正对外部输入数据的操作,端口的上述三种操作实际上是通过指令或程序来实现的。

(1)P0端口

P0(P0.0~P0.7、32~39脚)端口字节地址80H,位地址80H~87H。P0口包括一个输出锁存器、两个三态缓冲器、一个输出驱动电路和一个输出控制电路。输出驱动电路由一对FET(场效应管)组成,其工作状态受输出控制电路的控制。控制电路包括:一个与门、一个反相器和一路模拟转换开关(MUX)。P0口位结构如图2-12所示。

P0端口有两种功能:地址/数据分时复用总线和通用I/O接口。具体功能由模拟转换开关MUX控制:当MUX位于图示位置时,P0口做地址/数据分时复用总线使用;当MUX位于另外一个位置时,P0口做通用I/O接口使用。多路开关的切换由内部控制信号控制。

图2-12 P0口位结构

◆ 输出操作(写操作)

当P0口用作输出口使用时,输出数据写入各口线电路的锁存器。CPU内部的写脉冲加在D触发器的CP端,数据写入锁存器,并向端口引脚输出,锁存器的输出与引脚的输出状态是一致的。作通用输出口时,输出级属漏极开路,在驱动NMOS电路时应外接上拉电阻。

◆ 输入操作(读操作)

输入操作有读引脚和读锁存器之分,当P0口作为输入口使用时,应区分读引脚和读锁存器(端口)两种情况,电路中有两个用于读入的三态缓冲器。

读引脚:读芯片引脚的数据,在端口处于输入状态的情况下读引脚。作输入口使用时,先向锁存器写1,这时输出极2个FET截止,可用作高阻抗输入读引脚,这时使用下方的数据缓冲器,由“读引脚”信号把缓冲器打开,把端口引脚上的数据经缓冲器通过内部总线读进来。MOV类传送指令进行端口读操作就是属于这种情况。

读锁存器:通过上方的缓冲器读锁存器Q端的状态。在端口已处于输出状态的情况下读锁存器,此时不能正常读取引脚的信号,只能读取锁存器的状态。这样安排的目的是适应对端口进行“读-修改-写”操作指令的需要。例如“ANL P0,A”就属于这类指令,执行时先读入P0口锁存器中的数据,然后与A的内容进行逻辑“与”,再把结果送到P0口输出。

P0口在实际应用中,多作为地址/数据总线使用,这要比作一般I/O口应用简单。此时,可分为两种情况:一种情况是从P0输出地址或数据,这时控制信号应为高电平“1”,转换开关把反相器输出端与下拉FET接通,同时与门开锁,输出的地址或数据信号通过与门去驱动上提FET,又通过反相器去驱动下拉FET。另一种情况是从P0输入数据,这时信号仍应从输入缓冲器进入内部总线。

(2)P1端口

P1口字节地址90H,位地址90H~97H。P1口通常是用作通用I/O使用的,在电路结构上与P0口有一些不同之处。首先,它不再需要多路开关MUX;其次,电路内部已有上拉电阻,与场效应管共同组成输出驱动电路,电路的输出不是三态的,所以P1口是准双向口,P1口用作输出口使用时,已能向外提供推拉电流负载,无须再外接上拉电阻。

◆ P1口作通用I/O端口使用

P1口位结构如图2-13所示,P1口的每一位口线能独立用作输入线或输出线。作输出时,如将“0”写入锁存器,场效应管导通,输出线为低电平,输出为“0”。输入时,先将“1”写入口锁存器,使场效应管截止,该口线由内部上拉电阻提拉成高电平,同时也能被外部输入源拉成低电平,即当外部输入“1”时该口线为高电平。而输入“0”时,该口线为低电平。

图 2-13 P1口位结构

CPU对于P1口不仅可以作为一个 8位口(字节)来操作,也可以按位来操作。有关字节操作的指令有:

输出:  MOV P1,A      ;P1←A

     MOV P1,#data    ;P1←#data

     MOV P1,direct    ;P1←direct

输入:  MOV A,P1      ;A←P1

     MOV direct,P1    ;direct←Pl

P1口不仅可以以8位一组进行输入、输出操作,还可以逐位分别定义各口线为输入线或输出线。

ORL  P1,#0 0 0 0 0 0 1 0 B      ;使P1.l位输出l,而使其余各位不变

ANL  P1,#1 1 1 1 1 1 0 1 B      ;使P1.l位输出0,而使其余各位不变

有关位操作的指令有:

置位:  SETB P1.i       ;P1.i←1,i取值0~7

清除:  CLR  P1.i       ;P1.i←0

输入:  MOV  P1.i,C      ;P1.i←CY

输出:  MOV  C,P1.i      ;CY←P1.i

判跳:  JB  P1.i,rel     ;P1.i=1,i取值0~7,跳转

逻辑运算: ANL C,P1.i      ;CY←(P1.i·CY)

◆ P1口其他功能

AT89S52的P1.0和P1.1是多功能引脚,P1.0可作定时器/计数器2的外部计数触发输入端T2,P1.1可作定时器/计数器2的外部控制输入端T2EX。

(3)P2端口

P2口字节地址A0H,位地址A0H~A7H。P2口是一个8位准双向I/O口,具有两种功能。一是作通用I/O口用,与P1口相同。二是作系统扩展外部存储器的高8位地址总线,输出高8位地址,与P0口一起组成16位地址总线。P2口位结构如图2-14所示,在结构上,P2口比P1口多一个输出控制部分。

图2-14 P2口位结构

◆ P2口作通用I/O端口使用

当P2口作通用I/O端口使用时,是一个准双向口,此时转换开关MUX倒向左边,输出级与锁存器接通,引脚可接I/O设备,其输入输出操作与P1口完全相同。在无外接程序存储器而有片外数据存储器的系统中,P2口使用可分为两种情况:

若片外数据存储器的容量小于256字节:可使用MOVX A、@Ri及MOVX @Ri,A类指令访问片外数据存储器,这时P2口不输出地址,P2口仍可作为I/O口使用。

若片外数据存储器的容量大于256字节:可使用MOVX A、@DPTR及MOVX @DPTR,A类指令访问片外数据存储器,P2口需输出高8位地址。在片外数据存储器读、写选通期间,P2口引脚上锁存高8位地址信息,但是在选通结束后,P2口内原来锁存的内容又重新出现在引脚上。

使用MOVX A,@Ri及MOVX@Ri,A类访问指令时,高位地址通过程序设定,只利用P1、P3甚至P2口中的某几根口线送高位地址,从而保留P2口的全部或部分口线作I/O口用。

◆ P2口作地址总线使用

当系统中接有外部存储器时,P2口用于输出高8位地址A15~A8。这时在CPU的控制下,转换开关MUX倒向右边,接通内部地址总线。

(4)P3端口

P3口字节地址B0H,位地址B0H~B7H。P3口也是一个8位准双向I/O口,既可以字节操作,也可以位操作;既可以8位口操作,也可以逐位定义口线为输入线或输出线;既可以读引脚,也可以读锁存器,实现“读一修改一输出”操作。P3口的位结构如图2-15所示。

图2-15 P3口位结构

P3口除具有与P1口同样的功能外,还具有第二功能(表2-6)。

表2-6 P3口的第二功能

2.串行I/O端口

AT89S52有一个全双工的可编程串行I/O端口。这个串行I/O端口既可以在程序控制下将CPU的8位并行数据变成串行数据一位一位地从发送数据线TXD发送出去,也可以把串行接收到的数据变成8位并行数据送给CPU,而且这种串行发送和串行接收可以单独进行,也可以同时进行。

AT89S52串行发送和串行接收利用了P3口的第二功能,即利用P3.1 引脚作为串行数据的发送线TXD和P3.0引脚作为串行数据的接收线RXD,如表2-6所示。串行I/O口的电路结构还包括串行口控制器SCON、电源及波特率选择寄存器PCON和串行数据缓冲器SBUF等,它们都属于特殊功能寄存器SFR。其中PCON和SCON用于设置串行口工作方式和确定数据的发送和接收波特率,SBUF实际上由两个8位寄存器组成,一个用于存放欲发送的数据,另一个用于存放接收到的数据,起着数据缓冲的作用。

2.6 单片机的工作时序

时钟电路用于产生单片机工作所需要的时钟信号,控制单片机按照一定的节拍运行,时序规定了指令执行过程中各控制信号之间的相互关系。在时钟信号的控制作用下,单片机就是一个复杂的同步时序电路,严格地按照规定的时序进行工作。

要给计算机CPU提供时序,就需要相关的硬件电路,即振荡器和时钟电路。AT89S52单片机内部有一个高增益反相放大器,这个反相放大器构成振荡器,但要形成时钟,外部还需要加一些附加电路。

AT89S52的时钟有两种方式,一种是片内时钟振荡方式,需在18和19脚外接石英晶体(2~12MHz)和振荡电容,振荡电容的值一般取10p~30pF。另外一种是外部时钟方式,即将XTAL2悬空,外部时钟信号从XTAL1脚输入。AT89S52的时钟接法如图2-16所示。

图2-16 AT89S52的时钟接法

2.6.1 机器周期和指令周期

计算机在统一的时钟脉冲控制下一拍一拍地进行计算,由于指令的字节数不同,取这些指令所需要的时间也就不同,即使是字节数相同的指令,由于执行操作有较大的差别,不同的指令执行时间也不一定相同。时序是用定时单位来说明的,AT89S52的时序定时单位共有4个,从小到大依次是:振荡周期、时钟周期、机器周期、指令周期。

1.振荡周期

振荡周期指为单片机提供定时信号的振荡源的周期,即晶体振荡器直接产生的振荡信号,用Tosc表示。振荡脉冲的周期也叫做节拍,用P表示。

2.时钟周期

时钟周期是振荡周期的两倍,是对振荡器2分频的信号。时钟周期又称状态周期,用S来表示,一个时钟周期,分为P1和P2两个节拍。P1节拍通常完成算术逻辑操作,P2节拍通常完成内部寄存器间数据的传递。

3.机器周期

在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。

一般情况下,一个机器周期由若干个S周期(状态周期)组成。AT89S52单片机的一个机器周期由6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),两个节拍定义为一个状态周期(用S表示),一个机器周期由6个时钟周期(12个振荡周期)组成,即S1~S6。

4.指令周期

指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其他的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。

通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。时钟周期、机器周期、指令周期之间的关系图如图2-17所示。

图2-17 AT89S52时钟信号和定时单位

综合以上分析,时序之间的关系如下:

振荡周期Tocs=1/fosc,fosc为振荡频率;

时钟周期S=2Tosc

机器周期=12Tosc

指令周期=1~4个机器周期。

若AT89S52单片机外接晶振为12MHz时,则单片机的四个周期的具体值为:

振荡周期=1/12MHz=1/12µs=0.0833µs;

时钟周期=1/6µs=0.167µs;

机器周期=1µs;

指令周期=1~4µs。

2.6.2 时序分析

单片机中指令的执行包括取指和执行两个阶段。取指阶段,CPU首先从程序寄存器中取出指令操作码及操作数放入IR寄存器中;执行阶段将IR寄存器中的指令作码进行译码,产生一系列控制信号来执行这条指令。

AT89S52单片机指令系统中,按它们的长度可分为单字节指令、双字节指令和三字节指令。执行这些指令需要的时间是不同的,也就是它们所需的机器周期是不同的。图2-18为AT89S52单周期指令的时序。

图2-18 AT89S52单周期指令的时序

图中的ALE脉冲是为了锁存地址的选通信号,显然,每出现一次该信号单片机即进行一次读指令操作。从时序图中可看出,该信号是时钟频率6分频后得到,在一个机器周期中,ALE信号两次有效,第一次在S1P2和S2P1期间,第二次在S4P2和S5P1期间。接下来我们对单周期指令时序加以说明。

1.单字节单周期指令

单字节单周期指令时序图如图2-18(a)所示。这类指令操作码只有一个字节,AT89S52从读取指令代码到完成指令的执行只需要一个机器周期,因此只需要进行一次读指令操作。单片机在ALE第一次有效(S2P1)时从程序存储器中取出指令,并送到指令寄存器IR中,开始执行指令。由于是单字节单周期指令,CPU在ALE第二次有效(S4P2)的时候,封锁程序计数器PC,PC并不加1,那么CPU第二次读出的还是原指令,属于一次无效的读操作。

2.双字节单周期指令

双字节单周期指令时序图如图2-18(b)所示。 这类指令需要分两次从程序存储器中读出操作码。ALE在第一次有效时读出指令操作码,CPU译码后确定是双字节指令,程序计数器PC加1,并在ALE第二次有效时读出指令的第二个字节,并最后完成指令的执行。

2.7 单片机的复位电路

复位是单片机的初始化操作,其主要功能是把PC初始化为0000H ,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死机状态时,也需复位,使单片机重新启动。

RST是复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡脉冲周期(即2个机器周期)以上。CPU在第二个机器周期内执行内部复位操作,以后每一个机器周期重复一次,直至RST端电平变低。复位期间不产生ALE及PSEN信号。内部复位操作使堆栈指示器SP为07H,各端口都为1(P0~P3口的内容均为0FFH),特殊功能寄存器都复位为0,但不影响RAM的状态。当RST引脚返回低电平以后,CPU从0地址开始执行程序。

AT89S52单片机的复位电路如图2-19所示。在RESET(图中表示为RST)输入端出现高电平时实现复位和初始化。

图2-19 复位电路

复位操作有上电自动复位和按键手动复位两种方式。

上电自动复位是通过外部复位电路的电容充电来实现的,其电路如图2-19(a)所示。这样,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就完成了系统的复位、初始化。

按键手动复位是通过使复位端经电阻与Vcc电源接通而实现的,它兼具上电复位功能。其电路如图2-19(b)所示。

除对PC外,复位操作还对其他一些专用寄存器有影响,它们的复位状态如表2-7所示。

表2-7 特殊寄存器SFR的复位值

续表

【本章小结】

本章以MCS-51系列的AT89S52单片机为基础,详细讲述了单片机的系统结构,包括单片机的组成、总线、指令和指令系统、外部引脚及功能、内部结构、工作时序等,是本书最为重要的一个章节。通过本章的学习,基本理解和掌握了单片机的基础知识和基本原理,为后面学习和掌握单片机的各个功能单元打下基础。

2.8 习题

1.计算机的总线有哪些?MCS-51引脚中有多少I/O线?控制线各有什么功能?

2.单片机的内部由哪几个部分组成?

3.简述累加器的ACC的作用。

4.简述程序状态字各位的功能,如何由RS1、RS0的值来确定R0~R7的物理地址?

5.决定程序执行顺序的寄存器是哪个?它是几位寄存器?

6.什么叫堆栈?堆栈指针寄存器SP的作用是什么?MCS-51单片机的堆栈区应建立在哪里?

7.DPRT是什么寄存器?它的作用是什么?

8.片内RAM低128个单元划分为哪3个主要部分?各部分的主要功能是什么?

9.8051单片机有多少个特殊功能寄存器?它们可以分为几组?各完成什么主要功能?

10.MCS-51单片机的4个并口各有什么功能?

11.什么是指令周期、机器周期、时钟周期、振荡周期?它们之间有什么联系?

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈