MCU

AD7545写时序及总线实现方式二

0
阅读(3758)

    前面讨论了AD7545的写时序以及分析了一种总线连接方式,今天主要介绍单片机的总线扩展技术以及另一种总线连接方式。

    单片机具有很强的外部扩展功能。其外部引脚可构成三总线结构,即地址总线、数据总线和控制总线。单片机所有的外部扩展都是通过三总线进行的。

   (1)地址总线(AB):地址总线用于传送单片机输出的地址信号,宽度为16位,可寻址的地址范围为216=64KB。地址总线是单向的,只能由单片机向外发出。P0口提供低8位地址,P2口提供高8位地址。由于P0口既做地址线又做数据线,分时复用,所以,P0口提供的低8位地址是由P0口经锁存器提供的。锁存信号是由CPU的ALE引脚提供的。

   (2)数据总线(DB):数据总线是由P0口提供的,宽度为8位。P0口是双向三态口,是单片机应用系统中使用最频繁的通道。P0口提供的数据总线上要连接多个扩展的外围芯片,而某一时刻只能有一个有效的数据传输通道。具体哪一个芯片的数据通道有效,是由各个芯片的片选信号控制选择的。欲使CPU与某个外部芯片交换数据,则CPU必须先通过地址总线发出该芯片的地址,使该芯片的片选信号有效,则此时P0口数据总线上的数据只能在CPU和该芯片之间进行传送。

   (3)控制总线(CB)::控制总线实际上是CPU输出的一组控制信号。每条控制信号都是单向的,但是由多条不同的控制信号组合而成的控制总线则是双向的。MCS-51系列单片机中用于系统扩展的控制信号有RD、WR、PSEN、ALE和EA。

    如图1便为单片机外部总线的写时序图。

                                           图1

    由图1我们可知道,单片机往外部存储器写一个数据,会从ALE、WR、P0和P2输出信号,首先ALE先拉高后拉低,建立低8位地址信号,而高8位地址信号一直在输出,然后拉低WR信号,输出数据D0-D7,延时一下释放ALE和WR,整个总线过程大概就是这样。熟悉了以上过程,我们就可以根据该过程来实现对AD7545的设计,如图2便是另外一个根据单片机总线时序来实现控制的例子。

                                          图2

    在图2中,单片机的WR连接ADR7545的WR,D0-D7连接至器件的DB0-DB7,并且D0-D3通过一个锁存器连接至DB8-DB11,而该锁存器的使能信号CS和AD7545的使能信号CS均是地址总线通过一个地址译码器来实现的,该译码器可使用一个3-8地址译码器,可使A8-A10连接至译码器的输入地址,不与数据端口利用,实现起来比较简单。接下来说一下程序实现。

    为了实现外部总线读写,首先得定义一个外部存储器变量。

   Unsigned char con_data1 xdata _at_0x8000; //用于控制AD7545

   Unsigned char con_data2 xdata _at_0x8100; //用于控制LATCH

   然后接着应该先把DB8-DB11先锁存在LATCH中,假设DB8-DB11=8,那么可使

   con_data2=0x08;

   该语种一执行,则ALE先拉低,A8-A10输出“001”,使译码器的Q1拉低,使能LATCH,DB0-DB7输出0x08,这样就把数据0x08锁存在LATCH中了,在下一个数据来临之前,DB8-DB11将一直等于8。

   再接着把DB0-DB7写入AD7545中,假设DB0-DB7=0x7f,那么可使

   con_data1=0x7f;

   执行了该语句,首先地址信号A0-A15=0x8000,即A8-A10输出“000”,那么译码器的Q0被拉低,从而使能了AD7545器件,而D0-D7输出0x7f,即DB0-DB7=0x7f,此时DB0-DB11将是写入的数据信号0x087f,现在就差WR信号啦。由前面的时序可知,地址信号输出不久,WR信号就会拉低,从而将DB0-DB11写入AD7545中。

   至此通过单片机总线时序完成整个写操作。

    程序连接起来便是:

   Unsigned char con_data1 xdata _at_0x8000; //用于控制AD7545

   Unsigned char con_data2 xdata _at_0x8100; //用于控制LATCH

   con_data2=0x08;

   con_data1=0x7f;