单片机如何访问片外存储空间的时序
扫描二维码
随时随地手机看文章
单片机与片外程序存储器、数据存储器或I/O接口之间进行数据交换时所产生的总线操作被称为总线周期(Bus Cycle)。单片机向外传输数据的总线周期是写总线周期,反之是读总线周期。在总线周期中,单片机总线引脚的状态将按照一定时间顺序发生特定的变化,这样的总线状态变化被称为总线时序。本节将分别介绍单片机进行片外程序和数据存储器(或I/O接口)访问时的总线时序。
1.片外程序存储器读总线时序
单片机会在以下两种情况下读片外扩展的程序存储器,并产生如图5-11所示的片外程序存储器读总线周期。
图5-11片外程序存储器读总线周期时序
(1)从片外程序存储器中读取指令
从片外程序存储器取指令时,首先16位程序指针PC的高8位PCH和低8位PCL分别由单片机的P2口和P0口输出,作为地址指向程序存储的某个存储单元,该存储单元中的数据就是单片机要读取的指令(指令的二进制代码)。由于P0口是地址和数据分时复用的总线,进入一个机器周期的S3状态后,P0口上的低8位地址将消失。为了在P0口上的地址消失后依然能够按照正确的地址访问存储器,必须在低8位地址消失前,通过地址锁存器将其锁存住。这里,地址锁存的时机是非常关键的,因为必须保证触发地址锁存器时,P0口上传送的
是低8位地址,而由图5-11可知,利用ALE引脚上出现的下降沿信号触发地址锁存,恰好符合对锁存时机的要求。接下来,在S4状态的前半段,P0口将成为数据总线,P0口上的数据将被当作指令代码送入单片机内的指令寄存器,而且此段时间内,PSEN引脚为低电平,若PSEN引脚被连接到程序存储器的读选通引脚OE上,则PSEN的低电平可以使程序存储器输出被地址选中的存储单元中所存放的指令代码。
(2)从片外程序存储器中读取数据
单片机可以通过“MOVC A,@A+DPTR”和“MOVC A,@A+PC”两条指令读取程序存储器中存放的信息。当MOVC指令执行时,首先(A)+(DPTR)或(A)+(PC)的16位和的高8位和低8位作为地址的高8位(A15~A8)和低8位(A7~A0)分别由P2口和P0口输出。其中,P2口上的高8位地址保持不变,而P0口上的低8位地址将消失,并且之后成为
传送数据的数据总线。为此,需要将单片机ALE引脚与地址锁存器的锁存触发引脚相连,用于控制锁存器在ALE下降沿时锁存住P0口上传送的低8位地址。最后,当与程序存储器OE引脚相连的PSEN引脚出现低电平时,程序存储器将被地址选中的存储单元中的字节数据送上数据总线P0口,而P0口上的数据最后被传送给累加器A。
需要特别注意的是:在读片外程序存储器的过程中,单片机的RD和WR引脚始终为高电平,因此与单片机相连的数据存储器既不输入也不输出数据,从而不可能出现片外程序存储器和数据存储器空间的地址冲突问题。
2.片外数据存储器总线时序
MCS-51单片机使用MOVX指令(见表3-5)进行片外数据存储器的读和写操作。
(1)读总线时序
以累加器A为目的操作数的“MOVX A,@DPTR”和“MOVX A,@Ri”指令是片外数据存储器读指令,将产生如图5-12所示的片外数据存储器读总线周期时序。
观察图5-12可知在读总线周期中:
1)PSEN和WR引脚始终为高电平。
2)P2口上传送的是片外数据存储器的高8位地址。对于指令“MOVX A,@DPTR”,高8位地址来自于DPTR的高8位DPH;对于指令“MOVX A,@Ri”,高8位地址需要通过直接向P2口中写入的方式来确定,如执行指令“MOV P2,#12H”可以使高8位地址为12H。
3)DPL或Ri中的8位二进制数为片外数据存储器的低8位地址,由地址总线P0口送出。作为地址/数据分时复用的总线,P0口上的低8位地址将在S6的后半段消失,并且进入S3后,P0口将成为数据总线用于传送来自片外数据存储器的数据。
图5-12片外数据存储器读总线周期时序
4)在ALE引脚出现下降沿时,P0口上传送的一定是片外数据存储器的低8位地址。因此,可以用ALE作为地址锁存器的锁存触发信号,控制低8位地址的锁存。
5)在P0口作为数据总线传送数据期间,连接到片外数据存储器OE引脚的RD引脚上的低电平信号恰好可以使片外数据存储器送出数据到P0口上,完成数据的传送。
(2)写总线时序
图5-13为片外数据存储器写总线周期时序,该时序可以由以累加器A为源操作数的写存储器指令“MOVX@DPTR,A”和“MOVX A,@Ri”产生。在写总线周期中,当WR为低电平时,P0口已经由地址总线转换为数据总线,用于将累加器A中的数据送给片外数据存储器,而WR与存储器的WE引脚相连,能使片外数据存储器接收P0口上的数据。
图5-13片外数据存储器写总线周期时序
对比图5-11、图5-12和图5-13可以看到,引脚PSEN、RD和WR不会同时为低电平。这保证了在一个同时扩展了片外程序存储器和数据存储器的单片机系统中,程序存储器读操作、数据存储器读操作和数据存储器写操作三者之间不会发生冲突。