Sezione

Indirizzi Base Registri Interni
Area Comunicazione BIOS Funzioni BIOS Funzioni DOS
Prefazione Capitolo 1 Capitolo 2 Schede
Libreria ASM Libreria MAC Palestra Progetti ASM
Info Download INDICE

Libreria GIOBE.ASM

Home » Programma il Computer » Tutorial Assembly

Raccolta di Procedure

  Raccolta di Procedure ASM

DelMicro 1/2 [31 di 54] 

    

bulletGenera un ritardo programmabile, multiplo di circa 1µs, in funzione del numero passato in ingresso.
bulletIl ritardo prodotto č svincolato quasi del tutto dalla velocitą del processore, anche con i pił moderni sistemi operativi  (Windows 2000/NT/XP.

  

bulletSulla 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.

 

bulletLa Procedura si chiama in questo modo:

               

  

bulletIn ingresso bisogna predisporre:
bulletBX con il numero da moltiplicare per il ritardo standard di 0,8381µs, ridotto di uno 0,5% in meno

 

bulletLa 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!!

               

Suggerimento 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.

               

bullet

L'analisi del codice (puoi scorrerlo con la barra laterale) mette in evidenza la tecnica utilizzata per garantire il ritardo con esattezza:
bulletsi 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)
bulletper 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
bulletla scrittura della porta B dell'interfaccia 8255 (=61H) dą il comando di partenza:
bulletponendo 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
bulletponendo il bit1=0 si evita che l'uscita del contatore venga spedita all'altoparlante, cosa ovviamente inopportuna
bulletda 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
bulletil 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)
bulletper 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 (?!)
bulletquando il contatore ha ultimato il suo conteggio indietro la sua uscita torna a 1
bulletin 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
bulletun nuovo intervento sui bit della porta B dell'interfaccia 8255 (=61H) pone fine alle operazioni:
bulletponendo il bit0=0 il clock viene tolto dall'ingresso al Canale2 del Timer
bulletponendo il bit1=0 si ribadisce l'esclusione funzionale dell'altoparlante

               

bulletLa 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.

               

bulletL'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.

               

bulletI 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

               

bulletVerifiche 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).
bulletUn buon compromesso...

               

bulletNon 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).

    

Pagina Precedente Libreria GiobeASM Pagina Successiva DelMicro 1/2   Torna alla Home  del Capitolo3 del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
31 di 54
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

    

Giobe.ASM » SET_cur | VIA_cur | RIP_cur | BIOScls| BIOSchr |BIObeep |Acapo| BIOchr1| STAsp| BIOSmsg
Byt2Asc | Wor2Asc | Asc2Byt | Asc2Wor | Byt2Dec | Wor2Dec | Dec2Byt | Dec2Wor
Delay | DelMicro | Del_2000 | Del1500 | Del_1000 | Del_100 | Del_1 | Del500Mi | Del200Mi
Del100Mi | Del010Mi | RIEMPI | KEYwait | Random | INstrin | CambiaCol | MODEtest
RAMchr | RAMcur | RAMmes | RAMcls | RAMcorn | RAMpiu | RAMrecup | RAMbyte | RAMword
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
Ā© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati