51单片机的ALE引脚既能输出时钟信号,又能作为地址总线的锁存引脚,这2个功能是如何协调的呢?会不会冲突呢?
ALE引脚作用
51单片机的ALE引脚是地址锁存控制引脚,其包含2个功能:
-
以1/6晶振频率的固定频率输出脉冲信号,可作为外部时钟或外部定时脉冲使用,比如可用于驱动ADC0809的CLOCK脚,为ADC0809提供时钟信号;
-
输出锁存信号,用于控制把P0端口输出的低8位地址送入锁存器锁存,以实现低位地址和数据的分时传送。
两种功能是否冲突
那么就有一个疑问,这2个功能是如何同时实现的呢?既然ALE引脚一直输出脉冲信号,那么不会影响到锁存功能吗?
为了弄清楚ALE的信号输出,这里使用示波器对信号进行观察。示波器分别连接了ALE引脚、WR引脚(P3.6)、RD引脚(P3.7),以及用于高8位地址总线的P2.0引脚。在程序中,通过读取地址为0xFFF8的xdata数据,使得单片机控制ALE引脚输出锁存信号。
单片机读取地址为0xFFF8的外部存储器数据时,波形如下图所示:
黄色 - ALE引脚;浅蓝色 - P2.0引脚;紫色 - WR引脚(P3.6);深蓝 - RD引脚(P3.7)
从图中可以看出,在没有读取外部存储器数据时,黄色的波形(ALE引脚)持续输出脉冲信号,对应的是ALE引脚输出脉冲信号的功能。
但是到了图片的中部,可以看到黄色波形有一段持续的低电平,并且浅蓝色的信号(地址总线P2.0引脚)转为低电平,RD引脚的信号也转变为了低电平。这个阶段就是单片机读取"地址为0xFFF8的外部存储器数据"的时刻。在这个时刻,单片机不再输出持续的脉冲信号,而是配合地址总线将地址锁存到锁存器,并结合WR或RD引脚,使外部存储器读取锁存器的地址信号,然后实现对外部存储器的读写操作。当对外部存储器的读写操作结束后,ALE将继续输出持续的脉冲信号。
所以ALE输出时钟信号的功能并不会影响其作为锁存引脚的功能。锁存功能用在单片机使用外部的数据和地址总线读取外部存储器的时候。在读取外部存储器数据的时候,还需要使用单片机的RD或WR引脚控制外部存储器,以实现对存储器的读写操作。从波形图中能够看到,当对存储器进行读写操作的时候,会相应的将WR和RD引脚拉低,也就是在WR或RD引脚拉低的时候,锁存器上的地址才是有效的。而从波形图上可以看到在WR或RD拉低的那段时间ALE引脚保持了一段低电平,以防止锁存器上的地址发送变化。也就是在单片机对外部存储器进行读写的这段时间,ALE引脚只用于锁存功能。
在其它时间ALE才作为时钟引脚一直输出时钟信号,虽然会改变锁存器锁存的地址,但因为并没有对外部存储器进行读写操作,所以锁存器发生任何变化也无所谓。
总结
通过上面的观察和分析,可以知道ALE引脚的功能是分时复用的。在需要对外部存储器进行读写操作的时候,ALE脚配合地址总线、RD和WR脚,实现对地址的锁存操作;而在其它时间ALE输出时钟信号。因此ALE输出时钟信号的功能与锁存地址的功能并不冲突。