2.6 时钟电路和时序

2.6.1 振荡器和时钟电路

时钟电路用于产生单片机工作所需的时钟信号。振荡有两种方式:外部振荡、内部振荡。

1.时钟信号的产生

在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚×TAL1,输出端为引脚×TAL2,在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器,如图2-10所示。电路中的电容一般取30pF左右,而晶体的振荡频率范围通常为1.2~12MHz。

图2-10 MCS-51单片机的振荡电路

2.引入外部脉冲信号

在由多片单片机组成的系统中,为了各单片机之间时钟信号的同步,引入唯一的外部脉冲信号作为各单片机的振荡脉冲。外部脉冲源信号经×TAL2引入,其连接方法如图2-11所示。

图2-11 MCS-51单片机外部脉冲源接法

2.6.2 CPU时序

单片机时序就是CPU在执行指令时所需控制信号的时间顺序。在执行指令时,CPU首先到程序存储器中取出需要执行指令的指令码,然后对指令码译码,并通过复杂的时序电路产生一系列控制信号去完成指令的功能。这些控制信号在不同的时刻控制某一部件产生相应的动作,这种时间上的相互关系就是CPU时序。

MCS-51时序的定时单位共有3个,从小到大依次是时钟周期、机器周期和指令周期。

1.时钟周期

时钟周期T又称为振荡周期,其频率通常为晶振的频率,是时序中最小的时间单位。时钟周期是计算机的基本工作周期,每两个时钟周期称为一个状态S,每个状态又分为P1和P2两拍。

2.机器周期

CPU完成一种基本操作所需的时间称为一个机器周期。MCS-51 单片机的一个机器周期由12个振荡周期构成,分为6个S状态:S1~S6。因此,一个机器周期中的12个振荡周期表示为S1P1、S1P2、S2P1、S2P2、…、S6P2。例如,若fosc= 12MHz,则一个机器周期为1μs。fcont=fosc ×1/12、时钟周期T=1/fcont=12/fosc。如图2-12所示为MCS-51单片机的时钟信号时序图。

图2-12 MCS-51单片机的时钟信号时序图

3.指令周期

执行一条指令所需的时间称为一个指令周期。由于机器执行不同指令所需时间不同,因此不同指令所包含的机器周期数也不相同。占用一个机器周期的指令称为单周期指令,占用两个机器周期的指令称为双周期指令。MCS-51单片机指令分为单周期指令、双周期指令和四周期指令。图2-13为典型MCS-51单片机的单机器周期指令的时序图。

图2-13 MCS-51单片机单机器周期指令的时序图

2.6.3 MCS-51 访问外部存储器的时序

8051专门有两类可以访问片外存储器的指令:一类是读片外ROM指令,另一类是读/写片外RAM指令。这两类指令执行时序除涉及ALE引脚外,还和、P0、P2、等信号有关。

1.读片外ROM指令时序

8051执行如下指令时,

            MOVC A,@A+DPTR;A←(A+DPTR)

首先把累加器A中的地址偏移量和DPTR中的地址相加,然后把16位和地址作为片外ROM地址,并从中读出该单元中的数据,送累加器A。累加器A的数据在指令执行前为地址偏移量,指令执行后为片外ROM中的输出数据。指令执行中的时序如图2-14所示。

图2-14 读片外ROM指令的时序图

指令的详细执行过程如下。

① ALE信号在S1P2有效时,为高电平状态。

② 8051在S2P1时把PC中的高8位地址送到P2口上,并一直保持到S4P2,故它不需要外接地址锁存器。8051在S2P1时PC中低8位地址送到P0口,P0口地址在ALE的下降沿被锁存到片外地址锁存器中,形成16位地址信号。

在S3和S4P1有效时,选中片外ROM,读出MOVC指令的指令码,经P0口送到CPU指令寄存器IR中。

④ CPU对指令寄存器IR中的指令译码,产生该指令所需的一系列控制信号。

⑤ 在S4P2时,CPU先把累加器A中的地址偏移量和DPTR中的地址相加,然后把“和地址”的高8位送到P2口、低8位送到P0口,其中P0口地址由ALE的第二个下降沿锁存到片外地址锁存器。

⑥ 在S6和下个机器周期的S1P1时第二次有效,并在S6P2时从片外ROM中读出由P2口和片外地址锁存器地址所对应单元中的常数,该常数经P0口送到CPU累加器A。

上述指令执行过程表明,MOVC指令执行时分两个阶段。第一阶段是根据程序计数器PC的值到片外ROM中读取指令码;第二个阶段是对累加器A和DPTR中的16位地址进行运算,并把运算得到的和作为地址信号送出,在有效时取出该地址单元中的常数送到累加器A中。

2.读片外RAM指令时序

设片外RAM的2000H单元中有一个数×,且DPTR中已经存放有该数的地址2000H,则CPU执行如下指令便可从片外RAM中取出×,并送到累加器A中。

            MOV× A,@ DPTR;A←×

该指令的指令码为E0H,存放在片外ROM中,其地址已存放在CPU程序计数器PC中。该指令执行的时序如图2-15所示。

图2-15 读片外RAM指令的时序图

指令的详细执行过程如下。

① ALE在第一次和第二次有效期间,用于从片外ROM中读取MOV×指令的指令码E0H。这与读片外ROM指令相似。

② CPU在S5P1时把DPTR中的高8位地址20H送到P2口,并把低8位地址00H送到P0口,且ALE在S5P2期间的下降沿时锁存P0口地址。

③ CPU在第二机器周期的S1~S3期间使有效,选中片外RAM工作,以读出2000H单元中的数×。

④ CPU把片外RAM中读出的数×经P0口送到CPU的累加器A中,完成该指令的执行。

上述过程表明,执行MOV×指令也可以分为两个阶段。第一阶段是根据PC中的地址读片外ROM中的指令码E0H,第二阶段是根据DPTR中的地址读片外RAM,并把读出的数×送往累加器A中。在读片外RAM时,被锁存为高电平,有效,用做片外RAM的选通信号。

写片外RAM指令的时序与读片外RAM指令的时序相似,主要区别是写片外RAM时,有效而不是有效,数据由CPU送到片外RAM,而不是从片外RAM读入到CPU中。

应该注意的是,在对片外RAM进行读/写时,ALE信号会出现非周期现象。访问片外RAM的双周期指令的时序在第二机器周期无读操作码的操作,而是进行外部数据存储器的寻址和数据选通,所以在S1P2~S2P1间无ALE信号。