Il 74C923 è un decodificatore di tastiera a 20 tasti per
codice esadecimale; 16 pulsanti vanno da 0 a 9 e da A a F e altri 4 tasti
li utilizzeremo come tasti funzione. Per vedere il PinOut del 74C923 clicca qui.
L' integrato presenta delle uscite three-state con un uscita per
il dato valido ( DA=PIN13 ) che
va a '1' quando avviene la pressione di uno dei tasti. Basa il suo funzionamento
sulla costruzione di una griglia formata da 5 righe e 4 colonne, la chiusura
di una riga con una colonna darà in uscita il valore del tasto premuto.
Ha al suo interno un circuito antirimbalzo (antibounce) che evita la
ripetizione della stessa informazione per due volte.
Questo circuito antirimbalzo va completato con un condensatore da
100nF sul PIN7.
Al suo interno vi è gia un oscillatore che provvede a dare
il sincronismo per scandagliare righe e colonne ma va completato con
un condensatore da 10nF sul PIN5.
Se OE non è abilitato DA è
in alta impedenza; se OE è abilitato
DA è a '0' nel caso in
cui non si avesse premuto un tasto mentre è a '1' se premuto. E'
proprio grazie a DA (PIN13) che si potrà sapere,
via software, se è stato premuto un tasto o no.
Vediamo adesso come dovranno essere interpretate le uscite di questo
integrato (PIN16-20) analizzando
la parte terminale della tabella di verità:
E
|
D
|
C
|
B
|
A
|
N10
|
Nh
|
Tabella di verità (parziale) dell' integrato 74C923
Dalla tabella di verità si può
notare come si sfrutti il livello logico di E, per tanto finchè
E='0' il dato presente sul bus dati dovrà essere interpretato come
dato vero e proprio, quando E='1' si avranno 4 combinazioni dedicate a
funzionalità particolari.
HI e LO servono a far capire che sto immettendo rispettivamente la
parte alta e la parte bassa di un indirizzo, mentre DA che sto immettendo
un dato.
RUN serve ad eseguire il programma.
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
0
|
1
|
1
|
1
|
1
|
15
|
F
|
1
|
0
|
0
|
0
|
0
|
16
|
HI
|
1
|
0
|
0
|
0
|
1
|
17
|
LO
|
1
|
0
|
0
|
1
|
0
|
18
|
DA
|
1
|
0
|
0
|
1
|
1
|
19
|
RUN
|
Volendo porre ad esempio il numero 05h nella locazione di memoria
e000h dovrò:
- digitare prima la e , poi 0 e in seguito
HI
- digitare 0, 0 e poi LO
- digitare 0, 5 e in fine DA
Per poter immettere un numero questo deve essere mascherato, cioè
ripulito dalla parte che non serve. Questo perchè il microprocessore
riceve dal modulo tastierino un informazione ad 8 bit e non da 4 ( che
è l' informazione utile ), per tanto i 4 bit eccedenti andranno
cancellati e per farlo ci serviremo, via software, dell' operatore AND logico, moltiplicando il dato letto
sul bus dati per 0Fh. Supponiamo di voler immettere l' istruzione 2E tramite
il tastierino.
Questa operazione avverrà tramite le seguenti fasi:
- si immette tramite il tastierino la parte più
significativa di HI, LO o DA; nel nostro caso 2h=0010b.
- dal uP Z80 viene acquisito il dato presente sui
6 bit che gli arrivano dal modulo tastierino con in più gli ultimi
due bit più significativi con valore casuale (in genere sono segnali
alti), supponiamo che venga acquisito C2h=11000010b. Si dovrà adesso
moltiplicare il valore letto per 0Fh=00001111b di modo tale da lasciare
inalterati i 4 bit meno significativi utili e cancellare (azzerare) il valore
degli altri 4 bit, a termine di tale operazione otterremo 02h=00000010b.
- occorre adesso far "slittare" questo dato ottenuto
di 4 bit verso la parte più significativa per lasciare il posto
alla successiva informazione. L' istruzione che permette la rotazione è
RLC A (Rotate on the Left with Carry the register A) e adesso avremo 20h=00100000b.
A questo punto si salva il dato in un altro registro.
- si può immettere adesso la parte meno significativa
di HI, LO o DA; nel nostro caso Eh=1110b.
- anche in questo caso verrà effettuato l'
AND logico con 0Fh ma non verrà ruotato, facendo rimanere così
il dato nella parte meno significativa degli 8 bit, si avrà 0Eh=00001110b.
- a questo punto basta sommare il valore appena ottenuto
con quello precedente e si ottiene l' informazione a 8 bit completa:
20h+0Eh=2Eh che espresso in forma binaria diventa 00100000b+00001110b=00101110b.
- adesso si deve premere uno dei tasti funzione HI,
LO o DA a seconda che 2Eh sia la parte alta o la parte bassa di un indirizzo
o un dato.
- questa volta entra in giogo il segnale E del '923,
quindi ci dovrà essere un controllo che permetta, nel caso in
cui E='1', di passare al resto del programma per
la memorizzazione del dato e la visualizzazione aggiornata della situazione.
Da quanto ora esposto si può dedurre che per immettere un
valore occorre premere due tasti.
Grazie a questo modulo siamo ora in grado di scrivere qualsiasi programma
che vogliamo nella nostra RAM ricordando però che al termine della
fase di immissione del programma occorre ritornare alla prima locazione
di memoria dove è scritta la prima istruzione da eseguire dal programma
stesso e poi premere il tasto funzione RUN.
Quando torneremo alla prima locazione di memoria dovremo trovare
il codice della prima istruzione del programma che abbiamo inserito.
La tecnica utilizzata per l' interrogazione della tastiera è
la tecnica del Polling che consiste nell'
interrogazione ciclica e continua del periferico.
Tramite uno zoccolo a 14PIN ed il cavo piatto apposito porteremo
al uP Z80 i seguenti segnali:
PIN
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
14
|
Valore
|
A
|
B
|
C
|
D
|
E
|
DA
|
GND
|
OE
|
Vcc
|
Per vedere lo schema elettrico del modulo tastierino clicca qui.
Per vedere le foto di questo modulo clicca qui.
[Index][Scheda madre con uP Z80][Programma][Tastierino][Scheda visualizzazione][Scheda alimentazione e clock][Lista Argomenti]
|
|