 |
L'analisi del codice (puoi scorrerlo con la
barra laterale)
mette in evidenza la tecnica utilizzata per garantire il ritardo con
esattezza:
 | si predispone il
Canale2 del
Timer di Sistema per generare un
impulso (Modo 000)
e per contare indietro in binario; la programmazione del
Timer inizia sempre con la scrittura
della parola di comando del suo
Registro di Controllo (porta
0043H) |
 | per poter esercitare il servizio č poi necessario
predisporre il latch di temporizzazione (a 16 bit) con il
valore presente in ingresso in BX;
poichč la porta d'accesso del latch č di soli 8
bit, per scriverci bisogna fare 2 accessi di I/O, prima con la
parte bassa e
poi con la parte alta |
 | la scrittura della porta B
dell'interfaccia 8255 (=61H)
dą il comando di partenza:
 | ponendo il bit0=1
il clock
(un segnale di 1,19318 MHz, pari ad periodo di
838,1ns) č reso disponibile in ingresso
al
Canale2 del Timer |
 | ponendo il bit1=0
si evita che l'uscita del contatore venga spedita all'altoparlante, cosa
ovviamente inopportuna |
|
 | da questo istante il contatore
comincia a decrementare il valore della
costante preimpostata, ad ogni impulso di
clock; contemporaneamente la sua uscita,
alta a riposo,
va bassa e rimane a questo livello fino
al momento in cui il conteggio raggiunge il valore
0000H |
 | il valore corrente del conteggio
viene letto in continuazione in un
loop d'attesa; per questo č necessario fornire
ogni volta la relativa
parola di comando al
Registro di Controllo (porta
0043H) |
 | per scoprire quando il conteggio raggiunge il valore
0000H ho dovuto
inventarmi un non facile algoritmo
di verifica: non sono infatti
riuscito a rilevare
lo stato logico del segnale generato dal
Canale2; secondo la letteratura esso
dovrebbe essere campionabile attraverso il bit5
della porta C dell'interfaccia
8255 (=62H), ma la lettura
di questo registro non ha dato risultati (?!) |
 | quando il contatore ha ultimato il suo
conteggio indietro la sua
uscita torna a 1 |
 | in condizioni normali il
contatore viene ricaricato automaticamente con la
costante ancora presente nel suo latch,
ricominciando un nuovo conteggio; in questa procedura invece non č necessario:
il ritardo programmato si č
consumato regolarmente |
 | un nuovo intervento sui bit della
porta B dell'interfaccia 8255
(=61H) pone fine alle operazioni:
 | ponendo il bit0=0
il clock viene tolto dall'ingresso al
Canale2 del Timer |
 | ponendo il bit1=0
si ribadisce l'esclusione funzionale dell'altoparlante |
|
|