Cronometro digitale

Materie:Appunti
Categoria:Informatica

Voto:

1.3 (3)
Download:420
Data:15.10.2001
Numero di pagine:4
Formato di file:.doc (Microsoft Word)
Download   Anteprima
cronometro-digitale_1.zip (Dimensione: 44.53 Kb)
trucheck.it_cronometro-digitale.doc     99.5 Kb
readme.txt     59 Bytes


Testo

Realizzazione di un cronometro digitale.

Scopo:
Realizzare un programma in Assembly che gestisca attraverso il microprocessore Z80 un cronometro digitale a 4 display, utilizzando il contatore/timer programmabile Z80 CTC.
Cenno teorico:
Il CTC (Counter timer circuit) è un contatore/timer programmabile a quattro canali ed è un interfaccia hardware/software con lo Z80.
La sua piedinatura è riportata di seguito:

La sua struttura interna comprende un interfaccia con il bus dati dello Z80, una logica di controllo interno, una logica di controllo degli interrupt e la logica di conteggio/temporizzazione. Quest’ultima è costituita da quattro circuiti indipendenti detti comunemente canali, ciascuno strutturato attorno a un down counter a 8 bit, affiancato da un registro per la memorizzazione del dato iniziale di conteggio (costante di tempo), da un divisore della frequenza del clock di sistema (prescaler) e da un registro di controllo il cui contenuto determina il modo di funzionamento del contatore. I 4 canali, numerati da 0 a 3, sono identici, tranne che per l’assenza nel 3 dell’uscita esterna di segnalazione fine conteggio e per il reciproco livello di priorità degli interrupt che possono generare.
Struttura di un canale del CTC:

Ogni canale è individuato dalla combinazione di bit sugli ingressi di selezione CS1, CS0 infatti:
CS1 CS0 CANALE
L L 0
L H 1
H L 2
H H 3
I possibili modi di funzionamento, selezionabili indipendentemente per ciascun canale sono 2:
»» MODO TIMER
Il canale conta gli impulsi di clock di sistema, scalati di un fattore di prescaling di 16 o 256, a partire dal valore iniziale impostato cioè la costante di tempo che va da 0 a 255, con 0 che sta per 256); l’inizio del conteggio può essere attivato via software e coincide allora con il fronte di salita del secondo impulso di clock del ciclo di macchina successivo al caricamento della costante di tempo, oppure via hardware tramite l’ingresso CLOCK/TRIGGER. In quest’ultimo caso il fonte attivo può essere a scelta quello di salita o di discesa. La fine del conteggio (contatore che raggiunge lo 0) è segnalata da un impulso alto sull’uscita ZC/TO (Zero Count/Time Out), della durata di un ciclo di clock, e dalla generazione di una richiesta di interrupt. Una volta raggiunto lo zero, il successivo impulso di clock ricarica nel contatore la costante di tempo, e il ciclo ricomincia.

»» MODO COUNTER
In questo modo di funzionamento il contatore deconta i fronti attivi dell’ingresso CLK/TRG. Gli impulsi di trigger devono avere una durata minima, diversa per le varie versioni e il loro periodo di ripetizione dev’essere almeno pari a due periodi del clock di sistema. Sull’uscita ZC/TO si produce quindi un impulso ogni N impulsi all’ingresso CLK/TRG (N costante di tempo): il contatore funzione da divisore di frequenza. Più canali possono essere messi in cascata per ottenere rapporti di divisione più elevati.
La programmazione di un canale consiste nella scrittura alla locazione corrispondente di uno o due byte successivi:
la parola di controllo canale,
la costante di tempo,
e eventualmente in aggiunta un vettore di interruzione, comune, a tutti e quattro i canali, da scrivere alla locazione corrispondente a CTC0.

➢ La parola di controllo canale (channel control word) ha formato:
D7 D6 D5 D4 D3 D2 D1 D0
Dove i bit D7 D6 D4 D2 D1 D0 significano:
D0 = 1 Individua il byte come parola di controllo.
D1 = 0 La scrittura della parola di controllo non interrompe il conteggio1
1 Determina un reset software all’atto della scrittura: il conteggio si interrompe e il contatore
ripristina sul valore iniziale.
D2 = 0 Non segue la costante di tempo; condizione usata per riprogrammare il canale senza
modificare la costante di tempo.
1 Segue costante di tempo; il canale interpreta il prossimo byte in scrittura come costante di
tempo.
D3 = 0 Sceglie come fronte attivo di CLK/TRG quello di discesa.
1 Sceglie come fronte attivo di CLK/TRG quello di salita.
D4 = 0 Sceglie il modo di funzionamento timer.
1 Sceglie il modo di funzionamento counter.
D7 = 0 Disabilita la generazione di interrupt da parte del canale.
1 Abilita la generazione di interrupt .
I rimanenti bit hanno significato solo nel modo timer, e sono indifferenti nel modo counter:
D3 = 0 Inizio temporizzazione al caricamento della costante di tempo (trigger software).
1 Inizio temporizzazione su trigger hardware via CLK/TRG.
D5 = 0 Fattore di prescaling = 16.
1 Fattore di prescaling = 256.
➢ La costante di tempo (time costant word) va caricata dopo un control word con 1 in posizione 2, è il valore cui viene inizializzato il conteggio: va ovviamente da 0 a 255, ma 0 è interpretato come 256. Nel modo timer, il suo prodotto per il fattore di prescaling rappresenta la durata della temporizzazione in periodi di clock.
➢ Vettore delle interruzioni (interrupt control word) determina la parte bassa dei vettori di interruzione che i canali, se abilitati, mettono sul bus dati in un interrupt aknowledge. Va scritta alla locazione del canale 0 e l’operazione attribuisce i vettori di interruzione (parte bassa) a tutti e quattro i canali, mentre la parte alta dei vettori al solito è nel registro dello Z80.

Esempio