Sunteți pe pagina 1din 12

LUCRAREA NR.

Studiul circuitului contor/temporizator.


Utilizarea acestor circuite in sistemele de achizitie a datelor.

1. Obiectivul lucrării:

Familiarizarea studenţilor cu o serie de elemente legate de proiectarea si simularea unor


scheme de interfatare folosind circuitul contor/temporizator precum si cu modul de realizare a
unor programe de lucru cu acest circuit folosind microprocesorul I8086 si microcontrolerul
I8051. Deprinderea studenţilor cu modul de realizare a unei aplicaţii din acest domeniu folosind
mediul de dezvoltare PROTEUS si mediul de dezvoltare a programelor KEIL microvision..

2. Consideraţii teoretice

Rolul circuitelor de interfata este in esenta acela de a asigura schimbul de date (intrari/iesiri)
si semnale cu exteriorul.

Cele mai utilizate circuite de interfata programabile sint :


-interfata seriala (SIO pentru Z80, si I8251,I8250, etc.
pentru I8086);
-interfata paralela (PIO pentru Z80 si I8255 pentru I8086);
-circuit contor/temporizator (CTC Z80, I8253);

Obiectul acestui laborator il constituie utilizarea circuitului de interfata


contor/temporizator I8253. Aceasta presupune cunoasterea prealabila a modului de lucru cu
procesoarelor centrale cu setul de
instructiuni aferent.

Din setul de instructiuni al procesorului (de transfer, aritmetice, logice, salt, etc.) vom folosi
pentru programareacircuitelor de interfata periferice si pentru transferul de date
instructiunile IN si OUT pentru 8086 (se foloseste tehnica de lucru cu porturi izolate de
memorie) si MOVX pentru 8051 (se foloseste in acest caz tehnica de lucru memory-map I/O
in care porturile sunt vazute ca locatii de memorie).

Obs. Maniera de lucru cu toate aceste circuite de interfata este oarecum similara deoarece
toate aceste circuite sunt vazute de processor ca un set de porturi de intrare/iesire.

Prezentarea generala a circuitului I-8253

Interfata cu logica externa

Circuitul numarator/temporizator 8253 este alcatuit in principal din trei numaratoare de 16


biti independente, care pot lucra binar sau BCD, numarind DOWN.

Pentru fiecare contor exista un pin corespunzator semnalului de clock (CLK), semnalului de
validare GATE, si semnalului de iesire OUT.

Interfata cu microprocesorul
Conectarea la busul de date al microsistemului se face prin
intermediul bufer-ului pe 8 biti, bidirectional, 3 stari
(D0-D7).

Tot in partea de interfata cu microprocesorul exista semnalele A0, A1, RD, WR, CS, functie
de combinatia acestora rezultind toate operatiile posibile ale circuitului 8253.
__ __ __
CS RD WR A1 A0
--------------------------------------------
0 1 0 0 0 incarcare contor 0
0 1 0 0 1 incarcare contor 1
0 1 0 1 0 incarcare contor 2
0 1 0 1 1 scrierea cuvintului de control
0 0 1 0 0 citire contor 0
0 0 1 0 1 citire contor 1
0 0 1 1 0 citire contor 2
1 x x x x circuit neselectat
--------------------------------------------------------------
Programarea circuitului I8253

Pentru selectia modului de lucru al fiecarui contor se


utilizeaza un cuvint de comanda cu urmatorul format:
D7 D6 D5 D4 D3 D2 D1 D0
SC1 SC0 RL1 RL0 M2 M1 M0 BCD

SC1 SC0 -biti selectie contor


0 0 selectie contor 0
0 1 selectie contor 1
1 0 selectie contor 2

RL1 RL0 -biti citire/incarcare


0 0 citire contor in timpul decrementarii
1 0 citire/incarcare cel mai semnificativ byte
0 1 citire/incarcare cel mai putin semnificativ byte
1 1 citire/incarcare cel mai putin semnificativ byte
apoi cel mai semnificativ.

M2 M1 M0 selectie mod BCD - 1 - contor BCD


0 0 0 mod 0 0 - contor binar
0 0 1 mod 1
X 1 0 mod 2
X 1 1 mod 3
1 0 0 mod 4
1 0 1 mod 5

Modurile de lucru

Circuitul contor/temporizator poate lucra atat in modul numarator, in care caz numara
evenimente care activeaza semnalul de clock CLK al unuia din cele trei numaratoare cat si in
modul temporizator cand furnizeaza la iesirea Out al numaratorului cu care se lucreaza
semnale avand durate bine definite.

Selectia modului de lucru in modul temporizator se face cu ajutorul bitilor M0-M2 din
cuvantul de comanda.

Avem urmatoarele moduri de lucru :

Modul 0 este numit si numarare cu oprire cind registrul ajunge


la 0. Dupa setarea numaratorului, semnalul OUT de
iesire devine LOW si se mentine astfel pina la
terminarea numararii, cind devine HIGH. Ramine la
aceasta stare pina la o noua selectie de mod sau pina
la o noua incarcare.
Modul 1 este definit ca monostabil programabil. Iesirea
contorului va trece de la un nivel HIGH la unul LOW
numai dupa ce cuvintul de comanda si contorul au fost
incarcate, iar semnalul aplicat la poarta are o
tranzitie pozitiva. Aceasta tranzitie declanseaza
decrementarea care la atingerea valorii finale (0) va
duce la un nivel HIGH iesirea contorului selectat.
Fig.2. Formele de unda care ilustreaza functionarea circuitului I8253
Modul 2 este definit ca generator de impulsuri divizate cu N.
Iesirea va fi fortata la nivel LOW dupa incarcarea
cuvintului de comanda si a numaratorului incarcat cu
constanta N, pe o perioada egala cu cea a semnalului
de clock. Perioada impulsurilor astfel generate va fi
egala cu N.
Modul 3 este definit ca generator de impulsuri
dreptunghiulare. El este similar cu modul 2, cu
exceptia faptului ca iesirea va ramine la un nivel
ridicat pina la realizarea decrementarii, conform cu
N/2 sau ( N+1 )/2 intervale de clock si la nivel
coborit pentru celelalte N/2 sau (N-1)/2 intervale de
clock, dupa cum N este par sau impar.

Modul 4 definit ca strob comandat prin software, asigura o


iesire la nivel ridicat dupa stabilirea modului.
Decrementarea contorului selectat are loc dupa
incarcarea lui cu numarul dat. Iesirea va fi fortata
la nivel coborit pe durata unei perioade a semnalului
de clock, cind contorul a fost decrementat la zero.
Modul 5 definit ca strob comandat prin hardware, asigura
decrementarea contorului selectat, dupa incarcarea
lui, incepind cu frontul crescator al semnalului
aplicat la poarta GATE. Iesirea va fi fortata la nivel
LOW, pe durata unei perioade de clock in momentul in
care continutul contorului a devenit 0.

Citirea continutului unui contor se poate face in doua moduri


diferite.

In primul mod citirea se face in timpul decrementarii. Pentru aceasta, continutul contorului
care urmeaza sa fie citit se forteaza intr-un registru suplimentar din circuitul 8253,
contorul continuind operatia de decrementare. Bitii SC0,SC1 din cuvintul de comanda
specifica contorul al carui continut va fi salvat in vederea citirii iar bitii RL0,RL1 vor fi ambii
zero.

In al doilea mod de citire se blocheaza in prealabil clock-ul printr-o logica externa sau
controlind semnalul de comanda la poarta GATE.

Aplicatia 1

Programul propus spre studiu este o aplicatie pentru circuitele


I8255 si I8253. Acest exemplu creeaza un sunet cu frecventa
ascendenta. Circuitul I8255 are rolul de a cupla si decupla
difuzorul calculatorului in timp ce cu ajutorul circuitului I8253
se genereaza un semnal cu o frecventa variabila, care produce
sunetul dorit.
Iata o schema bloc a circuitelor implicate:
I8255 I8253

PB0
PB1 OUT2
GATE2

AND AMPLIF DIFUZOR

Adresele porturilor implicate sunt:

Portul B I8255 61h


Contor 2 I8253 42h

In programul de mai jos trebuie urmarite urmatoarele probleme:


- modul de formare al adresei la operatia de citire port
PB I8255 pe magistrala de date a calculatorului;
- modificarea bitilor, PB0, PB1, care valideaza semnalul
de la timer si conecteaza difuzorul la timer, prin operatia de
scriere la portul B;
- modul de formare al adresei la operatia de scriere pentru
incarcarea contorului 2 cu noua constanta de divizare;
- identificarea buclei principale a programului, cu 10000
pasi, in care se face modificarea constantei de divizare prin
decrementare.

.model small
;---------------------------------
sound equ 61h ;adresa pentru 8255
timer equ 42h ;adresa pentru 8253
on equ 00000011b ;bitul 0 programat 1 semnifica
;validare generare semnal
;dreptunghiular de catre I8253
;vezi semnalul TIM2GATE
;bitul 1 programat 1 semnifica
;dirijare catre difuzor a
;semnalului
;vezi semnalul SPKDATA

.code
;----------------------------------inceput standard
start: mov ax,@data
mov ds,ax
;----------------------------------
in al, sound ;pozitioneaza portul I-8255
or al, on ;activeaza difuzor si
out sound, al ;conecteaza timer
;----------------------------------
mov al, 100 ;programare timer
sounder: out timer,al ;trimite octetul la timer
;----------------------------------
mov cx,10000 ;intirziere
hold: loop hold
dec al
jnz sounder
in al,sound
and al,NOT on
out sound,al
;----------------------------------terminare standard
mov ah,4ch
int 21h
end start

Dupa lansare veti constata producerea semnalului in difuzor cu o frecventa


variabila o perioada de timp, dupa care se revine la continutul anterior al portului 8255 si deci
se produce deconectarea difuzorului.

Aplicatia 2

Determinarea prin program a frecventei de ceas a procesorului

Calculul frecventei de ceas prin program se bazeaza pe masurarea duratei unei secvente
de instructiuni cunoscute. Metoda necesita un etalon de timp (sau de frecventa).
Acest etalon poate fi ceasul de timp real din sistem. Constructiv, acesta este realizat cu
ajutorul unui circuit 8253 (canalul 0) al carui semnal de tact are valoarea cunoscuta de
1.19 MHz (indiferent de modelul calculatorului compatibil IBM-PC XT, AT,
sau PS/2).

Instructiunile utilizate in secventa de test trebuie sa fie cit mai simple si executabile in
acelasi numar de tacte, indiferent de procesor. In plus, este preferabila o secventa liniara de
instructiuni, fata de una cu ramificatii care este greu controlabila. Metoda este supusa unor
erori inerente datorate: ciclurilor de reimprospatare a memoriei RAM dinamic, starilor de
asteptare (WAIT) caracteristice interfatarii cu circuite lente, cedarea ma-
gistralei catre un alt master (de exemplu DMA), etc. Aceste erori pot fi totusi minimizate. In
acest scop este bine sa se respecte urmatoarele recomandari:

a. In bucla de program se vor reduce pe cit posibil accesele la memorie.

In acest mod se inlatura efectul eventualelor stari WAIT introduse si a ciclurilor pierdute
datorita reimprospatarii memoriei RAM dinamic.
b. Se vor limita ramificatiile programului (instructiunile de salt).

Un program liniar elimina timpii necesari accesarii memoriei datorita preluarii


instructiunilor din stiva (coada) interna.

c. In secventa de contorizare se vor utiliza instructiuni simple cu timp de executie bine


definit.

d. Este preferabil sa se utilizeze instructiuni ce consuma acelasi numar de stari indiferent de


tipul procesorului.

e. Se vor lua masuri pentru a se evita intreruperea buclei de contorizare.

Masurarea duratei unei secvente de instructiuni cunoscute se poate face cu ajutorul timerului
programabil 8253. Canalul 2 al acestuia (utilizat la generarea sunetelor) este cuplat tot la cea
sul de 1.19 MHz (intrarea CLK2). In plus, intrarea de autorizare a numararii (GATE2) poate
fi controlata prin program cu ajutorul unui port de control (portul B al circuitului 8255).

2.3 Programul de determinare a frecventei procesorului

in al,61H ;citire port ce controleaza intrarea


GATE pentru 8253
and al,11111110B ;bit 0=0, semnifica invalidare (semnal GATE inactiv)
out 61H,al ;opreste contorul 2
mov al,10110000B ;pregatire cuvint comanda
out 43H,al ;scriere cuvint comanda
mov al,0FFH
out 42H,al
out 42H,al ;modul 0 cu constanta maxima
in al,61H
or al,00000001B ;bit 0=1, semnifica validare (semnal GATE activ)
cli ;dezactivare sistem de intreruperi( IF=0)
out 61H,al ;start numarare (decrementare)
........ (Secventa de instructiuni de masurat)

in al,61H
and al,11111110B
out 61H,al ;opreste numararea
sti ;activare sistem de intreruperi
in al,42H ;citire de la 8253
mov ah,al
in al,42H
xchg al,ah ;citeste cit a mai ramas in AX
mov bx,0FFFFH
sub bx,ax ;rezultatul se afla in BX

In registrul BX se obtime numarul de decrementari ale contorului la


frecventa de ceas a circuitului I8253, de 1,9MHz.
O secventa de instructiuni de masurat poate fi un lant de NOP-uri suficient de lung.Calculul
frecventei se poate face simplu din relatiile:

Tsecv  t CLK  d NOP  n NOP


d NOP  n NOP
Tsecv 
t CLK
dar :
x
Tsec v  t8253  x 
f 8253
unde x reprezinta numarul citit in BX iat f8253 reprezinta frecventa ceasului aplicat
circuitului I 8253 (1,9 MHz) Rezulta :

f 8253  d NOP  n NOP


f CLK 
x

in care:
f = frecventa de tact a numaratorului 8253;
8253
f = frecventa de tact a procesorului;
CLK
d = numarul de stari al unei instructiuni NOP (3);
NOP
n = numarul de instructiuni NOP din secv. de test.
NOP

Problema 1
Prin programarea contorului 2 o perioada de timp cu o frecventa
dupa care aceeasi perioada cu alta frecventa, scrieti un program
prin care sint emise "simultan" doua sunete.
Problema 2
Incercati sa evidentiati separat actiunea celor doua iesiri PB0si PB1.
Problema 3
Cu ce alte moduri de lucru ale numaratorului puteti obtine semnale sonore? Evaluati
diferentele.

Anexa

Pentru calculatoarele IBM/PC - Registrii I8253 sunt vazuti la urmatoarele adrese:

port timer utilizare


40h 0 ceasul sistemului
41h 1 refresh (prin DMA)
42h 2 speaker
43h control
3. Desfãşurarea lucrãrii

1. Sa se editeze in Borland C programul in limbaj de asamblare pentru aplicatia 2 si se


salveaza cu numele lab5xx.asm, unde xx reprezinta initialele numelui
2. Sa se asambleze programul folosind comanda
TASM /la /zi lab5xx
3. Se linkediteaza programul folosind comanda
TLINK /v /s lab5xx
4. Se urmareste executia programului prin incarcarea sa in Turbo Debugger

5. Se realizeze schema de interfatare a circuitului I8253 la microcontrolerul 8051

Fig.4 Schema de interfatare a circuitului I8255 la microcontrolerul 8051

In Fig.4 se arata modul de interconectare a circuitului I8253 la microcontrolerul 8051.


Semnalelefolosite in lucrul cu circuitele de memorie exterioare sunt urmatoarele:
 ALE- (Address Latch Enable) folosit pentru demultiplexarea datelor si
adreselor
 -WR pwntru comanda de strobare a datelor in circuitele de memorie sau
porturi
 -RD pentru activarea iesirilor circuitelor de memorie sau a circuitelor ce
contin porturile
Pentru proiectarea circuitelor de selectie a circuitelor de memorie se pleaca de la Harta
de alocare a memoriei. In cazul nostru, ilustrat in Fig.5, harta de alocare a memoriei este
data in Fig.5.
A15 A14 A13 A12 .... A0
0 0 0 0 ..... 0 Nu e alocat
1 ..... 1
0 0 1 0 ... 0 Nu e alocat
1 .... 1
0 1 0 0 … 0 I8253
0 1 1 1 … 1 primul
0 ... 0 I8253
1 0 0
1 ... 1 Al II-lea
1 0 1 0 .... 0 Nu e alocat
1 ..... 0
0 .... 0 Nu e alocat
1 1 0 1 ..... 0
1 1 1

Fig.5 Harta de alocare a memoriei


6. Se creaza fisierul cu codul sursa al programului ca in figura urmatoare :

Se salveaza programul in directorul de lucru cu numele dorit. In cazul nostru Test.s.


6. Sa se stearga semnalul CS dela circuitul I8253 de sus (conectat la iesirea Y1) a circuitului
74LS139 din stanga sus si sa se lege la iesirea Y3.
7. Sa se determine noile adrese ale porturilor asociate cu circuitul I8253 de sus.
8. Sa se modifice programul in Micro Vision pentru a accesa noile porturi
9. Sa se schimbe modul de lucru al circuitului I8253 de sus .Sa se selecteze modul 0 apoi 1).
Sa se selecteze apoi modul 2 apoi modul 3 si sa se urmareasca formele de unda generate
la iesirea Out1 a circuitului I8253 de sus. Pentru aceasta se va modifica corespunzator
programul.
10. Sa se modifice forma semnalului gate aplicat pe intrarea Gate1 a circuitului I8253 de sus
si sa se urmareaca cum se modifica formele de unda.

S-ar putea să vă placă și