![单片机原理实用教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/900/679900/b_679900.jpg)
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个机器周期,其余均为单周期或双周期指令。
![](https://epubservercos.yuewen.com/2F7F9A/3590440904654601/epubprivate/OEBPS/Images/figure_0016_0001.jpg?sign=1738881392-VCamzGvoZmlOkxCt1ui0FpbPwwV2ilLB-0-48d3b6a34c42c37d8915386e6e2ee447)
图1.7 8051的片内振荡器及时钟发生电路
图1.8所示为几种典型的取指令和执行周期时序,从图中可以看到,在每个机器周期之内,地址锁存信号ALE两次有效,第一次出现在S1P2和S2P1期间,第二次出现在S4P2和S5P1期间。单周期指令的执行从S1P2开始,此时操作码被锁存在指令寄存器内。若是双字节指令,则在同一机器周期的S4状态读第2个字节。若是单字节指令,在S4状态仍进行读,但操作无效,且程序计数器PC的值不加1。
![](https://epubservercos.yuewen.com/2F7F9A/3590440904654601/epubprivate/OEBPS/Images/figure_0016_0002.jpg?sign=1738881392-QRdm7QB7BZFqvFQLuhwR0nEWCSbh81ML-0-8ddf7f5520eea3e4f0f11f13f4518fbd)
图1.8 8051单片机的取指令和执行周期时序
图1.8(a)和图1.8(b)分别为单字节单周期和双字节单周期指令的时序,它们都在S6P2结束时完成操作。
图1.8(c)为单字节双周期指令的时序,在两个机器周期内进行4次操作,由于是单字节指令,所以后面的3次操作无效。
图1.8(d)为CPU访问片外数据存储器指令“MOVX”的时序,它是一条单字节双周期指令,在第一个机器周期的S5状态开始送出片外数据存储器的地址,进行数据的读/写操作。在此期间没有ALE信号,所以在第二个周期不会产生取指操作。