Pagina creata il 01/10/2012 [4392 giorni fa] |
Applicazioni Software | PROGETTO n° 16 - 6/6 [156 di 189] |
Analisi del Problema · Analisi del Codice · Procedure importanti · Schema interfaccia |
Porta Parallela - Conteggio di ogni tipo - Con Decoder con memoria 9368 |
Analisi delle procedure importanti |
La procedura Out08bit, dedicata alla gestione dell'interfaccia hardware costituita dai due decoder con memoria 9368, è descritta nella seguente casella di testo:
Progetto |
NB:
se il testo nell'Area ti
sembra strano installa il font Giobe.TTF: clicca qui!! |
|||||
Dopo aver assicurato (CALL OK_Dgt) la presenza di un livello alto sulla linea BI dei due decoder 9368 si limita a porre il valore corrente della variabile Depo (predisposto nel registro accumulatore AL dal codice chiamante) sul Registro d'uscita 0378H/0278H della porta parallela: immediatamente questo byte viene ripartito tra le due quaterne di linee d'ingresso dei due 9368 e, da essi, passato ai due digit, per l'istantanea visualizzazione.
La parte finale della procedura provvede a fare eco sul monitor di questo valore, in posizione centrale (riga 13, colonna 38) e con l'aiuto della potente procedura di conversione Byt2Asc, capace di tradurre un numero binario (non stampabile) in una stringa di caratteri ascii stampabili.
La casella di testo successiva analizza il codice delle prime due procedure (IncDepo e DecDepo) predisposte per supportare i 4 servizi di conteggio:
Progetto |
NB:
se il testo nell'Area ti
sembra strano installa il font Giobe.TTF: clicca qui!! |
|||||
Il loro compito si limita a prelevare il valore corrente dalla locazione Depo (puntata fin dall'inizio dal registro SI) e a provvedere rispettivamente al suo incremento o decremento di una unità, prima di rimetterlo al suo posto, a beneficio dei servizi citati; da notare la presenza delle istruzioni DAA e DAS (due tra le più potenti del set del processore 80x86): il ";" posto davanti ad esse fa si che l'assemblatore non le compili e che dunque il processore non le esegua; in questo modo il conteggio (in avanti o indietro) verrà condotto in esadecimale, sfruttando a pieno le capacità dei decoder 9368 così che, sui due Digit, alla visualizzazione .., "09" (associata al numero 09H) seguiranno le "0A", "0B", .. , "0F", "10", .. , legate ai numeri 0AH, 0BH, .. ,0FH, 10H, .. .
Togliendo il ";" posto davanti ad esse e ricompilando il sorgente, le istruzioni DAA e DAS saranno operative: il loro compito è quello di "aggiustare in decimale" il valore esadecimale dopo una somma o una sottrazione (nel nostro caso dopo un incremento o un decremento); in questo modo è possibile riadattare il codice macchina del nostro progetto per obbligarlo a mostrare sui due Digit un conteggio decimale (nonostante la natura esadecimale dei decoder 9368) così che la sequenza di coppie di simboli mostrata sarà del tipo: .., "09", "10", "11", .. , evitando di coinvolgere numeri che richiedono i sei simboli letterali del codice binario puro e provvedendo di fatto ad una visualizzazione BCD a due cifre.
NB: puoi collaudare e verificare la differenza direttamente: ho predisposto due diversi sorgenti, uno adatto a conteggi di tipo esadecimale (Exad9368.ASM, senza la presenza di DAA e DAS) e uno adatto a conteggi di tipo decimale (Deci9368.ASM, con la presenza di DAA e DAS). |
Progetto |
Exad9368.ASM/COM senza la presenza di DAA e DAS |
|||||
Deci9368.ASM/COM con la presenza di DAA e DAS |
La prossima casella di testo si occupa di un servizio collaterale ma non per questo banale; ho pensato di dare la possibilità di collaudare la linea d'ingresso BI (pin4 del 9368) intervenendo su di essa da software per forzarla a 1 (nel normale servizio di visualizzazione) o a 0 (per spegnere incondizionatamente i digit):
Progetto |
NB:
se il testo nell'Area ti
sembra strano installa il font Giobe.TTF: clicca qui!! |
|||||
La prima (la procedura OK_Dgt) è chiamata automaticamente dopo ogni richiesta di conteggio, mentre la seconda (il servizio BlkDgt) è imponibile solo su richiesta .. premendo il tasto "B".
In entrambi i casi questa azione è resa possibile programmando il bit0 del Registro di Controllo 037AH/027AH della porta parallela; non bisogna dimenticare che il valore del bit è invertito internamente per cui, forzandolo a 0, la linea in uscita dal corrispondente pin1 del connettore della parallela passa alta e, in questo modo, forza a 1 l'ingresso BI di entrambi i 9368, producendo la riaccensione immediata di tutti i segmenti dei Digit; effetto opposto si avrà ovviamente forzando il bit0: linea bassa su pin1, ingresso BI=0, attivo, e spegnimento immediato di tutti i segmenti di entrambi i Digit; da notare che (per una attenta gestione dell'informazione) anche la stringa visualizzata sul monitor viene cancellata con un paio di spazi:
L'ultima casella di testo descrive 4 dei 6 Servizi previsti per la gestione di questo progetto:
Progetto |
NB:
se il testo nell'Area ti
sembra strano installa il font Giobe.TTF: clicca qui!! |
|||||
Non si tratta di procedure ma di codice specificatamente pensato per rispondere propriamente alla pressione di un tasto autorizzato; a ciascuno di essi si accede infatti con un salto condizionato JZ address, la cui presenza a 1 stabilisce che l'evento si è verificato) e vi si esce con un salto incondizionato (JMP address) in un punto antecedente il loop d'attesa (.. non esiste dunque RET).
La cosa è particolarmente evidente: a) i primi due Servizi (IncByt e DecByt) si limitano semplicemente ad incrementare o decrementare il valore mostrato sui digit (e sul monitor) su diretta richiesta della pressione dei tasti "I" e "E", rientrando poco prima (con un JMP a livello XXX01) del Main Loop per consentire la visualizzazione, prima di una nuova attesa di tasti premuti; b) i rimanenti due Servizi (UpByt e DwnByt) sono più sofisticati: l'incremento o il decremento del valore mostrato deve continuare senza interruzioni, con cadenza di un secondo, per garantire un conteggio Up (attivato dalla pressione del tasto "U") o un conteggio Down (attivato dal tasto "D"); per questo è necessario appoggiarsi alla Funzione 01H della procedura a livello BIOS nota come INT 16H, che consente di verificare la eventuale pressione di tasti senza fermarsi; non appena viene rilevata la pressione di un tasto qualunque viene infatti imposto il rientro (con un JMP a livello XXX02) nel Main Loop.
Da notare che le temporizzazioni sono rese possibili dalla procedura Del_1000, in grado di generare un ritardo fisso di 1 secondo con particolare precisione, appoggiandosi per questo al Timer di sistema del personal computer.
Porta Parallela | PROGETTO n° 16 - 6/6 | |||||||
156 di 189 |
|
Home |
|
|||||||
|
Motore Ricerca |
|