CPU功能总的来说是以不同的方式执行各种指令。不同的指令其功能各异,有的指令涉及CPU各寄存器之间的关系,有的指令涉及单片机核心电路内部各功能部件的关系,有的则与外部器件如外部程序存储器发生联系。事实上,CPU是通过复杂的时序电路完成不同的指令功能。所谓CPU的时序是指控制器按照指令功能发出一系列在时间上有一定次序的信号,控制和启动一部分逻辑电路,完成某种操作。
MCS-51单片机片内设有一个高增益的反向放大器,通过XTAL1和XTAL2外接作为反馈元件的晶体振荡器后便成为自激振荡器。XTAL1和XTAL2分别为振荡电路的输入端和输出端,时钟可以由内部方式或外部方式产生。
采用内部方式时,在XTAL1和XTAL2引脚上接石英晶体和微调电容可以构成振荡器,如图2-9(a)所示。图中C1、C2起稳定振荡频率、快速起振的作用,其容值一般在5 pF~30pF。如外接陶瓷谐振器,C1、C2的典型值为47pF。内部振荡方式所得的时钟信号比较稳定,实用电路中使用较多。振荡频率的选择范围为1 MHz~12MHz。
外部振荡方式就是把外部已有的时钟信号引入单片机内。这种方式适用于使单片机的时钟与外部信号保持同步。图2-9(b)是外部振荡方式电路的接法。对于HMOS型的芯片,只需将外部振荡器的信号接至引脚XTAL2,而把内部反相器的输入端XTAL1引脚接地。通常外接的时钟信号的频率不高于12MHz。另外,由于XTAL2端的逻辑电平不是TTL的,故建议接一个上拉电阻。
(a)内部振荡方式电路 (b)外部振荡方式电路
图2-9 单片机的时钟电路
对于HCMOS型的单片机,外部时钟信号接XTAL1,XTAL2悬空,且可省去上拉电阻。为便于多芯片同步工作,外接时钟方波信号的高低电平的持续时间都大于20ns。
由CPU发出的时钟脉冲控制信号有两类:一类是用于计算机内部的,和外部无直接关系;另一类是送到片外的,这一部分控制信号用于扩展外部存储器和外围设备,用户需要了解清楚。下面介绍有关的几个常用概念。
图2-10表明了振荡周期、时钟周期、机器周期和指令周期间的相互关系。
图2-10 MCS-51单片机各种周期间的相互关系
(1)振荡周期。
振荡周期是指为单片机提供时钟信号的振荡源的周期。CPU在一个振荡周期内仅完成一个基本的操作,振荡频率越高,单片机的工作速度越快,但在选用振荡频率时并不一定越高越好。若振荡频率高,则系统对单片机的外围集成芯片的工作速度要求也高,否则,系统将无法正常工作。
(2)时钟周期。
时钟周期是振荡源信号经二分频后形成的时钟脉冲信号。时钟周期是振荡周期的两倍,时钟周期(又称状态周期或S周期)被分成两个节拍,即P1节拍和P2节拍。在每个时钟的前半周期,P1信号有效,这时CPU通常完成算术逻辑操作;在每个时钟的后半周期,P2信号有效,内部寄存器与寄存器之间的数据传输一般在此状态发生。
(3)机器周期。
通常将完成一个基本操作所需的时间称为机器周期。一个机器周期(MC)由6个状态(12个振荡脉冲)组成,即6个时钟周期,是单片机完成一个基本操作所用的时间,如读/写操作等。
(4)指令周期。
指令周期是指CPU执行一条指令所需要的时间。一个指令周期通常含有1~4个机器周期。在MCS-51中,除了乘、除两条指令为4个机器指令外,其余都为单周期或双周期指令。
若MCS-51单片机外接晶振为12MHz,则单片机的4个周期的具体值为:
振荡周期=1/(12MHz)=1/12μs=0.0833μs
时钟周期=1/6μs =0.167μs
机器周期=1μs
指令周期=lμs~4μs
在MCS-51的指令系统中,指令的长度为1~3个字节,除MUL(乘法)和DIV(除法)指令外,单字节和双字节指令都是单周期和双周期的,3字节指令也都是双周期的,乘、除法指令为4周期指令。图2-11为几种典型的CPU取指和执行指令的时序。
由于CPU取指和执行指令时,这些内部时钟信号不能从外部观察到,所以图2-11中列出了XTAL2端出现的振荡器信号和ALE端信号作为参考。ALE信号是单片机扩展系统的外部存储器地址的低8位锁存信号,在访问程序存储器的机器周期内ALE信号两次有效,第一次发生在S1P2和S2P1期间,第二次发生在S4P2和S5P1期间。在访问外部数据存储器的机器周期内,ALE信号只有一次有效,即在S1P2和S2P1期间产生。因此,这时的ALE信号频率是不稳定的。
图2-11 MCS-51单片机典型指令的取指和执行时序
对于单周期指令,从S1P2开始执行指令,这时操作码被锁存到指令寄存器内。如果是双字节指令,则在同一机器周期的S4读入第二字节;如果是单字节指令,则S4仍有读操作,但被读进来的字节(下一个指令的操作码)是不予考虑的,且程序计数器不加1。在任何情况下,这两类指令都在S6P2结束时完成操作,如图2-11(a)、(b)所示。
图2-11(c)表示单字节双周期指令的时序,在两个机器周期内发生4次读操作码的操作,但由于是单字节指令,故后3次读操作都是无效的。
图2-11(d)表示访问外部数据存储器指令MOVX的时序,这是一条单字节双周期指令。在第一个机器周期S1P2取指后,即在S5开始送出片外数据存储器的地址后,随后读或写数据。在此期间无ALE信号,故在第二机器周期不产生取指操作。
有一点需要说明的是,当把ALE信号作时钟信号输出,执行MOVX指令时,会丢失一个周期;在执行其他指令时,ALE信号是一个周期信号,其频率为振荡频率的1/6,可以供外部其他部件作为时钟信号使用。