1.3 CPU时序
8051单片机内部有一个高增益反相放大器,用于构成振荡器,反相放大器的输入端为XTAL1,输出端为XTAL2,分别是8051的第19脚和18脚。在XTAL1和XTAL2之间接一个石英晶体及两个电容,就可以构成稳定的自激振荡器,当振荡在6~12 MHz时通常取30pF左右的电容进行微调,如图1.7所示。晶体振荡器的振荡信号经过片内时钟发生器进行二分频,向CPU提供两相时钟信号P1和P2。时钟信号的周期称为状态时间S,它是振荡周期的两倍,在每个状态的前半周期P1信号有效,在每个状态的后半周期P2信号有效,CPU就以这两相时钟信号为基本节拍指挥单片机各部分协调工作。
CPU执行一条指令所需要的时间是以机器周期为单位的,8051单片机的一个机器周期包括12个振荡周期,分为6个S状态:S1~S6,每个状态又分为两拍,即前面介绍的P1和P2信号,因此一个机器周期中的12个振荡周期可表示为S1P1,S1P2,S2P1,…,S6P1,S6P2。当采用12 MHz的晶体振荡器时,一个机器周期为1μs。CPU执行一条指令通常需要1~4个机器周期,指令的执行速度与其需要的机器周期数直接有关,所需机器周期数越少,速度越快。8051单片机只有乘、除两条指令需要4个机器周期,其余均为单周期或双周期指令。
图1.7 8051的片内振荡器及时钟发生电路
图1.8所示为几种典型的取指令和执行周期时序,从图中可以看到,在每个机器周期之内,地址锁存信号ALE两次有效,第一次出现在S1P2和S2P1期间,第二次出现在S4P2和S5P1期间。单周期指令的执行从S1P2开始,此时操作码被锁存在指令寄存器内。若是双字节指令,则在同一机器周期的S4状态读第2个字节。若是单字节指令,在S4状态仍进行读,但操作无效,且程序计数器PC的值不加1。
图1.8 8051单片机的取指令和执行周期时序
图1.8(a)和图1.8(b)分别为单字节单周期和双字节单周期指令的时序,它们都在S6P2结束时完成操作。
图1.8(c)为单字节双周期指令的时序,在两个机器周期内进行4次操作,由于是单字节指令,所以后面的3次操作无效。
图1.8(d)为CPU访问片外数据存储器指令“MOVX”的时序,它是一条单字节双周期指令,在第一个机器周期的S5状态开始送出片外数据存储器的地址,进行数据的读/写操作。在此期间没有ALE信号,所以在第二个周期不会产生取指操作。