单片机原理及应用:基于C51+Proteus仿真
上QQ阅读APP看书,第一时间看更新

1.3 51单片机基本知识

1.3.1 51单片机简介

51单片机基本结构如图1-1所示,它把作为控制应用所必需的基本功能部件都集中在一个尺寸有限的集成电路芯片上。

图1-1 51单片机的基本结构

51单片机有如下部件和特性:

1)8位微处理器(CPU);

2)程序存储器(4KB Flash ROM),可进行1000次重复擦写和三级加密;

3)128B数据存储器(RAM);

4)26个特殊功能寄存器(SFR);

5)4个8位可编程并行I/O端口(P0口、P1口、P2口、P3口);

6)1组全双工可编程串行通道;

7)2个可编程的16位定时器/计数器;

8)1个看门狗定时器;

9)5个中断源;

10)低功耗模式有空闲和掉电模式,且具有断电模式下的中断恢复模式;

11)灵活的在系统程序设计(ISP)。

51单片机的内部结构框图如图1-2所示。

图1-2 AT8951单片机的内部结构框图

1.3.2 51单片机的引脚介绍

51单片机实际有效的引脚为40个,主要有三种封装形式,其引脚图可参见图1-3:图1-3a为PDIP封装形式,这是普通40脚塑封双列直插形式;图1-3b为PLCC封装形式,这种形式是具有44个“J”形脚(其中有4个空脚)的方形芯片,使用时需要插入与其相配的方形插座中;图1-3c为TQFP封装形式,这种形式也具有44个“J”形脚(其中有3个空脚,2个接地端),但其体积更小、更薄,注意,它是一种不同封装形式的引脚,排列不一致,使用时一定要注意。

图1-3 51单片机的引脚图

a)PDIP40封装的51单片机 b)PLCC44封装的51单片机 c)TQFP44封装的51单片机

为了尽可能缩小体积,减少引脚数,51单片机/S52单片机的不少引脚还具有第二功能(也称为“复用功能”)。

1.电源及时钟引脚

VCC:电源端。

GND:接地端。

XTAL1:接外部晶振的一端。在单片机内部,它是构成片内振荡器的反相放大器的输入端。当采用外部时钟时,外部时钟振荡信号直接送入此引脚作为驱动端,即把此信号直接接到内部时钟发生器的输入端,如图1-4所示。

XTAL2:接外部晶振的另一个端。在单片机内部,它是构成片内振荡器的反相放大器的输出端。当采用外部时钟信号时,此引脚应悬空,如图1-5所示。

图1-4 内部振荡器的接法

图1-5 外部振荡器的接法

2.控制引脚

RST:复位输入端。在振荡器运行时,在此引脚上出现两个机器周期以上的高电平将使单片机复位。看门狗定时器(Watchdog)溢出后,该引脚会保持98个振荡周期的高电平,也会使单片机复位。在AUXR寄存器中的DISRTO位可以用于屏蔽这种功能。DISRTO位的默认状态,是复位高电平输出有效。

:地址锁存允许/编程脉冲信号。在访问外部存储器时,这个输出信号用于锁存低字节地址。在对Flash内存编程时,这条引脚用于输入编程脉冲PROG。一般情况下,ALE是振荡器频率的6分频信号,可用于外部定时或时钟。但是,在对外部数据存储器每次存取中,会跳过一个ALE脉冲。在需要时,可以把AUXR寄存器的0位置为“1”,从而屏蔽ALE的工作;而只有在MOVX或MOVC指令执行时ALE才被启动。在单片机处于外部执行方式时,对ALE屏蔽位置“1”并不起作用。

:外部程序存储器的选通信号。它用于读外部程序存储器的选通信号,低电平有效。当AT89系列单片机在执行来自外部程序存储器的指令时,每一个机器周期被启动2次。在对外部数据存储器的每次存取中,不出现。

:外部程序存储器访问允许端/编程电源输入端。接地时,单片机从地址为0000H~FFFFH的外部程序内存中读取代码。接到VCC,单片机先从内部程序内存中读取代码,然后自动转向外部。在对Flash内存编程时,这条引脚用于接收12V编程电压VPP。

3.I/O口引脚

P0.X~P3.X是51单片机与外界联系的4个8位双向并行I/O端口,引脚分配如下:

P0.0~P0.7:P0口的8位漏极开路的双向I/O口。P0在当作I/O用时可以推动8个LS的TTL负载。如果当引脚为低电平时(即取用外部程序代码或数据存储器),P0口就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。设计者必须外加一锁存器将端口0送出的地址栓锁使其成为A0~A7地址,再配合P2口所送出的A8~A15地址合成一套完整的16位地址总线,而定址到64 KB的外部存储器空间。

P2.0~P2.7:P2口的8位内部接有上拉电阻的准双向I/O口。每一个引脚可以驱动4个LS的TTL负载,将P2口的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当作一般I/O端口使用外,若是在51单片机扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当作I/O来使用了。

P1.0~P1.7:P1口的8位内部接有上拉电阻的准双向I/O口。其输出缓冲器可以驱动4个LS TTL负载,同样地,若将端口1的输出设为高电平,便是由此端口来输入数据。P1.5/MOSI、P1.6/MISO和P1.7/SCK可用于对片内Flash存储器串行编程和校验,它们分别是串行数据输入、输出和移位脉冲引脚。

P3.0~P3.7:P3口的8位内部接有上拉电阻的准双向I/O口。其输出缓冲器可以驱动4个TTL负载,同时还具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。

1.3.3 51单片机的中央处理器(CPU)

中央处理器CPU是单片机的核心,从功能上看,CPU主要由运算部件和控制部件组成。CPU功能可概括为以下三条:

1)产生控制信号;

2)控制数据传送;

3)对输入数据进行算术逻辑运算及位操作。

1.运算部件

运算部件是用来对数据进行算术运算和逻辑操作的执行部件,包括算术逻辑单元ALU(Arithmetic Logic Unit)、累加器ACC(Accumulator)、暂存器、程序状态字寄存器PSW(Program Status Word)、通用寄存器和BCD码运算调整电路等。为了提高数据处理和位操作能力,片内增加了一个通用寄存器区和一些专用寄存器,而且还包含一个布尔处理器,可以执行置位、清零、求补、取反、测试、逻辑与、逻辑或等操作,为单片机的应用提供了极大的便利。

(1)算术逻辑单元ALU

ALU是用于对数据进行算术运算和逻辑操作的执行部件,由加法器和其他逻辑电路(移位电路和判断电路等)组成。在控制信号的作用下,它能完成“加、减、乘、除、比较”等算术运算和“与、或、异或”等逻辑运算以及循环移位操作、位操作等功能。此外,通过对运算结果的判断,还能影响程序状态标志寄存器的有关标志位。

(2)累加器ACC

累加器ACC是一个8位寄存器,指令助记符可简写为“A”,它是CPU工作中最繁忙、最活跃的一个寄存器。CPU的大多数指令,都要通过累加器ACC与其他部件交换信息。

(3)暂存器

暂存器用于暂存进入运算器之前的数据,它不能通过编程访问。设置暂存器的目的是暂时存放某些中间过程所产生的信息,以避免破坏通用寄存器的内容。

(4)布尔(位)处理器

除对字节(Byte)进行操作外,51单片机借用PSW中的CY(进位标志位)可以直接对位(Bit)进行操作,在进行位操作时,CY就类似进行字节操作的ACC用作数据源或存放结果。通过位操作指令可以实现置位、清零、取反以及位逻辑运算等操作。

运算部件中的程序状态字寄存器PSW地位特殊,下面单独介绍。其他专用寄存器则放在存储器结构中逐一介绍。

(5)程序状态字寄存器

程序状态字(PSW)寄存器是一个8位的寄存器,它包含了各种程序状态信息,相当于一个标志寄存器,以供程序查询和判别。PSW的标志见表1-3。

表1-3 PSW的标志

此寄存器各位的含义如下(其中PSW.1未用)。

CY(PSW.7):进位标志。在执行某些算术和逻辑指令时,它可以被硬件或软件置位或清零。CY在布尔处理机中被认为是位累加器,其重要性相当于一般中央处理器中的累加器A。

AC(PSW.6):辅助进位标志。当进行加法或减法操作而产生由低4位数向高4位数进位或借位时,AC将被硬件置位,否则就被清零。AC被用于BCD码调整,详见指令系统中的“DA A”指令。

F0(PSW.5):用户标志位。F0是用户定义的一个状态标记,用软件来使它置位或清零。该标志位状态一经设定,可用软件测试F0,以控制程序的流向。

RS1、RS0(PSW.4、PSW.3):寄存器区选择控制位。可以用软件来置位或清零以确定工作寄存器区。RS1、RS0与寄存器组的对应选择关系见表1-4。

表1-4 工作寄存器组选择

OV(PSW.2):溢出标志。带符号加减运算中,当超出了累加器A所能表示的符号数有效范围(-128~+127)时,即产生溢出,OV=1,表明运算结果错误。如果OV=0,表明运算结果正确。

P(PSW.0):奇偶标志。每个指令周期都由硬件来置位或清零,以表示累加器A中1的位数的奇偶数。若1的位数为奇数,P置1,否则P清零。P标志位对串行通信中的数据传输有重要的意义,在串行通信中常用奇偶校验的办法来检验数据传输的可靠性。在发送端可根据P的值对数据进行奇偶置位或清零。

PSW.1:程序状态字的第1位,该位的含义没有定义,若用户要使用这一位,可直接使用PSW.1的位地址。

PSW寄存器除具有字节地址外,还具有位地址,因此,可以对PSW中的任一位进行操作,这无疑大大提高了指令执行的效率。

2.控制部件

控制部件是用来统一指挥和控制计算机进行工作的部件。其功能是从存储器中逐条获取指令,进行指令译码,并通过定时和控制电路,在规定的时刻发出各种操作所需的全部内部控制信息及CPU外部所需的控制信号,使各部分按照一定的节拍协调工作,完成指令所规定的各种操作。它由指令部件、时序部件和操作控制部件组成。

(1)指令部件

指令部件是一种能对指令进行分析、处理并产生控制信号的逻辑部件,也是控制器的核心。通常,它由程序计数器PC(Program Counter)、指令寄存器IR(Instruction Register)和指令译码器等组成。这三个寄存器用户都不能直接访问。

程序计数器PC用于存放CPU要执行的下一条指令的地址。程序中的每条指令都有自己的存放地址(指令都存放在ROM区的某一单元),CPU要执行某条指令时,就把该条指令的地址码(即PC中的值)送到地址总线,从ROM中读取指令,当PC中的地址码被送上地址总线后,PC会自动指向CPU要执行的下一条指令的地址。执行指令时,CPU按PC的指示地址从ROM中读取指令,所读取指令码送入指令寄存器中,由指令译码器对指令进行译码,并发出相应的控制信号,从而完成指令所指定的操作。

指令寄存器IR是一个8位寄存器,用于暂时存放指令代码,等待译码。

指令译码器用于对送入指令译码器中的指令进行译码。所谓“译码”,就是把指令转变成执行此指令所需要的电信号。当指令送入译码器后,由译码器对该指令进行译码,根据译码器输出的信号,CPU控制电路定时产生执行该指令所需的各种控制信号,使单片机能够正确执行程序所需要的各种操作。

(2)时序部件

时序部件由时钟电路和脉冲分配器组成,用于产生操作控制部件所需的时序信号。产生时序信号的部件称为“脉冲发生器”或“时序系统”,它由一个振荡器和一组计数分频器组成。振荡器是一个脉冲源,输出频率稳定的脉冲,也称为“时钟脉冲”,为CPU提供时钟基准。时钟脉冲经过进一步的计数分频,产生所需的节拍信号或更长时间的机器周期信号。

(3)操作控制部件

操作控制部件可以为指令译码器的输出信号配上节拍电位和节拍脉冲,也可以和外来的控制信号组合,共同形成相应的微操作控制序列信号,以完成规定的操作。

1.3.4 存储器结构

一般微机通常是程序和数据共用一个存储空间,即ROM和RAM统一编址,属于“冯·诺依曼”(Von Neumann)结构。而单片机的存储器组织结构则把程序存储空间和数据存储空间严格区分开来,即程序存储器ROM和数据存储器RAM分开编址,属于“哈佛”(Harvard)结构。

程序存储器ROM用于固化程序、常数和数据表。数据存储器用于存放程序运行中产生的各种数据并用于堆栈等。

51单片机存储器结构如图1-6所示。

图1-6 51单片机存储器结构

a)程序存储器(ROM)b)片内数据存储器(内RAM)c)片外数据存储器(外RAM)

51单片机存储器在物理结构上分成四个存储空间:片内程序存储器、片外程序存储器、片内数据存储器和片外数据存储器。从用户使用的角度,即从逻辑上考虑,则有三个存储空间:片内外统一编址的64KB程序存储器地址空间(0000H ~ FFFFH)、256B的片内数据存储器地址空间(00H ~ FFH)及片外数据存储器地址空间(0000H ~ FFFFH)。

CPU在访问三个不同的逻辑空间时,通过采用不同形式的指令,来产生相应的存储器选通信号,访问程序存储器使用MOVC指令、访问片内数据存储器使用MOV指令、访问片外数据存储器使用MOVX指令。

1.程序存储器

(1)51单片机程序存储器ROM

它用于存放编好的程序、常数或表格。在正常工作时只可读不可写,掉电后数据不丢失。

1)片内具有4KB的Flash结构的电可擦除只读存储器,与INTEL公司早期产品的紫外线擦除的EPROM结构相比,使用更灵活更方便。

2)外部可以扩展64KB的ROM,以满足一些大程序的需要。建议用户尽量不要外扩ROM,因为当扩展外部ROM的时候,系统要占据单片机的P0口、P2口及P3口的部分口线作为总线。所以在大多数的应用场合,尽量选择片内的Flash内存的容量能够满足实际需要单片机型号,这样不仅可以节省额外的硬件投资、节省单片机的口线资源,更重要的是片内Flash中的程序在下载、烧写时通过“加密”可以得到保护。只有当程序特别大,内部空间无法满足要求时才选择扩展外部ROM。

3)程序内存最低端的地址可以在片内Flash中或在外部ROM中。可以通过单片机/EA的引脚的电平来选择。

例如,在带有4 KB片内Flash的51单片机中,如果把引脚连到VCC,当地址为0000H~0FFFH时,则访问内部Flash;当地址为1000H~FFFFH时,将自动转向外部程序内存。

如果端接地,则只访问外部程序内存,不管是否存在内部Flash内存。

(2)51单片机程序存储器的管理

1)每个ROM单元(Byte)对应一个唯一的16bit的地址编码(Address)。

2)CPU要到某个ROM单元去取指令,是通过把地址编码写入16位的程序计数器PC来实现的,因此AT89系列单片机地址的编码范围(通常称为寻址范围)为:

3)系统复位后,PC的初始值为0000H,以后的取值是CPU根据用户程序的运行流程自动装载的(程序顺序执行时,PC值自动加1;执行转移指令、子程序调用和中断服务程序时,PC值分别等于转移的目标地址、子程序或中断服务程序的入口地址)。

(3)51单片机程序存储器的分配

程序内存的某些单元是保留给系统使用的,这几个单元的配置如图1-7所示。从图1-7可知,单片机复位后,程序计数器PC的内容为0000H,所以CPU总是从0000H单元开始执行程序。

图1-7 程序内存的复位及中断入口配置

从地址0003H开始,系统每隔8个单元为6个中断服务子程序分配有一个固定的入口地址。如外部中断0的入口地址为0003H;定时器0的入口地址为000BH;外部中断1的入口地址为0013H;定时器1的入口地址为001BH;以此类推。

中断响应后,程序指针PC将自动根据中断类型指向这些入口地址的某一个,CPU就从这里开始执行中断服务子程序。

因此从0003H单元开始的这段区域应该保留给中断使用,所以程序设计时在0000H~0002H单元放置一条转移指令,跳过这段区域,直接转到系统主程序,除非系统不使用中断,主程序才可以覆盖这段区域。

2.片内数据存储器

单片机的片内数据存储器结构如图1-8所示。片内数据存储器地址范围是00H~FFH,只有256B,这里仅介绍低128字节区,高128字节区由于被特殊功能寄存器占有,故单独列出介绍。低128字节区主要分为三个区域:工作寄存器组区、位寻址区和用户RAM区。

图1-8 片内数据存储器的结构

(1)工作寄存器区

最低32个单元(地址为00H~1FH)为4个通用工作寄存器组。每个寄存器组含有8个8位寄存器,编号为R0~R7。

程序状态字PSW中的2位RS0、RS1用来确定当前采用哪一个工作寄存器组,其对应关系见前面的表1-4。

在某一时刻只能选用其中的一组寄存器工作,系统复位后,指向工作寄存器组0。如果用户程序不需要4个工作寄存器区,则不用的工作寄存器单元可以作一般的RAM使用。

(2)位寻址区

内部RAM区中的20H~2FH单元(16B)可供位寻址,这16个单元共有128位,每位均可直接寻址,其位地址范围为00H~7FH,具体情况见表1-5。

表1-5 RAM位寻址区地址表

(续)

这些位地址有两种表示方式:一种是采用位地址形式,即00H~7FH;

一种是用单元地址(20H~2FH).位数方式表示。例如,位地址00H~07H也可表示为20H.0~20H.7。

(3)用户RAM区

30H~7FH共有80个字节单元,为字节寻址的内部RAM区,可供用户作为数据存储区。这一区域的操作指令非常丰富,数据处理方便灵活,是非常宝贵的资源。但是,如果堆栈指针初始化时设置在这个区域,就要留出足够的字节单元作为堆栈区,以防止在数据存储时,破坏了堆栈的内容。

堆栈:堆栈是按先进后出或后进先出原则进行读/写的特殊RAM区域。51单片机的堆栈区是不固定的,原则上可设置在内部RAM的任意区域内。实际使用时要根据对片内RAM各功能区的使用情况而灵活设置,应避开工作寄存器区、位寻址区和用户实际使用的数据区,一般将其设在2FH地址单元以后的区域。

堆栈的作用:主要用在子程序调用或中断处理过程中,用于保护断点和现场,实现子程序或中断的多级嵌套处理。在CPU响应中断或调用子程序时,会自动地将断点处的16位返回地址压入堆栈。在中断服务程序或子程序结束时,返回地址会自动由堆栈弹出,并放回到程序计数器PC中,使程序从原断口处继续执行下去。

堆栈除了用于保护断点处的返回地址外,还可以用于保护其他一些重要信息,要注意的是,必须按照“后进先出”的原则存取信息。堆栈也可以作为特殊的数据交换区使用。

确定堆栈的位置:栈顶的位置由专门设置的堆栈指针SP指出。

51单片机的SP是8位寄存器,堆栈属向上生长的,当数据压入堆栈时,SP的内容自动加1,作为本次进栈的指针,然后再存入数据。SP的值随着数据的存入而增加。当数据从堆栈弹出之后,SP的值随之减少。复位时,SP的初值为07H,用户在初始化程序中可以给SP赋新的初值。

(4)特殊功能寄存器

内部RAM的高128字节区是给特殊寄存器使用的,因此也称之为专用寄存器区,其单元地址为80H~FFH。因为这些寄存器的功能已作专门规定,所以称其为专用寄存器或特殊功能寄存器(Special Function Registers),简称SFR。51单片机的SFR的总数为26个,仅占用了80H~0FFH中的很小一部分。SFR是单片机片内资源的控制指挥单元,单片机内部不管集成了多少外围接口部件和功能单元,都是通过SFR进行控制和管理的,因此学习任何一个单片机的功能部件的使用,一定要了解与之相关的SFR,并弄清通过这些SFR如何去控制用户所使用的功能部件。

51系列单片机内的I/O锁存器、定时器、串行口数据缓冲器以及各种控制寄存器和状态寄存器都以特殊功能寄存器的形式出现。它们离散地分布在80H~0FFH的地址空间范围内,具体分布见表1-6。

表1-6 51单片机的SFR在80H~0FFH的离散分布

表1-6列出了51单片机所有的特殊功能寄存器及其地址和初始值。字节地址能被8整除的专用寄存器都可以实现位寻址,个别不能被8整除的专用寄存器也可以实现位寻址。

SFR的使用方法如下:

1)从表1-6可以看出,80H~FFH这128B并不是所有的地址都定义了SFR。在这个区域当中,除了SFR之外剩余的空闲单元,用户不得使用。读这些地址,一般将得到一个随机数据;写入的数据将会无效。

2)必须使用直接寻址方式对SFR进行访问,可使用寄存器名称(是它的符号地址)或地址。

例如:0EOH——累加器的地址;

ACC——累加器的名称。

3)具有位地址和位名称的SFR才可以进行位寻址,位地址有以下4种表示形式:

① 直接使用位地址表示:

例如:0D7H —— PSW最高位的位地址。

② 使用位名称表示:

例如:CY —— PSW最高位的位名称。

③ 使用SFR字节地址和位形式表示:

例如:0D7H.7—— PSW字节地址.最高位。

④ 使用SFR名称和位形式表示:

例如:PSW.7—— PSW名称.最高位。

3.片外数据存储器

片外数据存储器的P0端口作为RAM的地址/数据总线,当外部地址空间小于FFH时,只需P0口作为地址总线即可,P2口可以作为一般的I/O使用。当外部地址空间大于FFH时,则由P2端口传送高8位地址。对片外数据存储器的访问,使用MOVX的间接寻址指令,以区别对内部RAM(片内用MOV)的访问,同时自动产生读/写控制信号RD和WR。

片外RAM做通用RAM使用,主要存放大量采集的或接收的数据、运算的中间数据、最后结果和堆栈数据等。

使用外部RAM同样是要付出占用端口资源为代价的,所以一般情况下不提倡使用外部RAM。

4.地址空间

(1)片外总线结构

从51单片机引脚可以看出,除了电源、复位、时钟输入以及I/O口外,其余的引脚都是为实现系统扩展而设置的。这些引脚构成了片外三总线结构,如图1-9所示。

1)地址总线(AB)。地址总线的宽度是16位,因此可以寻址的范围是64KB。采用分时复用技术,可以对外部64KB的数据存储器或程序存储器直接寻址。它由P0口提供16位地址总线的低8位(A0~A7),由P2口提供地址总线的高8位(A8~A15)。

2)数据总线(DB)。数据总线的宽度是8位,它由P0口提供。

3)控制总线(CB)。控制总线由P3口的第二功能(RXD、TXD、、T0、T1、)和4根独立的控制线(RST、EA、ALE、PSEN)组成。

(2)程序存储器地址空间

程序存储器用于存放编好的程序和表格常数。程序存储器通过16位程序计数器寻址,寻址能力为64 KB,这使得指令能在64KB地址空间内任意跳转。51单片机ROM的地址范围为0000H~0FFFH。

图1-9 51系列单片机片外总线结构图

(3)数据存储器地址空间

1)片内RAM

① 工作寄存器区:51单片机的前32个单元(地址00H~1FH)称为寄存器区。通过对特殊功能寄存器PSW中RS1、RS0两位的编程设置,可选择任一寄存器组为工作寄存器组,方法见前面表1-4。

② 位寻址区:字节地址20H到2FH称为位地址区,共有16B,计128位,每位都有相应的位地址,位地址范围为00H~7FH,见前面表1-5。位寻址区有两种访问方式:一种是按字节访问;另一种是通过位寻址,对位寻址区128位进行位操作。

③ 便笺区:30H~7FH,便笺区共有80个RAM单元,用于存放用户数据或作堆栈区使用。51单片机对便栈区中每个RAM单元是按字节存取的。

④ 特殊功能寄存器(26个):51单片机片内高128B RAM中,有26个特殊功能寄存器(SFR),它们离散地分布在80H~FFH的RAM空间中。访问特殊功能寄存器只允许使用直接寻址方式。特殊功能寄存器见表1-7。

表1-7 特殊功能寄存器

(续)

2)片外RAM

51单片机构成的应用系统当片内RAM不够用时,可在片外部扩充数据存储器。51单片机给用户提供了可寻址64KB(0000H~FFFFH)的外部扩充RAM的能力,至于扩充多少RAM,则根据用户实际需要来确定。

1.3.5 复位电路和时钟电路

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

系统刚接通电源或重新启动时均进入复位状态。当系统处于正常工作状态时,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以实现可靠复位,如图1-10所示,其中TCY为机器周期,等于12个时钟周期。复位后ALE、PSEN均为高电平,各寄存器和程序计数器PC的状态见表1-8。

图1-10 复位电路示意图

表1-8 复位后寄存器的初始状态

单片机的外部复位电路有上电自动复位、按键复位以及外接复位芯片电路等方式。

1.上电自动复位电路自动复位电路

当接通电源的瞬间,RST端与VCC同电位,随着电容上的电压逐渐上升,RST端的电压逐渐下降,于是在RST端便形成了一个正脉冲,其持续时间取决于RC电路的时间常数,单片机在正常工作时,高电平持续2个时钟即可实现系统有效地复位,注意,上电时高电平要维持10ms以上,如图1-11所示。

2.按键复位电路

图1-12是51单片机的上电复位及按键复位电路。上电复位过程同上。当单片机工作过程中需要复位时,按下复位键,复位端RST通过200Ω的电阻与VCC电源接通,使RST引脚为高电平。复位按键弹起后,RST端经10kΩ的电阻接地,完成复位过程。图中VCC是单片机的供电电压,一般为+5V。

图1-11 51单片机的上电复位电路

图1-12 51单片机的上电复位及按键复位电路

3.外接复位芯片电路

为了保证单片机可靠地复位,有时需要外接复位芯片,特别是当单片机处于间歇工作情况的时候,单片机需要频繁的复位,例如,在计算机监测系统中,电池供电的单片机系统由主计算机控制,平时单片机系统处于断电状态(节省电能),当主计算机接通单片机系统电源后,单片机需要可靠的上电复位进入工作状态。为提高复位的可靠性,可选用专用的复位芯片。

1.3.6 时钟电路及时序

1.时钟电路

51单片机的时钟电路主要分为内部振荡方式和外部振荡方式两种接法。

(1)内部振荡方式

51单片机中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器。外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性。如果使用石英晶体,推荐使用30pF+/-10pF,而如使用陶瓷谐振器建议选择40pF+/-10pF。内部振荡方式接法如图1-13所示。

(2)外部振荡方式

用户也可以采用外部时钟。采用外部时钟的电路如图1-14所示。这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2端则悬空。由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。

图1-13 内部振荡方式

图1-14 外部振荡方式

图1-15为51单片机采用内部振荡方式的时钟电路框图。

图1-15 51单片机的时钟电路框图

2.CPU时序

单片机的时序是指CPU在执行指令时所需控制信号的时间顺序。时序信号是以时钟脉冲为基准产生的。CPU发出的时序信号有两类:一类用于片内各功能部件的控制,由于这类信号在CPU内部使用,用户无须了解;另一类信号通过单片机的引脚送到外部,用于片外存储器或I/O端口的控制,这类时序信号对单片机系统的硬件设计非常重要。为了便于对CPU时序进行分析,人们按指令的执行过程规定了几种周期,即时钟周期、状态周期、机器周期和指令周期,也称为时序定时单位。

1)时钟周期:时钟周期也称振荡周期,即振荡器的振荡频率fosc的倒数,它是时序中最小的时间单位。单片机在工作时,它是由内部振荡器产生或由外部直接输入的送到内部控制逻辑单元的时间信号的周期。

2)状态周期:时钟周期经2分频后成为内部的时钟信号,用作单片机内部各功能部件按序协调工作的控制信号,称为状态周期,用S表示。一个状态周期包含两个时钟周期,前半状态周期对应的时钟周期定义为P1,后半周期对应的时钟周期定义为P2。一般情况下,CPU中的算术逻辑运算在P1有效期间完成,在P2有效期间则进行内部寄存器间的信息传送。

3)机器周期:执行一条指令的过程可分为若干个阶段,每一阶段完成一项规定的操作,完成一项规定操作所需要的时间称为一个机器周期。规定一个机器周期有12个时钟周期,也就是说一个机器周期共包含12个振荡脉冲,即机器周期就是振荡脉冲的12分频。

即:1个机器周期=6个状态周期=12个时钟周期。

例如:有一个单片机系统,它的fosc=12MHz,则时钟周期为1/12μs,状态周期为1/6μs,机器周期为1μs。

图1-16为51单片机各种周期的相互关系。

图1-16 51单片机各种周期的相互关系

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