LUCRAREA nr. 7

Circuitul contor/ temporizator

1. Obiectivul lucrării

În cadrul acestei lucrări de laborator se va programa circuitul contor/ temporizator Z80 CTC și cu ajutorul lui se va masura timpul de execuție pentru un anumit program.

2. Considerente teoretice

Circuitul contor/ temporizator Z80 CTC conține patru canale independente, fiecare canal având un contor pe 8 biți cu decrementare. Cu ajutorul lui se pot număra evenimente, temporiza întreruperi sau genera diferite frecvențe.

Circuitele numărătoare-temporizatoare au structura prezentată în figura 7.1.

Iar un numărător împreună cu blocul de prescalare este prezentat în figura 7.2.

Logica de control a canalului primește cuvântul de control pe 8 biți când se programează canalul, decodifică cuvântul de control și fixează condițiile de validare a întreruperilor, modul de funcționare (contor sau temporizator), factorul de prescalare în modul temporizator (16 sau 256), frontul activ pentru intrarea CLK/TRG, apariția unui cuvânt de date pentru constanta de timp, sau inițializarea prin program.

Registrul constantei de timp primește și încarcă constanta de timp de 8 biți la programarea canalului. Valoarea ei este cuprinsă în domeniul 1-256 și este automat încărcată în numărător când este inițializat canalul și în continuare după fiecare trecere prin 0 a numărătorului.

Prescalarea se efectuează doar în modul temporizator și constă în divizarea frecvenței de tact a sistemului cu 16 sau 256. Ieșirea circuitului de prescalare constituie intrare pentru numărător în timpul funcționării ca temporizator.

Numărătorul canalului este încărcat cu valoarea stocată în registrul constantei de timp înaintea fiecărui ciclu de numărare. Numărătorul este decrementat în funcție de modul de funcționare prin:

Unitatea centrală poate citi conținutul numărătorului în orice moment, fără a afecta numărarea, printr-o operație de citire de la adresa portului asociat canalului din circuitul CTC. Când numărătorul atinge valoarea 0, ieșirea ZC/TO generează un impuls pozitiv. Când întreruperile sunt validate, atingerea lui 0 generează de asemenea și o cerere de întrerupere.

2.1 Terminalele circuitului

În figura 7.3 sunt prezentați pinii circuitului Z80 CTC.

/CE – intrare de validare a circuitului PIO;

CLK – intrare de tact;

CLK/TRG0 - CLK/TRG3 – intrări active pe “0” sau pe “1”, conform selecției utilizatorului; sunt semnale de tact extern și respectiv declanșare temporizator. Cele patru intrări corespund celor patru canale în modul următor: fiecare front activ pe acest pin decrementează numărătorul iar în modul temporizator un front activ declanșează temporizatorul;

CS0 - CS1 – linii de selecție a unuia din cele patru canale;

D0-7 – magistrala de date utilizată pentru transferul de date și comenzi între CPU și PIO;

IEI – intrare de validare a întreruperilor;

IEO – ieșire de validare a întreruperilor;

/INT – ieșire pentru cerere de întrerupere;

/IORQ – cerere de intrare/ ieșire, activat de CPU și este folosit la selecția circuitului;

/M1 – intrare care indică primul ciclu mașină; provine de la CPU și este utilizat la controlul unor operații interne;

/RD – intrare care indică o operație de citire.

/RESET – intrare de inițializare. Termină toate numărările în jos și devalidează întreruperile;

ZC/TO0 - ZC/TO2 – ieșiri de număr zero respectiv timp expirat. Cei trei pini corespunzători canalelor 0, 1 și 2 ale circuitului CTC furnizează un impuls “1” atât în modul numărător cât și în cel de temporizator, când numărătorul descrescător al canalului a atins valoarea zero.

2.2 Programarea circuitului

Fiecare canal trebui programat înainte de funcționare. Programarea constă în scrierea a două cuvinte în portul de intrare/ ieșire care corespunde canalului, în această ordine. Primul este un cuvânt de control care selectează modul de funcționare și alți parametri. Al doilea cuvânt este o constantă de timp pe 8 biți, cu valoarea între 1 și 256.

După inițializare canalele pot fi programate în orice moment. Dacă se înscriu cuvinte de control și constante de timp reactualizate într-un canal în timpul funcționării acestuia, numărarea continuă până la 0 înainte ca să fie încărcată noua constantă de timp în numărător.

Dacă este validată întreruperea pe oricare canal din CTC, procedura de programare trebuie să includă și un vector de întrerupere. Este necesar un singur vector de întrerupere pentru toate canalele, deoarece logica de întrerupere modifică în mod automat vectorul pentru canalul care solicită întreruperea.

Cuvântul de control este identificat de un “1” în bitul 0 iar vectorii de întrerupere au “0” în bitul 0. Cuvântul de control este prezentat în figura 7.4.

Programarea vectorului de întreruperi trebuie efectuată dacă circuitul Z80 CTC are validate una sau mai multe întreruperi. Pentru a putea furniza vectorul de întreruperi spre unitatea centrală, circuitul CTC trebuie să fie programat cu cei 5 biți mai semnificativi ai vectorului de întreruperi (figura 7.5). Programarea constă în înscrierea unui cuvânt vector la portul corespunzător canalului 0 al circuitului CTC. Cei doi biți mai puțin semnificativi din vectorul de întreruperi sunt furnizați de logica de întreruperi pentru identificarea canalului care a cerut servirea prin întrerupere, cu un vector de întrerupere unic. Canalul 0 are cea mai mare prioritate.

3. Mersul lucrării

În cadrul lucrării de laborator se va folosi circuitul CTC pentru măsurarea duratei execuției unuor programe. Pentru aceasta se va folosi canalul 2 din Z80 CTC, programat ca și temporizator, cu un factor de prescalare de 256, front activ căzător, declanșare automată, iar constanta de timp este 00h (256). Se activează și întreruperile pentru contorul , pentru programele de dimensiuni mai mari, care ar depăși capacitatea de numărare a unui registru pe 8 biți.

Se vor vizualiza cu ajutorul osciloscopului ieșirile CRT pentru diferitele moduri de programare ale acestuia.