
2.6 单片机时序及时钟电路
单片机时序就是CPU在执行指令时所需各控制信号之间的时间顺序关系。为了保证各部件间协调一致地同步工作,单片机内部的电路应在唯一的时钟信号控制下严格地按照时序进行工作。下面介绍有关CPU时序的概念及时钟电路的构成。
2.6.1 CPU时序及有关概念
CPU执行的一系列动作都是在统一的时钟脉冲控制下进行的,这个脉冲由单片机中的时序电路发出。由于指令的字节数不同,取这些指令所需要的时间也不同,即使字节数相同的指令,由于执行操作有较大差别,不同的指令执行时间也不一定相同,即所需要的拍节数不同。为了便于对CPU时序进行分析,人们按指令的执行过程规定了几种周期,即时钟周期、机器周期和指令周期,也称为时序单位,下面分别予以说明。
时序是用定时单位来说明的。AT89S51/52的时序单位共有4个,依次是拍节P、状态S、机器周期和指令周期。CPU时序如图2-14所示。
图2-14 CPU时序
单片机中将时钟周期定义为时钟振荡器频率的倒数,它是最基本、最小的时间单位,也称为拍节(用P表示)。两个拍节(P1P2)定义为状态(用S表示),因此一个状态包含两个拍节,其前半周期对应的拍节为P1,后半周期对应的拍节为P2。
规定一个机器周期的宽度为6个状态,表示为S1~S6。由于一个状态又包括两个拍节,因此一个机器周期即12个时钟周期,也就是振荡脉冲的十二分频。
执行一条指令所需要的时间称为指令周期,指令周期是最大的时序单位。不同指令的执行时间因指令而异,通常为1~4个机器周期。
例如,当振荡脉冲频率为12MHz时,一个振荡周期为1/12μs,一个状态周期为1/6μs,一个机器周期为1μs。当振荡脉冲频率为6MHz时,一个机器周期为2μs。
2.6.2 时钟电路
时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。要给CPU提供上述时序有关的硬件电路,即振荡器和时钟电路。不同单片机的时钟产生方法是不完全相同的,AT89S51的时钟产生方法有以下两种。
1.内部时钟方式
AT89S51单片机内部有一个高增益反相放大器,用于构成振荡器,但要形成时钟外部还需要附加电路,如图2-15所示。通过在引脚XTAL1和XTAL2两端跨接晶体或陶瓷振荡器和微调电容,再利用芯片内部的振荡电路,形成反馈电路,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部时钟电路。外接晶体振荡器时,C1和C2值通常选为20~30pF;外接陶瓷振荡器时C1和C2为30~50pF。C1、C2对频率具有微调作用,影响振荡的稳定性和起振速度。所采有的晶振或陶瓷振荡器的频率范围可在2~24MHz之间选择。为了减少寄生电容,保证振荡器稳定可靠地工作,振荡器和电容应尽可能靠近芯片安装。
2.外部时钟方式
在由多片单片机组成的系统中,为了各单片机之间时钟信号的同步,应当引入唯一的公用外部时钟信号作为各单片机的统一时钟。外部时钟方式是利用外部振荡脉冲接入XTAL1。因内部时钟发生器的信号取自反相放大器的输入端,故采用外部时钟源时,其接线方式为外部时钟信号接至XTAL1端,XTAL2悬空,如图2-16所示。
图2-15 内部时钟方式
图2-16 外部时钟方式
有些型号的单片机振荡器集成到单片机内部,不用接外部晶振,进一步简化了单片机的使用。只是时钟精度不如采用外部晶体振荡器高,选择时应注意使用场合。