跳转到主要内容

单片机的译码方式

kelly 提交于

单片机的片选方法有线选法和译码器。线选法就是用其中剩余一条地址线做为单片机选择其它芯片的片选信号线,连接简单,但当单片机外围芯片较多时,由于单片机剩余地址线数量有限,有可能不够用。这时可以使用译码方式,对单片机剩余的高位地址线进行译码,用译码器的输出线做为单片机芯片的片选。

全译码方式是将片内寻址的地址线以外的高位地址线,全部输人到译码器进行译码,利用译码器的输出端作为各存储器芯片的片选信号。常用的译码器有74LS138、 74LS139、74LS154等。这里介绍74LS138、74LS139译码器。

74LS138是一种 3-8 译码器,有3个数据输人端,经译码产生 8 种状态。其引脚如图1所示,译码功能如表1所示。由表1可见,当译码器的输人为某一个编码时其输出就有一固定的引脚输出为低电平,其余的为高电平。
74LS139 是一种双2-4 译码器。这两个译码器完全独立,分别有各自的数据输人端、译码状态输出端以及数据输入允许端。其引脚如图2所示,真值表如表1所示(只给出其中一组)。

<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td colspan="2" width="159"><p> 输入</p></td>
<td rowspan="2" width="333"><p> 输出</p></td>
</tr>
<tr>
<td width="75"><p> 允许</p></td>
<td width="84"><p> 选择</p></td>
</tr>
<tr>
<td width="75"><p> G1   G2</p></td>
<td width="84"><p> C   B   A</p></td>
<td width="333"><p> Y0    Y1    Y2    Y3    Y4    Y5    Y6    Y7</p></td>
</tr>
<tr>
<td width="75"><p> X    1</p></td>
<td width="84"><p> X   X   X</p></td>
<td width="333"><p> 1     1     1     1     1     1     1     1</p></td>
</tr>
<tr>
<td width="75"><p> 0    X</p></td>
<td width="84"><p> X   X   X</p></td>
<td width="333"><p> 1     1     1     1     1     1     1     1</p></td>
</tr>
<tr>
<td width="75"><p> 1    0</p></td>
<td width="84"><p> 0   0   0</p></td>
<td width="333"><p> 0     1     1     1     1     1     1     1</p></td>
</tr>
<tr>
<td width="75"><p> 1    0</p></td>
<td width="84"><p> 0   0   1</p></td>
<td width="333"><p> 1     0     1     1     1     1     1     1</p></td>
</tr>
<tr>
<td width="75"><p> 1    0</p></td>
<td width="84"><p> 0   1   0</p></td>
<td width="333"><p> 1     1     0     1     1     1     1     1</p></td>
</tr>
<tr>
<td width="75"><p> 1    0</p></td>
<td width="84"><p> 0   1   1</p></td>
<td width="333"><p> 1     1     1     0     1     1     1     1</p></td>
</tr>
<tr>
<td width="75"><p> 1    0</p></td>
<td width="84"><p> 1   0   0</p></td>
<td width="333"><p> 1     1     1     1     0     1     1     1</p></td>
</tr>
<tr>
<td width="75"><p> 1    0</p></td>
<td width="84"><p> 1   0   1</p></td>
<td width="333"><p> 1     1     1     1     1     0     1     1</p></td>
</tr>
<tr>
<td width="75"><p> 1    0</p></td>
<td width="84"><p> 1   1   0</p></td>
<td width="333"><p> 1     1     1     1     1     1     0     1</p></td>
</tr>
<tr>
<td width="75"><p> 1    0</p></td>
<td width="84"><p> 1   1   1</p></td>
<td width="333"><p> 1     1     1     1     1     1     1     0</p></td>
</tr>
</tbody>
</table>

<center><i>表1 74LS138真值表</i></center>

<center><img src="http://mm32.eetrend.com/files/2016-09/wen_zhang_/100002979-9725-2.png&q…; alt=""></center>

<center><i>图1 74LS138 的引脚 图2 74LS139 的引脚</i></center>

<center><img src="http://mm32.eetrend.com/files/2016-09/wen_zhang_/100002979-9726-3.jpg&q…; alt=""></center>

<center><i>表1 74LS139 真值表</i></center>

下面我们以74LS138 为例。来介绍如何进行地址分配。例如要扩8 片8KB 的RAM 6264,如何通过74LS138 把64K 空间分配给各个芯片?由74LS138 真值表可知,把Gl 接到+5V,G2A 、G2B 接地,P2.7、P2.6、P2.5 分别接到74LS138 的C、B、A 端,剩余13 根地址线接到8 片6264 的A12 一A0 脚。

由于对高3 位地址译码,这样译码器有8 个输出Y0—Y7,分别接到8 片6264的片选端,而低13 位地址(P2.4 一P2.0 ,P0.7 一P0.0)完成对6264 存储单元的选择。这样就把64K 存储空间分成8 个8K 空间了。