购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 51系列单片机的时钟和时序

单片机内部是基于数字逻辑电路来运行的,这些数字逻辑电路需要在一个统一的时钟步调下运行,这便涉及单片机的时钟和时序问题。下面以AT89S52为例来介绍和时序有关的问题,其中的内容对其他51系列单片机都是通用的。

2.6.1 振荡器和时钟电路

振荡器和时钟电路用于产生单片机正常工作时所需要时钟信号。AT89S52单片机采用的CMOS工艺,内部包含有一个振荡器,可以用于CPU的时钟源。另外,也允许采用外部振荡器,由外部振荡器产生的时钟信号来供内部CPU运行使用。下面分别介绍这两种方式。

1.内部时钟模式

内部时钟模式是采用单片机内部振荡器来工作的模式。AT89S52和其他51系列单片机一样,其内部包含一个高增益的单级反相放大器,引脚XTAL1和XTAL2分别为片内反相放大器的输入端口和输出端口,其工作频率为0~33MHz。对于Intel的8051,工作频率为1.2~12MHz。

当单片机工作于内部时钟模式的时候,只需在XTAL1引脚和XTAL2引脚连接一个晶体振荡器或陶瓷振荡器,并接两个电容后接地即可,如图2-10所示。使用时,对于电容的选择有一定的要求,具体如下:

图2-10 内部时钟模式

●当外接晶体振荡器的时候,电容值一般选择C1=C2=30±10pF;

●当外接陶瓷振荡器的时候,电容值一般选择C1=C2=40±10pF。

在实际电路的设计中,应该注意尽量保证外接的振荡器和电容尽可能靠近单片机的XTAL1和XTAL2引脚,这样可以减少寄生电容的影响,使振荡器能够稳定可靠地为单片机CPU提供时钟信号。

2.外部时钟模式

外部时钟模式是采用外部振荡器产生时钟信号,直接提供给单片机使用。对于不同结构的单片机,外部时钟信号接入的方式有所不同。

对于普通的8051单片机,外部时钟信号由XTAL2引脚接入后直接送到单片机内部的时钟发生器,而引脚XTAL1则应直接接地,如图2-11所示。这里需要注意,由于XTAL2引脚的逻辑电平不是TTL信号,因此建议外接一个上拉电阻。

图2-11 8051和AT89S52的外部始终模式

对于CMOS型的80C51、80C52、AT89S52等单片机,和普通的8051不同的是其内部的时钟发生器的信号取自于反相放大器的输入端。因此,外部的时钟信号应该接到单片机的XTAL1引脚,而XTAL2引脚则悬空即可。

外部时钟信号的频率应该满足不同单片机的工作频率要求,比如普通的8051频率应该低于12MHz,对于AT89S52则为0~33MHz。如果采用其他的型号,则应具体参考该单片机的数据手册中的说明。

2.6.2 CPU的时序

CPU的时序是指令执行所遵从的格式。在单片机内部,振荡器始终驱动内部时钟发生器向CPU提供时钟信号。时钟发生器的输入是一个二分频触发器,这个二分频触发器为单片机提供了一个二相时钟信号,即相位信号P1和相位信号P2,驱动CPU产生执行指令功能的机器周期。

单片机的时序是用定时单位来描述的,其描述了指令执行中各控制信号在时间上的关系,这里涉及节拍、状态、机器周期和指令周期4个概念,接下来分别说明它们之间的关系,示意图如图2-12所示。

●拍(P):为振荡脉冲的周期,为方便描述,这里用P来表示。它是晶体的振荡周期,或者外部时钟脉冲的周期。拍是51系列单片机中的最小时序单元。

●时钟周期(S):振荡脉冲信号经过二分频后,便可得到单片机的时钟信号,时钟信号的周期一般用S来表示。一个状态包含两个拍,分别称为P1和P2。时钟周期是单片机CPU中最基本的时间单元,在一个时钟周期内,CPU仅完成一个最基本的动作。

●机器周期:51系列单片机中规定,一个机器周期由6个时钟周期(S1~S6)组成,再细分可以表示为12个拍组成。从图2-12中可以看出,依次为S1P1、S1P2、S2P1、…、S6P2。如果振荡频率一旦确定,则机器周期也就确定了。比如选用24MHz的晶体振荡器,则对应的机器周期T=500ns。

●指令周期:执行一条指令所需要的时间即指令周期。不同的指令有不同的指令周期,表现为需要不同的机器周期,单周期指令执行需要一个机器周期,双周期指令执行需要两个机器周期。指令的周期一般都在1~4个机器周期范围内,具体可以参考指令表中的介绍。

图2-12 51系列单片机周期的概念

2.6.3 指令执行的时序

单片机的指令执行过程包括取指令和执行指令两个部分,其是在CPU时钟的步调下实现的。在单片机中,不同指令的长度和指令周期一般各不相同,可以分为单字节单周期指令、双字节单周期指令、双字节双周期指令等。下面介绍几个典型的指令执行时序。

1.单字节单周期指令的执行时序

单字节单周期指令的执行时序,如图2-13所示。在每个机器周期内,地址锁存信号ALE出现两次高电平有效信号,一次在S1P2~S2P1,另一次在S4P2~S5P1。这样,一个机器周期内便可以读两次程序存储器代码。

单字节单周期指令在执行时,第一次读取指令代码后便立即开始执行该指令,第二次读的代码将被丢弃,不使用。

图2-13 单字节单周期指令的执行时序

2.双字节单周期指令的执行时序

双字节单周期指令的执行时序,如图2-14所示。地址锁存信号ALE仍然在一个机器周期内有效两次。不同于前面,双字节单周期指令在执行时,两次读取的代码都有效,在一个机器周期内便执行完该指令。

图2-14 双字节单周期指令的执行时序

3.单字节双周期指令的执行时序

单字节双周期指令的执行时序,如图2-15所示。这类指令执行时,第一次读取指令代码后,其余三次读代码操作均被丢弃,用两个机器周期执行完该指令。

图2-15 单字节双周期指令的执行时序

4.MOVX类单字节单周期指令的执行时序

MOVX类单字节单周期指令的执行时序如图2-16所示。指令第一次读取代码后,第二次读代码操作被丢弃,在第二个机器周期完成外部数据单元的读写。

这里需要说明的是,无论单片机的程序是在单片机内部还是在外部存储器中,其指令读取和执行的时序都是一样的,只不过需要有其他硬件资源的配合。这将在下面一节中介绍。

2.6.4 访问外部ROM/RAM的操作时序

访问外部ROM/RAM的操作时序,主要发生在外部扩展单片机ROM和RAM的时候。此时,具体的操作时序分别介绍如下。

图2-16 MOVX类单字节单周期指令的执行时序

1.访问外部ROM的操作时序

当对51系列单片机进行外部扩展程序存储器ROM的时候,指令的操作时序便涉及外部存储器的操作。此时除了需要ALE信号外,还需要 PSEN 信号,以及将P0口作为低8位地址,P2口作为高8位地址。访问外部ROM的时序如图2-17所示。

图2-17 读外部ROM时序

其中P0端口作为地址和数据的分时复用,它先输出低8位地址,并利用ALE信号使其锁存起来,这个低8位地址和P2口的高8位地址共同组成16位地址。在 PSEN 信号有效的情况下,便可以从外部ROM中读取指令,再通过P0口送到单片机中。

2.访问外部RAM的操作时序

当对单片机进行了外部RAM扩展,此时单片机访问外部RAM的操作时序和前面有所不同。整个访问外部RAM的操作时序,如图2-18所示,操作需要执行以下两步。

(1)先从外部ROM中取MOVX指令;

(2)根据MOVX指令所给出的数据来选择某个外部RAM单元,然后对该单元进行读写操作。

图2-18 读写外部RAM时序

第一个机器周期用来从外部ROM取指令。在S4P2之后,将取得的指令中的外部RAM地址送出,这时仍然是P0口送出低8位地址,P2口送出高8位地址。ALE信号用来锁存低8位地址。

在第二个机器周期,ALE的第一个有效信号不再出现,而读信号 RD 有效,这样便将外部RAM中的数据送到单片机P0端口。该机器周期第二个ALE有效信号,没有操作进行。对于向外部写操作,只需将 WR 换成 RD 即可,其余时序都不变。 CGobSRpZeE8H9NESVsMaIG9d8nEJACu0dkiaQA7OvE5ZIrBrBmERap/yb/+vGL/Z

点击中间区域
呼出菜单
上一章
目录
下一章
×