2.5 时钟电路与CPU的时序

计算机工作时,是在统一的时钟脉冲控制下一拍一拍地进行的。这个脉冲是由单片机控制器中的时序电路发出的,本节将介绍有关电路及CPU的时序。

2.5.1 振荡器和时钟电路

时钟电路用于产生单片机工作所需的时钟信号。时钟信号可以由两种方式产生:内部时钟方式和外部时钟方式,下面分别予以介绍。

1.内部时钟方式

89C51内部有一个高增益反向放大器(即与非门的一个输入端编程为常有效时),用于构成片内振荡器,引脚XTAL1 和XTAL2分别是此放大器的输入端和输出端。在XTAL1和XTAL2两端跨接晶体或陶瓷谐振器,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部时钟发生器,见图2-10。外接晶振时,C1C2 值通常选择为30 pF左右;外接陶瓷谐振器时,C1C2 约为47 pF。C1C2 可稳定频率并对振荡频率有微调作用,振荡频率范围是0~24 MHz。为了减少寄生电容,更好地保证振荡器稳定可靠地工作,谐振器和电容应尽可能安装得与单片机芯片靠近。

图2-10 振荡电路

内部时钟发生器实质上是一个二分频的触发器,其输出是单片机工作所需的时钟信号。

2.外部时钟方式

外部时钟方式是采用外部振荡器,外部振荡脉冲信号由89C51的XTAL1端接入后直接送至内部时钟发生器,见图2-11。输入端XTAL2应悬浮,由于XTAL1端的逻辑电平不是TTL的,故建议外接一个上拉电阻。

图2-11 外部时钟脉冲源接法

一般要求,外接的脉冲信号应当是高、低电平的持续时间大于 20 ns,且频率低于24 MHz的方波。这种方式适合于多块芯片同时工作,便于同步。

2.5.2 CPU的时序及有关概念

时序是表达指令执行中各控制信号在时间上的相互关系。时序是用定时单位来说明的, 89C51单片机的时序定时单位共有4个,从小到大依次是:拍、状态、机器周期、指令周期,如图2-12所示。下面分别加以说明。

图2-12 89C51单片机各种周期的相互关系

(1)拍(P):把振荡脉冲的周期称为拍,用P表示。它就是晶体的振荡周期,或是外部振荡脉冲的周期,拍是89C51单片机中最小的时序单位。

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

(3)机器周期:通常把CPU完成一个基本操作所需要的时间称为机器周期。一个机器周期由 6 个状态(或 12 拍)组成,可依次表示为 S1P1,S1P2,S2P1,S2P2,…, S6P1,S6P2。

当振荡频率为12 MHz时,一个机器周期为1 μs;当振荡脉冲频率为6 MHz时,一个机器周期为2 μs。请记住这些数据,以后在程序里计算时间或使用定时器都要用到。

(4)指令周期:指令周期就是执行一条指令所需要的时间。指令周期是89C51 单片机中最大的时序单位,一般由若干个机器周期组成。指令不同,所需要的机器周期数也不同,但一条指令的周期应在1 4个机器周期范围内,每条指令所用的机器周期数详见附录B。

2.5.3 CPU的取指令和执行指令时序

每一条指令的执行都可分为取指令和执行指令两个阶段。在取指令阶段,CPU从内部或外部ROM中取出指令操作码和操作数,然后再执行这条指令。

在89C51单片机中,每一条指令的长度根据其操作的繁简程度,可分为单字节、双字节和三字节指令。执行每条指令所用的时间也不相同,可分为单字节单机器周期指令、单字节双机器周期指令、双字节单机器周期指令、双字节双机器周期指令和三字节双机器周期指令,只有乘除法是单字节四机器周期指令。

图2-13给出了89C51单片机几种典型指令的取指令和执行指令的时序。可以通过观察XTAL2和ALE引脚信号,分析CPU取指时序。由图可知,在每一个机器周期内,地址锁存信号ALE出现二次有效信号,即两次高电平信号。第一次出现在S1P2和S2P1期间,第二次出现在S4P2和S5P1期间。

图2-13 89C51单片机的取指令时序

对于单周期指令,当操作码被送入指令寄存器时,便从S1P2开始执行指令,在S6P2结束时完成指令操作。

如果是单字节单周期指令,则在同一个周期的S4P2期间虽然读操作码,但所读的这个字节操作码被丢掉,程序指针PC也不加1,见图2-13(a)。

如果是双字节单周期指令,则在S4期间读指令的第二个字节,见图2-13(b)。

对于单字节双周期指令,在2个机器周期内发生4次读操作码的操作,由于是单字节指令,后3次读操作都无效,如图2-13(c)所示。但当访问外部数据存储器指令(如MOVX)时,时序有所不同。它也是单字节双周期指令,在第一个机器周期里有2次读指令操作,后一次无效,从S5开始送出外部数据存储器的地址,紧接着读或写数据,读写数据期间与ALE无关,ALE不产生有效信号,所以第二个周期不产生取指令操作,见图2-13(d)。

此外还应说明,时序图中只表示了取指令操作的有关时序,而没有说明执行指令的时序。实际上每条指令都有具体的数据操作,如算术和逻辑操作一般发生在P1期间,片内存储器之间的数据传送操作发生在P2期间。

2.5.4 访问外部ROM的操作时序

如果89C51单片机扩展了外部程序存储器时,就会有访问外部存储器的操作。在访问外部ROM时,除了ALE外,还需要PSEN信号,此外还要用P0口作为低8位地址,用P2口作为高8位地址。其时序见图2-14。

图2-14 外部ROM读时序

如图2-14所示,P0口输出地址和数据传送是分时操作的。它先输出低8位地址,在ALE信号的作用下,低8位地址被锁存,锁存的低8位地址与P2口提供的高8位地址一起,组成16位地址指向外部ROM某单元,在PSEN有效时,从外部ROM中取出指令,再通过P0口送到单片机中,P0口完成了分时操作。

2.5.5 访问外部RAM的操作时序

图2-14所示的时序不包括访问外部RAM指令(如MOVX指令)的时序,因为访问外部RAM时的时序要有所不同。访问外部 RAM时,要进行两步操作:第一步先从外部ROM中取MOVX指令,第二步再根据MOVX指令所给出的数据选中外部RAM某单元,然后对该单元进行操作。图2-15示出了读/写外部RAM的操作时序,详细过程介绍如下。

图2-15 外部RAM读写时序

第一个机器周期是从外部ROM取指过程,在S4P2之后,将取来的指令中的外部RAM地址送出,P0口送低8位地址,P2口送高8位地址。

在第二个机器周期中,ALE中第一个有效信号不再出现,而RD读信号有效,将外部RAM的数据送回P0口。以后尽管ALE的第二个信号出现,但没有操作进行,从而结束了第二个机器周期。

向外部RAM的写操作与读操作一样,只不过RD信号被WR信号所取代。

请注意,在访问外部RAM时,ALE丢失一个周期,所以不能用ALE作为精确的时钟输出。