无论是通用微型计算机还是单片机,CPU所有的工作都是在时钟信号控制下进行的,每执行一条指令,CPU的控制器就要发出一系列特定的控制信号,这些控制信号在时间上的先后次序就是CPU的工作时序。
MCS-51单片机的时钟连接有两种方式,一种是内部时钟方式,但须在XTAL1和XTAL2引脚外接石英晶体(2~24MHz)和振荡电容,电容C 1 和C 2 对频率有微调作用,电容量的选择范围为5~30pF,如图2-7(a)所示。另一种是采用外部时钟方式,即将XTAL2引脚悬空,外部时钟信号(外部振荡器提供的信号)从XTAL1引脚输入,如图2-7(b)所示。
图2-7 MCS-51单片机的时钟连接方式
在单片机应用电路设计中,时钟电路器件应该尽可能靠近CPU对应引脚。如果CPU无法正常工作,可通过示波器检测CPU时钟引脚是否有一定幅值的时钟信号,如果有,则时钟电路正常。
MCS-51单片机的振荡频率经过内部二分频以后得到的信号周期,称为状态周期,即一个状态周期包括两拍的时钟周期。机器周期就是计算机完成一种基本操作所需的时间。MCS-51单片机的机器周期由6个状态周期组成,即S 1 ~S 6 ,而每个状态又分为两拍,称为P 1 和P 2 ,因此一个机器周期中的12个振荡周期常可表示为S 1 P 1 、S 1 P 2 、…、S 6 P 1 、S 6 P 2 。若采用12MHz的晶体振荡器,则每个机器周期为12×10 6 /(12×10 6 )=1μs,若采用6MHz晶体振荡器,则每个机器周期为2μs。
在MCS-51单片机指令系统中,有单字节指令、双字节指令和三字节指令。每条指令的执行时间分别占用1个或几个机器周期。单字节指令和双字节指令都可能是单机器周期和双机器周期的,而三字节指令都是双机器周期的,只有乘、除法指令占用4个机器周期。
每一条指令的执行都包括取指令和执行指令两个阶段。在取指令阶段,CPU从程序存储器中取出指令操作码及操作数,然后执行这条指令的逻辑功能。对于绝大部分指令,在整个指令执行过程中,ALE是周期性的信号,如图2-8所示。在每个机器周期中,ALE信号出现两次:第一次在S 1 P 2 和S 2 P 1 期间,第二次在S 4 P 2 和S 5 P 1 期间。ALE信号的有效宽度为1个S状态。每出现一次ALE信号,CPU就进行一次取指令操作。
图2-8 MCS-51单片机的机器周期
对于单机器周期指令,从S 1 P 2 开始把指令码读到指令寄存器。如果是双字节指令,则在同一个机器周期的S 4 读入第二字节。对单字节指令,在S 4 仍有一次读指令码的操作,但读入的内容被忽略(不处理),并且程序计数器不加1,这种无效的读取称为假读。在下一个机器周期的S 1 才真正读取此指令码。