adc0809转换的一些问题(与51单片机配合)

Hello everyone!今天看了一个ad转换的程序,有几个不理解的地方,希望大家能给我解释下。
1. 里面有个#define AD XBYTE [0x7FF8]这样的ad转换的地址定义(查资料得知是P0和P2口的作为地址线的原因),我把它改成了其他的地址,有的就行有的就不行了,这是怎么回事?ad转换器作为一个外部存储器的地址是人为定义的吗?
2. 在ad转换结束之后,外部数据输入到P0口中,程序中是将刚刚定义的ad转换器的地址里面的值直接赋值给了data(程序中定义的一个char型变量),然后直接送入数码管显示,那为什么直接data=P0就不行呢?(我的意思不知道大家可能理解)
(注:图片引用他处)

1 、地址是人为定义的,在51单片机中P0口是低位地址8位与数据口8位分时复用,所有连接在地址总线上的器件,都必须有一个地址区间(地址块),例如,RAM 62256需要32Kbyte,0000H--7FFFH,就是一个片选信号。
ad转换器需要一个,经过地址译码器,译码后的“区间”,即储存器的片选信号,译码器可以分成1,2,4,8块----,1就是单一地址,必须译码器;看自己需要选定,选定一块,如果需要,这一块还可以用译码器再次译码,原则上可以到单个地址,ADC0809需要8个地址,用低位地址线A0,A1,A2三根,和上面所述的片选信号线,完成对该器件8路ad转换器的选择,低位地址线可以共用,片选线不能与其它器件共用。
2、外部数据输入到P0口是需要有相应的器件被选择,需要读写信号线控制的,这里用 /RD 读信号,它不是单一发出,它与地址线共同完成对器件的读写操作。
这个例子中,需要选择这个ADC器件(片选),还需要选择由哪一路转换器输出(A0,A1,A2)。

data=P0这条指令和data=P1一样,没有地址输出,没有/RD输出,就是没有选择到需要的器件。追问

我还想问下:1.所有连接在地址总线上的器件,都必须有一个…那这样的话,刚刚定义的ad的地址是0x7ff8,而单片机片内的ram就00h-ffh,而仿真图中也没有片外的ram,那0x7ff8的地址在什么位置呢? 2.我本身是这样想的(上面有仿真),当ad转换之后,转换的结果直接会在out端口上然后也就直接传到了P0口,所以我讲就是data=P0,这样的想法估计是有问题的?谢谢!

追答

1、/RD和P2.7配合,只有两个信号同时为低时,74LS02或非门输出高电平,ADC器件OE端高电平有效,才能完成对器件读操作,P2.7为低电平的情况是使用0000H--->7FFFH地址区间,上图中ADC的8路AD转换器,是通过/ALE和/WR经过74LS02或非门输出高电平(器件ALE高电平有效),完成对器件8路转换器地址输入的,它由低3位地址线决定选择哪一路。(xxx0h-->xxx7h或者xxx8h--->xxxfh都可以)。
所以用0000H--->7FFFH中任意一个地址都可以,当你使用MOVX A,@DPTR 指令的时,P2.7输出低电平。不能用8000H--->FFFFH地址。
为了不影响显示效果,在操作ADC0808时,根据LED的驱动电平,应该P2口低4位给定相反电平,即不显示,y0xxH或者yFxxH。y选择8以下。
2、因为还需要对ADC0808输入地址,所以不能把ADC0808的OE端直接连接高电平。

追问

谢谢你详细的回答,我大致了解了!谢谢!

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答