1.MCS-51的取指/执行时序
每一条指令的执行都可以包括取指和执行两个阶段。在取指阶段,CPU从内部或外部ROM中取出指令操作码及操作数,然后再在执行阶段执行这条指令的逻辑功能。对于绝大部分指令,在整个指令执行过程中,ALE信号是周期性的信号,如图2-17所示。在每个机器周期中ALE信号出现两次,出现的时刻为S1P2和S4P2,信号的有效宽度为一个状态。每出现一次ALE信号,CPU就进行一次取指操作。对于不同的指令,由于字节数和机器周期数的不同,所以具体的取指操作有所不同。
对于MCS-51来说,有1字节1周期指令,1字节2周期指令,1字节4周期指令,2字节1周期指令,2字节2周期指令,以及3字节2周期指令。而ALE信号是每个机器周期出现两次,因此,并不是对每种指令,出现ALE信号时都会有效地取指令码。例如,对1字节1周期指令,只需读一次操作码。当第二个ALE信号出现时,在S4期间仍然有一个读指令码的操作。但程序计数器PC没有加1,所以读入的仍是原有指令字节,因此实际是一种无效的读取,如图2-17所示。类似情况也出现在1字节2周期等情况,而对于2字节1周期指令,则每次ALE信号都真正读一次有效的指令码,如图2-17所示。
图2-17 MCS-51单片机的取指/执行时序
(a)1字节1周期指令;(b)2字节1周期指令;(c)1字节2周期指令;(d)MOVX指令(1周期2字节)
以上情况有一种例外:当执行对外部数据RAM读写(即执行MOVX类指令)时,ALE不是周期性的(见访问外部RAM时序)。在其他情况下,ALE信号作为一种周期信号,可以给其他外部设备作时钟使用。
2.访问外部ROM和外部RAM的时序
(1)访问外部ROM的时序
如果指令是从外部程序ROM中读取,除了ALE信号外,控制信号还有PSEN,此外,还要用到P0和P2:P0口分时用作低8位地址和数据总线,P2口用作高8位地址线。相应的时序如图2-18所示。图2-18(a)是没有访问外部RAM,即没有执行MOVX类指令情况下的时序,图2-18(b)是发生访问外部RAM操作时的时序。其过程如下:
1)在S1P2时ALE信号有效。
2)在P0口送出ROM地址低8位,在P2口送出ROM地址高8位。A0~A7只持续到S2结束,因此在外部要用锁存器加以锁存。用ALE作为锁存信号。A8~A15在整个读指令过程都有效,不必再接锁存器。在S2P2时ALE失效。
3)在S3P1时刻有效,用它来选通外部ROM的使能端。所选中的ROM单元的内容,即指令,从P0口读入到CPU,然后失效。(www.daowen.com)
4)在S4P2后开始第二次读入,过程与第一次相同。
(2)访问外部RAM的时序
访问外部数据RAM的时序,对于使用者也是重要的。这里包括RAM中读和写两种时序,但基本过程是相同的。这时所用的控制信号有ALE和(读)或(写)。
图2-18 访问外部程序寄存器的操作时序
(a)不执行MOVX指令时的时序;(b)执行MOVX指令的时序
P0口仍然要用,在取指令阶段用来传送低8位ROM地址和指令,而在执行阶段,传送RAM地址和读写的数据。在执行“MOVX A,@DPTR”和“MOVX@DPTR,A”时,还要用到P2口用于输出高8位地址,而在执行“MOVX A,@Ri”和“MOVX@Ri,A”时,就可不用P2口。它们都是1字节2周期指令。其过程如下:
1)在第一次ALE有效到第二次ALE有效之间的过程,是和读外部程序ROM过程一样的,即P0口送出ROM单元低8位地址,P2口送出ROM高8位地址,然后在有效后,读入ROM单元的内容(即取指令阶段)。
2)第二次ALE有效后,P0送出RAM单元的低8位地址(Ri或DPL的内容),P2口在执行MOVX A,@DPTR”或“MOVX@DPTR,A”时,送出RAM高8位地址(DPH的内容)。而在执行“MOVX A,@Ri”或“MOVX@Ri,A”时,就不用P2口。以后将可以看到,这种地址也可以用间接的方式给出。
3)在第二个机器周期的第一次ALE信号不再出现,此时也无效(保持高电平),而在第二个机器周期的S1P1时,读信号或写信号开始有效,可用来选通RAM芯片,然后从P0口读入RAM单元数据或写RAM单元数据。
4)第二个机器周期的第二次ALE信号仍然出现,也进行一次外部ROM的读操作,但仍属于无效的操作。
在对外部RAM进行读写时,ALE信号是用来对外加的地址锁存器进行选通的,但这时的ALE信号在出现两次之后,将停发一次,呈现非周期性,因而不能用来作为其他外设的定时信号。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。