|
 |
Raccolta di Procedure ASM |
DelMicro 1/2
[31 di 54] |
 | Genera un
ritardo programmabile, multiplo
di circa 1µs,
in funzione del numero passato in ingresso. |
 | Il ritardo prodotto č svincolato
quasi del tutto dalla velocitą del processore, anche con i pił
moderni sistemi operativi (Windows 2000/NT/XP. |
 | Sulla base di questa
Procedura
ho reso disponibili anche le
Del010Mi,
Del100Mi,
Del200Mi,
Del500Mi e
Del_1,
pronte a consumare rispettivamente
10 µs,
100 µs,
200 µs ,
500 µs e
1
ms. |
 | La Procedura
si chiama in questo modo: |
 | In
ingresso bisogna predisporre:
 | BX
con il numero da moltiplicare per il ritardo standard
di 0,8381µs,
ridotto di uno 0,5% in meno |
|
 | La seguente Area di Testo
mostra una parte del Modulo varie15 utilizzato per
inserire la Procedura
nella Libreria
Giobe.ASM/LIB: |
|
DelMicro/ varie15 |
NB: se il testo contenuto nell'Area
ti
sembra strano (cioč se contiene
caratteri inconsueti) non hai ancora
installato il font
Giobe.TTF
:
clicca qui!! |
 |
I problemi legati alle
procedure di ritardo di
durata inferiore a 55 ms
sembravano di difficile soluzione; alla loro analisi ho dedicato la
pagina seguente. |
 |
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 |
|
|
 | La descrizione della Procedura
mostra che la sua dipendenza dal
Canale2 del
Timer di Sistema
non č assoluta; per
controllarne il valore corrente č
necessario eseguire un certo numero di
istruzioni, la cui durata inquina il
tempo di ritardo finale, non essendo in
alcun modo prevedibile. |
 | L'esecuzione di queste istruzioni dipende infatti dalla
velocitą del processore chiamato ad eseguirle; per questa ragione, sebbene sia possibile chiamare
DelMicro da sola
(con un consumo di tempo di circa
1µs),
per evitare che le istruzioni di contorno
possano incidere in misura considerevole sul ritardo effettivo, č
consigliabile chiamarla con
costante
BX pari almeno
a 10, cioč a partire da un ritardo di
10 µs. |
 | I valori esatti di questa
costante di tempo, calcolati a partire
dalla durata minima (0,8381
µs)
dell'impulso generato dal
Canale2 del
Timer, sono raccolti nella seguente tabella: |
| ritardo |
Delay |
|
ritardo |
Delay |
|
1 |
~ 1 µs |
0.84 µs |
96 |
~ 80 µs |
80.5 µs |
|
2 |
~ 2 µs |
1.67 µs |
120 |
100 µs |
100 µs |
|
3 |
~ 3 µs |
2.51 µs |
239 |
200 µs |
200 µs |
|
4 |
~ 3 µs |
3.35 µs |
478 |
400 µs |
400 µs |
|
5 |
4 µs |
4.19 µs |
597 |
500 µs |
500 µs |
|
6 |
5 µs |
5.03 µs |
1194 |
1 ms |
1 ms |
|
7 |
~ 6 µs |
5.87 µs |
2387 |
2 ms |
2 ms |
|
8 |
~ 7 µs |
6.70 µs |
4773 |
4 ms |
4 ms |
|
9 |
~ 7 µs |
7.54 µs |
5966 |
5 ms |
5 ms |
|
10 |
~ 8 µs |
8.38 µs |
11932 |
10 ms |
10 ms |
|
11 |
~ 9 µs |
9.22 µs |
23864 |
20 ms |
20 ms |
|
12 |
10 µs |
10.0 µs |
47728 |
40 ms |
40 ms |
|
24 |
20 µs |
20.1 µs |
59660 |
50 ms |
50 ms |
|
48 |
40 µs |
40.2 µs |
65535 |
~ 55 ms |
54,9 ms |
|
60 |
~ 50 µs |
50.3 µs |
65536 |
~ 55 ms |
54,9 ms |
 | Verifiche eseguite su computer di diversa velocitą
consigliano di applicare una
riduzione dello
0,5%, per tener conto del tempo consumato nell'esecuzione delle
istruzioni interne al ciclo, le uniche ad
essere veramente influenti; con questa riduzione la procedura, chiamata 50000
volte, mostra sul ritardo atteso un
leggero anticipo con processori veloci (es 2 GHz)
e un leggero ritardo con processori lenti (es 500
MHz). |
 | Un buon compromesso... |
 | Non dimenticare che, comunque, pur mostrando di essere
efficiente anche sui grandi numeri, questa procedura č nata per assicurare
ritardi portabili per
valori piccoli della
costante predisposta in ingresso in BX
, cioč per tempi inferiori a 55ms; per tempi superiori conviene
riferirsi alla Procedura
Delay e
alle sue derivate,
Del_100
(100ms),
Del_1000
(1s),
Del_1500 (1,5s)
e
Del_2000
(2s). |
Ā©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|