Collegamento porte di input/output (2)
Se occorrono molti fili di ingresso uscita è necessario collegare più porte (integrati latch o buffer three state), e ciascuna di esse deve essere mappata a un ben preciso indirizzo ed essere abilitata solo in presenza di questo.

Utilizzando l'integrato 74138 (LS va bene ma HC o HCT è meglio) è molto semplice realizzare un address decoder in grado di generare i segnali di lettura o scrittura per 8 porte.

Integrato SN74LS138

Questo integrato dispone di 8 uscite (Q0..Q7) tutte normalmente a 1, tre pin di abilitazione (gialli) e tre pin di selezione uscita (verdi). Quando contemporaneamente tutti e tre i pin di abilitazione sono attivi (E1 E2 a massa, E a 1) l'uscita selezionata dal valore binario presente su A B C si porta a zero (A è il bit meno significativo, C il più significativo). 

Collegando gli indirizzi A0..A2 del processore ai pin A B C del 74138 e i segnali IORQ e RD ai due pin E1 ed E2, e bloccando a 1 il pin E otteniamo sulle uscite Q0..Q7 gli impulsi di lettura per 8 diverse porte. Collegando alle abilitazioni IORQ e WR si ottengono invece gli 8 impulsi di scrittura.
NOTA: Il pin E dei due 74138 è lasciato scollegato in quanto un ingresso TTL lasciato aperto assume automaticamente il valore 1, sarebbe comunque meglio bloccarlo a 1 con una resistenza da 10 Kohm collegata ai +5V, questo diventa indispensabile se al posto di un 74LS138 si usa un CMOS 74HC138 o 74HCT138.

Con un decodificatore indirizzi come quello riportato la prima porta di I/O risponderà all'indirizzo 0, se si effettua una lettura verrà generato un impulso sul filo R0, se si effettua una scrittura l'impulso verrà generato su W0, e così via fino a R7 o W7. A questo punto, provando a leggere o scrivere sulla porta 8 in realtà si torna a leggere o scrivere sulla 0, in quanto i bit di indirizzo A3..A7 non vengono considerati dal decodificatore (che considera 00001000 equivalente a 00000000). Il primo integrato verrà abilitato dagli indirizzi 0, 8, 16 ecc, il secondo dgli indirizzi 1, 9, 17 ecc, l'ottavo dagli indirizzi 7, 15, 23 ecc. Questa "mappatura multipla" non da alcun fastidio, in quanto basta lavorare solo con gli indirizzi di I/O da 0 a 7 e tutto funziona a dovere.

Lo schema seguente indica in pratica come l'address decoder realizzato con i due 74138 può comandare 8 porte in ingresso e 8 in uscita tramite i segnali W0..W7 e R0..R7. Sul primo latch in uscita, comandato dal segnale W0, si scrive con OUT (0),A, sul secondo con OUT (1),A e sull'ultimo con OUT (7),A, la lettura è analaoga, dalla prima porta, comandata dal segnale R0, si legge con IN A,(0), dall'ultima con IN A,(7).
 

Si nota il BUS dati in rosso che raggiunge tutti gli integrati, e si evidenziano due problemi, il primo è di natura realizzativa, cablare gli 8 fili su 16 integrati significa in pratica cablare 128 fili, non è impossibile ma è oneroso. Il secondo problema riguarda il fan out dello Z80, cioè la capacità per le sue uscite di pilotare altri integrati esterni che è limitata a poche porte, questo significa che avrebbe difficoltà a gestire correttamente un BUS così "caricato" ed è necessario usare un buffer bidirezionale sul BUS dati:

 
Esempio di buffer bidirezionale

Usando l'integrato 74245 e una porta OR realizzare questo tipo di buffer è molto semplice, in questo circuito il pin DIR del 74245 controlla la direzione dei dati, è normalmente a 1 e i dati passano da A0..A7 a B0..B7, in pratica si propagano dal BUS dati dello Z80 al BUS dati bufferizzato. 

Solo nel caso di accesso in lettura da porta di I/O i segnali IORQ e RD combinati in OR portano a zero il pin DIR, in questo caso i dati vengono propagati dal BUS bufferizzato verso il BUS dati dello Z80 per essere letti.


 
Integrato SN74LS245

Questo integrato è un buffer bidirezionale a 8 bit e può connettere due BUS, uno sul lato A (A0..A7) e uno sul lato B (B0..B7). Se OE (abilitazione uscite) è a 1 sia il lato A che il lato B risultano in alta impedenza. Se OE è a zero uno dei due lati è l'ingresso e l'altro l'uscita, quale dei due sia l'ingresso viene stabilito dal pin DIR (direzione), se è a 1 allora il lato A è l'ingresso e viene propagato verso B, se è a zero invece è il lato B ad essere propagato verso A.


Pagina e disegni realizzati da Claudio Fin
Ultimo aggiornamento 13-6-2001