Sunteți pe pagina 1din 27

Curs 6

Numrarea evenimentelor i msurarea intervalelor de timp


P trebuie s efectueze o anumit operaie numai dup a n-a apariie a unui eveniment. Exist 3 posibiliti de implementare: 1. P ateapt fiecare apariie a evenimentului, o detecteaz i o contorizeaz. - cea mai dezavantajoas soluie, din cauza utilizrii ineficiente a timpului P. 2. P este atenionat printr-o cerere de ntrerupere la fiecare apariie a evenimentului, care este contorizat n rutina de tratare a ntreruperii. - o parte din timpul P este consumat cu tratarea a n cereri de ntrerupere. 3. Evenimentele sunt contorizate de un dispozitiv extern, independent, iar P este atenionat o singur dat, imediat dup a n-a apariie a evenimentului. - soluia cea mai eficient: P programeaz dispozitivul extern, dar numrarea are loc n paralel cu efectuarea altor sarcini de ctre procesor. Tipuri de evenimente: Aperiodice se produc la intervale aleatoare, deci necunoscute programului. Durata numrrii necunoscut. Periodice - se produc la intervale egale (T), cunoscute programului. Durata procesului de numrare = nT (numrarea msurarea timpului = temporizare).

Tipuri de dispozitive externe de contorizare a evenimentelor: - dispozitive MSI (numrtoare asincrone sau sincrone). - numrtoare programabile (8253, 8254) integreaz, pe lng numrtoare, o logic de acces la aceste registre i de control a numrrii, care permite: presetarea numrtorului cu o valoare iniial; citirea numrtorului n timpul numrrii; activarea specific a unui semnal de ieire pe durata i la sfritul numrrii; controlul numrrii, prin program i prin hardware: - pornire; - oprire; - rencrcare a valorii iniiale. 6.1. Tehnici de introducere a timpului n sistemele cu microprocesoare 1. Utilizarea unei bucle de program de durat controlabil. - cea mai dezavantajoas soluie blocheaz P pe durata temporizrii. 3. Folosirea unor dispozitive analogice de tip monostabil sau astabil 74SN123, E 555. - intervale fixe, neprogramabile, precizie redus. 4. Numrarea unor evenimente periodice (perioade ale unui semnal de tact de freceven stabil i cunoscut). - intervale programabile, precizie ridicat, flexibilitate ridicat. Numrtoarele programabile de evenimente periodice canale de timp sau timere.

6.1.1. Necesitatea introducerii timpului ca variabil n prelucrarea informaiei 1. Generarea de semnale care marcheaz intervale de timp de durat programabil.

UCP cu P INT

Fe =
Fi = 1 Ti
Ti

Fi N
Fe = 1 Te

CEAS

Controler de ntreruperi IR CEAS

CEAS

Te = nTi(0) + mTi (1)

Fe =

Fi n+m

Fig.6.1. Generarea de ntreruperi la momente de timp prestabilite Ceas de timp real (RTC Real Time Clock), utilizat pentru: - Achiziia unor informaii din proces la anumite intervale de timp; - Aplicarea unor mrimi de comand pe o anumit durat; - Rularea periodic a unor programe de autotest; - Editarea unor rapoarte periodice, la anumite intervale de timp; - Msurarea timpului astronomic. Divizarea cu un factor programabil a frecvenei unor semnale. Generarea unor semnale factor de form programabil (PWM Pulse Width Modulation).

2. Msurarea timpului scurs ntre dou evenimente

CEAS

EV1 . . . EV2 EVn

START CEAS STOP

EV1

EV2

a)
Se pot utiliza dou proceduri:

b)

Fig.6.2. Msurarea timpului scurs ntre dou evenimente

a) La EV1 i EV2 se citete ceasul, intervalul de timp fiind calculat prin diferen; b) EV1 pornete ceasul, EV2 l oprete, dup care se citete valoarea indicat de ceas. Aproximarea derivatelor unor mrimi fizice n raport cu timpul: viteze, debite etc. Ceas de gard (WDT Watch Dog Timer):

(Re)declanare WDT

Execuie program ntrerupere sau RESET

Q Monostabil
Fig.6.3. Funcionarea ceasului de gard

6.2. Circuitul programabil de timp PIT 8253 (Programmable Interval Timer) Caracteristici generale: Tehnologie NMOS, alimentat la 5V cc. Se conecteaz direct la magistralele sistemelor cu P 8085 i 8086 Semnalele la pini sunt compatibile TTL Conine 3 canale de timp independente Fiecare canal de timp conine un numrtor de 16 bii cu decrementare Decrementarea se poate realiza n cod binar sau BCD Fiecare numrtor poate fi ncrcat i citit de ctre microprocesor Pentru fiecare canal sunt disponibile 6 moduri de lucru. 6.2.1. Structura intern i funcionarea canalelor de timp Fiecare canal are 3 semnale de control: o CLK intrarea de numrare a impulsurilor (Fmax= 2,63 MHz) o GATE intrarea de control a numrrii (oprire, pornire, rencrcare) o OUT - ieire care indic starea canalului.

D7D0

Tampon magistral de date

CLK0 Ceas #0 GATE0 OUT0

RD WR A1 A0 CS Registrul cuvntului de comand Logic de citire/ scriere

CLK1 Ceas #1 GATE1 OUT1 CLK2 Ceas #2 GATE2 OUT2

Fig.6.4. Schema bloc a circuitului PIT 8253 Tamponul magistralei de date asigur legtura ntre MD i magistrala intern, este validat la selectarea circuitului ( CS =0). Logica de citire/scriere stabilete sensul de transfer al datelor prin tamponul magistralei de date ( RD , WR ) i decodific liniile A1 i A0 pentru a selecta registrele interne.

CS
1 0 0 0 0 0 0 0 0 0

RD

WR
0 0 0 0 1 1 1 1 1

A1 0 0 1 1 0 0 1 1

A0 0 1 0 1 0 1 0 1

Efect 8253 dezactivat - TS ncrcare numrtor canal #0 ncrcare numrtor canal #1 ncrcare numrtor canal #2 nscriere registru de comand (RC) Citire numrtor canal #0 Citire numrtor canal #1 Citire numrtor canal #2 Nici o operaie TS (RC nu poate fi citit) Nici o operaie - TS

1 1 1 1 0 0 0 0 1

Fig.6.5. Tabelul de funcionare al circuitului 8253 8253 4 porturi de I/E: PIT (A1=A0=0) adresa numrtorului canalului #0 PIT+1 adresa numrtorului canalului #1 PIT+2 adresa numrtorului canalului #2 PIT+3 adresa registrului de control al circuitului

Fiecare canal de timp conine cte 3 registre de 16 bii:

1. Un numrtor cu decrementare: se decrementeaz la fiecare front descresctor pe intrarea de numrare CLK: - n mod automat, independent de GATE - numai dac linia GATE este pe 1 logic.

2. Un registru al constantei de timp: este ncrcat de ctre P la programarea canalului i memoreaz valoarea ncrcat coninutul su poate fi copiat de numrtorul cu decrementare: - la nceputul unui nou ciclu de funcionare; - la apariia unui front cresctor pe linie GATE.

3. Un registru cu zvorre (latch): poate reine (captura) la comand coninutul numrtorului cu decrementare; valoarea memorat poate fi apoi citit prin program.

6.2.2. Programarea canalelor de timp Dup alimentare, canalele nu funcioneaz, iar ieirile OUT sunt meninute n 1 logic. Programarea unui canal de timp: - scrierea unui cuvnt de control n registrul de comand; - scrierea constantei de timp n registrul asociat canalului.

D7 SC1

D6 SC0

D5 RL1

D4 RL0

D3 M2

D2 M1

D1 M0

D0 BCD

Selecie canal

Read/Load

Selecie mod

Tip decrementare
0 - n cod binar: (0CSTFFFFh) 1 - n cod BCD: (0CST9.999)

0 0 - canal #0 0 1 - canal #1 1 0 - canal #2 1 1 - ilegal

0 0 - captur (memorare) 0 1 - Read/Load CST8 (LSB) 1 0 - Read/Load CST8 (MSB) 1 1 - Read/Load CST16 (mai nti LSB, apoi MSB)

0 0 0 - modul 0 0 0 1 - modul 1 1 0 - modul 2 1 1 - modul 3 1 0 0 - modul 4 1 0 1 - modul 5

Fig.6.6. Configuraia cuvntului de control pentru un canal de timp Constanta de timp: Mai mic sau egal cu 255 (RL1 RL0 = 01) numai LSB va fi nscris i va putea fi citit Multiplu de 256 (RL1 RL0 = 10) numai MSB va fi nscris i va putea fi citit Mai mare de 255 (RL1 RL0 = 11) nti LSB, apoi MSB vor fi inscrise i vor putea fi citite

nscrie cuvntul de control pe adresa registrului de comand (cu A1=A0=1) urmeaz CST16 - 11 nscrie LSB al CST16 pe adresa canalului selectat (A1=SC1, A0=SC2) nscrie MSB al CST16 pe adresa canalului selectat (A1=SC1, A0=SC2) RL1 RL0 00 - captur (memorare)

01
urmeaz CST8 nscrie CST8 de tip LSB pe adresa canalului selectat (A1=SC1, A0=SC2)

10
urmeaz CST8 nscrie CST8 de tip MSB pe adresa canalului selectat (A1=SC1, A0=SC2)

Citete LSB i/sau MSB al valorii memorate, de la adresa canalului selectat (A1=SC1, A0=SC2) n funcie de tipul constantei folosite la programarea canalului de timp

Fig.6.7. Programarea/citirea unui canal de timp Citirea valorii din numrtorul cu decrementare: direct, chiar n timpul funcionrii (pot s apar erori) dup o comand de memorare n registrul cu zvorre, special prevzut n acest scop.

PIT 8254 - poate lucra la Fmax = 8 MHz i chiar 10MHz (8254-2). - complet compatibil la pini cu 8253 - dispune i de o a treia modalitate de citire a coninutului unui numrtor: read-back. Cuvntul de comand pentru read-back: D6 D5 D4 D7 1 1
COUNT

D3 CNT2

D2 CNT1

D1 CNT0

D0 0

STATUS

- se folosete combinaia D7=D6=1, neutilizat la 8253, cu COUNT =0 - canalele pe care se realizeaz operaia de memorare sunt selectate prin biii CNTi=1. - dac STATUS =0, n registrele latch ataate numrtoarelor se va memora starea canalelor specificate prin biii CNTi=1, ntr-un cuvnt de stare de forma: D7 D6 D5 RW1 D4 RW0 D3 M2 D2 M1 D1 M0 D0 BCD

OUTPUT NULL COUNT Biii

D5D0 - conin informaiile transmise prin cuvntul de comand. RW1, RW2 (Read/Write la 8254 n loc de Read/Load la 8253) OUTPUT - starea linie de ieire OUT; NULL COUNT = 1 dac numrtorul canalului a fost ncrcat i poate fi citit.

COUNT i STATUS pot fi active simultan: - la prima citire va fi returnat starea - la urmtoarele citiri se returneaz LSB i/sau MSB.

6.2.3. Moduri de operare Rolul liniei GATE: Mod 0,4 1,5 2,3 GATE=0 sau trece n 0 () Inhib decrementarea 1) Inhib decrementarea 2) OUT trece imediat n 1 GATE trece n 1 ( ) 1) Iniiaz numrarea 2) OUT trece n 0 dup urmtorul front activ pe linia CLK (modul 1) Iniiaz numrarea GATE=1 Valideaz decrementarea Valideaz decrementarea

* CLK GATE CONTOR 7 6 6 6

Linia GATE poate fi activ: - pe nivel GATE=1 permite decrementarea numrtorului pe un front descresctor activ (*) pe intrarea CLK: numai dac GATE=1 pe frontul cresctor imediat anterior al CLK. - pe front primul front activ pe linia CLK care urmeaz dup frontul cresctor pe linia GATE determin rencrcarea constantei de timp n numrtorul cu decrementare.

Modul 0: numrtor de evenimente / monostabil programabil, (re)declanat prin program CLK WR OUT GATE Programare: nscriere CW: OUT=LOW. nscriere constant de timp: LSB: oprete decrementarea; MSB: funcionarea pornete odat cu urmtorul front activ pe linia CLK. Funcionare: Decrementare: cu o unitate, pe fiecare front activ pe linia CLK. Renscrierea constantei: rencrcarea contorului pe urmtorul front activ pe linia CLK. Control hardware: GATE = LOW blocheaz decrementarea. Contor = 0000h: OUT=HIGH (cerere ntrerupere); decrementarea continu. Reluare funcionare: Software: ncrcarea unei noi constante redeclaneaz funcionarea. Hardware: nu CLK aperiodic numrtor de evenimente - periodic monostabil programabil. CW n=4 n=5

0 FFFF FFFE

FFFF

Modul 1: numrtor de evenimente / monostabil programabil, (re)declanat prin hardware CLK WR GATE OUT 2 1 0 FFFF FFFE 3 2 1 3 2 1 0 FFFF 5 4 3 CW n=2 n=3 n=5

Programare: nscriere CW: OUT=LOW. nscriere constant de timp: nu declaneaz nceperea numrrii. Funcionare: Declanare: pe primul front activ de dup un impuls 1 pe linia GATE (min. 150 ns) Decrementare: cu o unitate, pe fiecare front descresctor al semnalului CLK. Renscrierea constantei: luat n considerare numai dup un impuls 1 pe linia GATE. Control hardware: nivelul liniei GATE nu afecteaz decrementarea. Contor = 0000h: OUT=HIGH (cerere ntrerupere); decrementarea continu. Reluare funcionare: Software: nu Hardware: un impuls 1 pe linia GATE (min. 150 ns) CLK aperiodic numrtor de evenimente - periodic monostabil programabil

Modul 2: numrtor de evenimente modulo n / generator de impulsuri programabil CLK WR CW n=3 3 OUT GATE 2 1 (0)3 n=4 2 1 (0)4 3 3 4 3 2 1 (0) 4 3 2 1 (0) 4 3

Programare: nscriere CW: OUT=HIGH. nscriere constant de timp: declaneaz nceperea numrrii. Funcionare: Decrementare: cu o unitate, pe fiecare front activ al semnalului CLK. Ieire - OUT=HIGH pentru n-1 perioade CLK, OUT=LOW pentru ultima perioad CLK. Renscrierea constantei: luat n considerare numai la trecerea numrtorului prin 0. Control hardware: GATE=0 blocheaz decrementarea i foreaz OUT=HIGH. Sincronizare: hardware un front cresctor pe linia GATE rencarc ultima constant. Reluare funcionare: automat, cu ultima constant ncrcat (minim 2). CLK aperiodic numrtor de evenimente modulo n - periodic generator de impulsuri cu frecven programabil

Modul 3: numrtor de evenimente modulo n/2 CLK WR CW n=4 4 OUT GATE 4 4 2 (0)4

/ divizor de frecven programabil.

n=5 2 (0) 4 2 (0) 4 2(0)5 4 2 (0)5 2 (0) 5 4 2(0)5

Programare: nscriere CW: OUT=HIGH. nscriere constant de timp: declaneaz nceperea numrrii. Funcionare: Decrementare: cu dou uniti odat, pe fiecare front activ al semnalului CLK. Ieire n=2k(+1): OUT=HIGH pe durata primelor k(+1) impulsuri CLK OUT=LOW pe durata ultimelor k impulsuri CLK. Renscrierea constantei: luat n considerare numai la trecerea numrtorului prin 0. Control hardware: GATE=0 blocheaz decrementarea i foreaz OUT=HIGH. Sincronizare: hardware un front cresctor pe linia GATE rencarc ultima constant. Reluare funcionare: automat, cu ultima constant ncrcat (minim 3) CLK aperiodic numrtor de evenimente modulo n/2 - periodic divizor de frecven programabil.

Modul 4: numrtor de evenimente / impuls programabil, (re)declanat prin program CLK WR OUT GATE Programare: nscriere CW: OUT=HIGH. nscriere constant de timp: LSB: oprete decrementarea; MSB: funcionarea pornete odat cu urmtorul front activ pe linia CLK. Funcionare: Decrementare: cu o unitate, pe fiecare front activ pe linia CLK. Renscrierea constantei: rencrcarea contorului pe urmtorul front activ pe linia CLK. Control hardware: GATE = LOW blocheaz decrementarea. Contor = 0000h: OUT=LOW pentru o perioad de tact CLK; decrementarea continu. Reluare funcionare: Software: ncrcarea unei noi constante redeclaneaz funcionarea. Hardware: nu CLK aperiodic numrtor de evenimente - periodic impuls programabil. CW n=4 n=5

0 FFFF FFFE

0 FFFF

Modul 5: numrtor de evenimente / impuls programabil, (re)declanat prin hardware CLK WR GATE OUT 2 1 0 FFFF FFFE 3 2 1 3 2 1 0 FFFF5 4 3 CW n=2 n=3 n=5

Programare: nscriere CW: OUT=HIGH. nscriere constant de timp: nu declaneaz nceperea numrrii. Funcionare: Declanare: pe primul front activ de dup un impuls 1 pe linia GATE (min. 150 ns) Decrementare: cu o unitate, pe fiecare front descresctor al semnalului CLK. Renscrierea constantei: luat n considerare numai dup un impuls 1 pe linia GATE. Control hardware: nivelul liniei GATE nu afecteaz decrementarea. Contor = 0000h: OUT=LOW pentru o perioad de tact CLK; decrementarea continu. Reluare funcionare: Software: nu Hardware: un impuls 1 pe linia GATE (min. 150 ns) CLK aperiodic numrtor de evenimente - periodic impuls programabil

6.3. Realizarea aplicaiilor folosind circuitul PIT8253 Exemplu: Sistem cu 8085, FXTAL=3MHz, s se organizeze un SIT care s asigure urmtoarele taskuri de timp: a) numrtor pentru 100 de evenimente (ntrerupere pe linia RST 5.5) b) ntrziere programabil (timeout) de 5 ms (ntrerupere la expirare pe linia RST 6.5) c) ceas de timp real, n cuante de 200ms (ntrerupere pe linia RST 7.5) d) ceas de gard (WDT) de 1,5 s (ntrerupere nemascabil) e) semnal de tact pentru o interfa serial USART 8251, cu frecvena de 169600 Hz. 6.3.1. Stabilirea necesarului de canale, a modurilor de lucru i a constantelor de timp Se utilizeaz semnalul furnizat de 8085 pe linia CLK, cu frecvena FCLK = FXTAL/2 = 1,5MHz. a) 100-1=99<255 1 canal (#1), programat n modul 0, ncrcat cu N1=99.

b)

T x = OUT = TCLK

5ms 5 10 3 s = = 5 10 3 s 1,5 10 6 Hz = 7,5 10 3 = 75000 > 65535 1 1 1,5MHz 1,5 10 6 Hz

un singur canal nu este suficient, trebuie utilizate dou canale nseriate: #2: divizor de frecven (modul 2), avnd la intrare semnalul CLK; #3: primete semnalul furnizat de primul canal pe ieirea OUT i lucreaz n modul 0; N2 (N3+1) = 75000.

c)

TOUT 200ms 200 10 3 s x= = = = 200 10 3 s 1,5 10 6 Hz = 300 10 3 = 300000 > 65535 1 1 TCLK 1,5MHz 1,5 10 6 Hz
nu este suficient un singur canal: va fi utilizat canalul #2 i un nou canal: #4: programat ca divizor de frecven (modul 3). N2 N4 = 300000.

d)

x=

TOUT = TCLK

1,5s 1,5s = = 1,5s 1,5 10 6 Hz = 2,25 10 6 = 2250000 > 65535 1 1 1,5MHz 1,5 10 6 Hz

nu este suficient un singur canal: va fi utilizat canalul #2 i un nou canal: #5: programat ca impuls (re)declanat prin program (modul 4). N2 (N5+1)= 2250000.

e)

FCLK 1,5MHz 1,5 10 6 Hz x= = = = 9,765625 10 < 255 FOUT 16 9600Hz 153600Hz

#6: programat ca divizor de frecven (modul 3 - und dreptunghiular), ncrcat cu constanta N6=10. N2: un divizor comun (mai mic dect 65535) al valorilor 75000, 300000 i 2250000. Dac N2=5000 N3+1=15, N4=60, N5+1=450 N3=14, N4=60, N5=449. Au rezultat un numr de 6 canale de timp, care pot fi implementate cu 6:3=2 circuite 8253.

Evenimente externe

Numrtor de evenimente Divizor de frecven Monostabil (re)declanat prin program

N1=99

Modul 0

(a)

RST 5.5

FXTAL=1,5 MHz

N2=5000

Modul 2

FPILOT = 300 Hz

(b)
N3=14 Modul 0

RST 6.5

FPILOT = 300 Hz Divizor de frecven Impuls (re)declanat prin program Divizor de frecven

(c)
N3=60 Modul 3

RST 7.5

(d)
N5=449 Modul 4

TRAP

(e)
N6=10 Modul 3

16 9600 Hz

Fig.6.8. Utilizarea canalelor de timp pentru implementarea taskurilor ae

6.3.2. Structura hardware a sistemului

3MHz

A15A0 IO/M 8085 + 8212 TRAP RST 7.5 D7D0 RST 6.5 RST 5.5 CLK RD WR

Magistrala de adrese A1 A0

A15

A14A12
E2

E3 E1 A 2 A 1 A 0 DCD I/E (8205)

A1 A0

0 1 2 3 4 5 6 7

Magistrala de date

1,5MHz
RD WR A1 A0 D7D0 CS CLK1 GATE0 PIT-A GATE1 OUT0 OUT2 GATE2 CLK0 OUT1 CLK2

VCC
RD WR A1 A0 D7D0 CS GATE0 PIT-B GATE1 OUT2 GATE2 CLK0 CLK1 OUT0 OUT1 CLK2

Evenimente

169600 Hz
Fig.6.9. Conectarea circuitelor 8253 ntr-un sistem cu P 8085

6.3.3. Programarea taskurilor de timp ; INIT_PIT iniializare circuite 8253 ; - Intrare nimic; Ieire nimic; init_pit: ; PROGRAMARE PIT_A EQU CWA0 EQU N1 EQU CWA1 EQU N2 EQU CWA2 EQU N3 EQU ; PROGRAMARE MVI OUT MVI OUT ; PROGRAMARE MVI OUT MVI OUT MVI OUT ; PROGRAMARE MVI OUT MVI OUT

Distruge - A

PIT_A 10h ; adresa de baz a dispozitivului 00010001b ; Cuvnt de comand #0: modul 0, CST8, LSB, BCD. 99h ; Constanta N1 (numrtor pentru 100 de evenimente). 01110100b ; Cuvnt de comand #1: modul 2, CST16, binar. 5000 ; Constanta N2 (divizor de frecven cu 5000). 10010000b ; Cuvnt de comand #2: modul 0, CST8, LSB, binar. 14 ; Constanta n3 (ceas de gard de 1,5 s). CANAL NUMRTOR DE EVENIMENTE A,CWA0 PIT_A+3 ; Se nscrie cuvntul de comand pentru #0. A, N1 PIT_A ; Se nscrie N1 pe adresa canalului #0 (PIT_A+0). CANAL PILOT A,CWA1 PIT_A+3 ; Se nscrie cuvntul de comand pentru #1. A,LOW(N2) PIT_A+1 ; Se nscrie constanta N2 (LSB) pe adresa canalului 1. A,HIGH(N2) PIT_A+1 ; Se nscrie constanta N2 (MSB) pe adresa canalului 1. CANAL NTRZIERE A,CWA2 PIT_A+3 ; Se nscrie cuvntul de comand pentru #2. A,N3 PIT_A+2 ; Se nscrie constanta N3 pe adresa canalului 2.

; PROGRAMARE PIT_B PIT_B EQU 20h CWB0 EQU 00010110b N4 EQU 60 CWB1 EQU 01111001b N5 EQU 449 CWB2 EQU 01010110b N6 EQU 10

; ; ; ; ; ;

Cuvnt de comand #4: modul 3, CST8 (LSB), binar. Constanta N4 (ceas de timp real de 200 ms). Cuvnt de comand #5: modul 4, CST16, binar. Constanta N5 (ceas de gard de 1,5 s). Cuvnt de comand #6: modul 3, CST8 (LSB), binar. Constanta N6 (semnal de tact pentru 9600Baud).

; PROGRAMARE CANAL CEAS DE TIMP REAL MVI A,CWB0 OUT PIT_B+3 ; Se nscrie cuvntul de comand pentru #0. MVI A,N4 OUT PIT_B ; Se nscrie constanta N4 pe adresa canalului 0. ; PROGRAMARE CANAL CEAS DE GARD MVI A,CWB1 OUT PIT_B+3 ; Se nscrie cuvntul de comand pentru #1. MVI A,LOW(N5) OUT PIT_B+1 ; Se nscrie constanta N5 (LSB) pe adresa canalului 1. MVI A,HIGH(N5) OUT PIT_B+1 ; Se nscrie constanta N5 (MSBB) pe adresa canalului 1. ; PROGRAMARE DIVIZOR DE TACT PENTRU INTERFAA SERIAL MVI A,CWB2 OUT PIT_B+3 ; Se nscrie cuvntul de comand pentru #0. MVI A,N6 OUT PIT_B+2 ; Se nscrie constanta N4 pe adresa canalului 0. RET

;........................... ;Programul principal main: ;........................... CALL INIT_PIT ;........................... loop: CALL WDT_RESET ;........................... MVI CALL A, event_nr EV_COUNTER

;........................... MVI CALL A,delay TIMEOUT

;........................... CALL READ_COUNT ;........................... CALL READ_WDT ;........................... JMP loop

; WDT_RESET resetare (rearmare) ceas de gard ; - Intrare nimic ; - Ieire nimic ; - Distruge - A WDT_RESET: MVI A,LOW(N5) OUT PIT_B+1 ; Se nscrie constanta N5 (LSB) pe adresa canalului 1. MVI A,HIGH(N5) OUT PIT_B+1 ; Se nscrie constanta N5 (MSBB) pe adresa canalului 1. RET ; EV_COUNTER programeaz generarea unei ntreruperi dup un numr de evenimente ; - Intrare A numrul de evenimente ateptat -1 ; - Ieire nimic ; - Distruge - nimic EV_COUNTER: OUT PIT_A ; Se nscrie parametrul din A n canalul #0 (PIT_A+0). RET ; TIMEOUT programeaz generarea unei ntreruperi dup scurgerea unui interval de timp ; - Intrare A numrul de cuante de timp - 1 ; - Ieire nimic ; - Distruge - nimic TIMEOUT: OUT PIT_A+2 ; Se nscrie parametrul din A pe adresa canalului 2. RET

; READ_EV_COUNT citete numrul de evenimente care au aprut pn n acest moment ; - Intrare A numrul de evenimente ateptat - 1, n format BCD ; - Ieire A numrul de evenimente care au aprut ; - Distruge A, B, PSW read_ev_count: PUSH PSW ; depune PSW pe stiv IN A,PIT_A ; citete #0 MOV B,A ; copie n B valoarea citit din #0 POP PSW ; reface PSW de pe stiv XRA A ; foreaz CY=0 SBB B ; calculeaz numrul de evenimente care au aprut RET ; revine avnd n A numrul de evenimente aprute ; READ_WDT ; ; ; read_wdt: MVI OUT IN MOV IN MOV RET citete valoarea din numrtorului ceasului de gard Intrare nimic Ieire BC valoarea rmas n WDT Distruge A,B,C A, 01000000b PIT_B+3 A,PIT_B+1 C,A A,PIT_B+1 B,A ; ; ; ; ; ; ; cuvntul de comand pentru captur #1 transmite comanda de captur citete LSB al valorii capturate din #1 o copie n C citete LSB al valorii capturate din #1 o copie n B revine avnd n registrul pereche B valoarea citit

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