单片机原理及应用教程(第4版)
上QQ阅读APP看书,第一时间看更新

2.5 51单片机的时序

时序就是计算机指令执行时各种微操作在时间上的顺序关系。

计算机所执行的每一操作都是在时钟信号的控制下进行的。每执行一条指令,CPU都要发出一系列特定的控制信号,这些控制信号(即CPU总线信号)在时间上的相互关系就是CPU的时序。

学习CPU时序,有助于理解指令的执行过程,有助于灵活地利用单片机的引脚进行硬件电路的设计。尤其是通过控制总线对片外存储器及I/O设备操作的时序,更是单片机使用者应该关心的。

2.5.1 时钟

计算机执行指令的过程可分为取指令、分析指令和执行指令3个步骤,每个步骤又由许多微操作所组成,这些微操作必须在一个统一的时钟脉冲的控制下才能按照正确的顺序执行。

时钟脉冲由时钟振荡器产生,51单片机的时钟振荡器是由单片机内部反相放大器和外接晶振及微调电容组成的一个三点式振荡器,将晶振和微调电容接到8051的XTAL1和XTAL2端即可产生自激振荡。通常振荡器输出的时钟频率fosc为6~16MHz,调节微调电容可以微调振荡频率fosc,51单片机也可以使用外部时钟,如图2-10所示。

图2-10 MCS-51时钟电路

a)振荡电路 b)8051外部时钟 c)80C51外部时钟

2.5.2 CPU时序

单片机的时序是指CPU在执行指令时所需控制信号的时间顺序。时序信号是以时钟脉冲为基准产生的。CPU发出的时序信号有两类:一类用于片内各功能部件的控制,由于这类信号在CPU内部使用,用户无须了解;另一类信号通过单片机的引脚送到外部,用于片外存储器或I/O端口的控制,这类时序信号对单片机系统的硬件设计非常重要。

1.时钟周期、机器周期和指令周期

(1)时钟周期

时钟周期也称振荡周期,即振荡器的振荡频率fosc的倒数,是单片机操作时序中的最小时间单位。时钟频率为6MHz时,则它的时钟周期应是166.7ns。

时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏。

(2)机器周期

执行一条指令的过程可分为若干个阶段,每一阶段完成一个规定的操作,完成一个规定操作所需要的时间称为一个机器周期。

机器周期是单片机的基本操作周期,每个机器周期包含6个状态周期,用S1、S2、S3、S4、S5、S6表示,每个状态周期又包含两个节拍P1、P2,每个节拍持续一个时钟周期,因此,一个机器周期包含12个时钟周期,分别表示为S1P1、S1P2、S2P1、S2P2、…、S6P1、S6P2,如图2-11所示。

(3)指令周期

指令周期定义为执行一条指令所用的时间。由于CPU执行不同的指令所用的时间不同,所以不同的指令其指令周期是不相同的,指令周期由若干个机器周期组成。通常包含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令,依此类推。通常,一个指令周期含有1~4个机器周期。

51单片机的指令可以分单周期指令、双周期指令和四周期指令3种。只有乘法指令和除法指令是四周期指令,其余都是单周期指令和双周期指令。

例如,51单片机外接石英晶体振荡频率为12MHz时,时钟(振荡)周期为1/12μs,状态周期为1/6μs,机器周期为1μs,指令周期为1~4μs。

2.51单片机的取指/执行时序

51单片机执行任何一条指令时都可以分为取指令阶段和执行阶段(此处将分析指令阶段也包括在内)。取指令阶段把程序计数器PC中的指令地址送到程序存储器,选中指定单元并从中取出需要执行的指令。指令执行阶段对指令操作码进行译码,以产生一系列控制信号完成指令的执行。51单片机指令的取指/执行时序如图2-11所示。

由图2-11可以看出,在指令的执行过程中,ALE引脚上出现的信号是周期性的,每个机器周期出现两次正脉冲,第一次出现在S1P2和S2P1期间,第二次出现在S4P2和S5P1期间。

ALE信号每出现一次,CPU就进行一次取指令操作。

图2-11a为单字节单周期指令的时序,在一个机器周期中进行两次指令操作,但是对第二次取出的内容不作处理,称作假读。

例如,累加器加1指令“INC A”。

图2-11b为双字节单周期指令的时序,在一个机器周期中ALE的两次有效期间各取一字节。

例如,加法指令“ADD A,#data”。

图2-11c为单字节双周期指令的时序,只有第一次指令是有效的,其余3次均为假读。

例如,DPTR加1指令“INC DPTR”。

图2-11d为访问外部RAM指令“MOVX A,@DPTR”(单字节双周期)的时序。

图2-11 51单片机的取指/执行时序

a)单字节单周期指令 b)双字节单周期指令 c)单字节双周期指令 d)访问外部RAM指令MOVX(单字节双周期)

3.访问外部ROM时序

当从外部ROM读取指令时,在ALE与两个信号的控制之下,将指令读取到CPU。其详细过程如下。

1)ALE信号在S1P2有效时,继续保持高电平或从低电平变为高电平无效状态。

2)8051在S2P1时,把PC中高8位地址从P2口送出,把PC中低8位地址从P0口送出,从P0口送出的低8位地址在ALE信号的下降沿被锁存到片外地址锁存器中,然后与P2口中送出的高8位地址一起送到片外ROM。

3)在S3P1至S4P1期间有效时,选中片外ROM工作,并根据P2口和地址锁存器输出的地址从片外ROM中读出指令码,经P0口送到CPU的指令寄存器IR。由此也可以看出,当访问外部存储器时,P0口首先输出外部存储器的低8位地址,然后接收由外部存储器中读出的数据,这是一个分时复用的地址/数据总线。所以从P0口中送出的低8位地址必须由片外的地址锁存器锁存,否则当它切换为数据总线时,低8位地址将消失,导致无法正确地访问外部存储器。

4)在S4P2时序后开始的第二次读外部ROM,过程与前面相同。

4.读外部RAM时序

访问外部RAM的操作有两种情况,即读操作和写操作,两种操作的方式基本相同。主要区别是8051利用P3的第二功能,通过P3.6输出(写命令),对外部RAM进行写操作;通过P3.7输出(读命令),对外部RAM进行读操作。51单片机读外部RAM时序如图2-12所示。

图2-12 51单片机读外部RAM时序

设片外RAM的2000H单元存放的数据为20H,DPTR中已保存该单元的地址,则CPU执行MOVX A,@DPTR指令,便可从片外RAM的2000H单元中将数据读出送入到累加器A中。指令执行的过程如下。

1)ALE在第一次和第二次有效期间,用于从片外ROM中读取MOVX指令的指令码。

2)CPU在为低电平时,把从片外ROM读得的指令码经P0口送入指令寄存器IR,译码后产生控制信号,控制对外部RAM的读操作。

以下3)~5)步骤是对外部RAM的读操作过程。

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

4)CPU在第二个机器周期中的S1~S3期间使有效选中外部RAM工作,读出2000H单元中的数据20H。在读外部RAM期间,第一次的ALE信号无效,也处在无效状态。

5)CPU把外部RAM中读出的数据20H经P0口送到CPU的累加器A中。

由以上分析可见,通常情况下,每一个机器周期中ALE信号两次有效。仅仅在访问外部RAM期间(执行MOVX指令时),第二个机器周期才不发出第一个ALE脉冲。