Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

ERRO 2013/14.

str.1/9

Prekidi
Uvod
Cilj 5. vjebe je primjena dosad nauenih znanja pri izradi timera koji mjeri neko predodreeno vrijeme (npr. kuhanje jaja,
razvijanje fotografskog filma.
Osim Proteus ISIS simulatora, u ovoj vjebi e se koristiti i stvarna razvojna ploica sa 8051 mikrokontrolerom.
Kako bi sat (timer) bio to toniji, potrebno je koristiti sustav prekida (eng. interrupt).

Prekidi
Pri normalnom radu mikrokontrolera dolazi do situacija kada vanjske jedinice (ureaji i senzori) ili dodatne jedinice u samom
mikrokontroleru zahtjevaju to bru reakciju. Kako program koji se izvodi na mikrokontroleru u tom trenutku moe biti u nekoj
dugotrajnoj petlji, potreban je dodatan sustav koji moe ostvariti ovakav zahtjev. Taj su sustav prekidi (eng. interrupts).
Razliiti mikrokontroleri drugaije pristupaju problemu prekida, ali oni su nuni za funkcioniranje svih mikroprocesora i
mikroupravljaa.

ERRO 2013/14.

str.2/9

Prekidi u 8051
Intel 8051 podrava 5 razloga za prekid, odnosno 5 tipova prekida:
dva vanjska prekida se pruaju putem pinova INT0 i INT1, koji su spojeni na port 3 pin 2 i port 3 pin 3
dva unutarnja prekikoja se generiraju preljevom timera 0 i timera 1
unutarnji prekid pri primanju ili slanju podataka putem serijske komunikacije.

Kako bi mikrokontroler znao na koje poticaje ( s unutarnjih ili vanjskih jedinica) treba reagirati, potrebno je podesiti registre
specijalne namjene IE i TCON, te, ako je potrebno, registre IP i TMOD.

ERRO 2013/14.

str.3/9

IE Register (Interrupt Enable)


U IE registru programer podeava eli li uope prekide u ovom ugradbenom sustavu te definira koje prekide stvarno eli
koristiti.

EA - ukljuenje podrke za prekid (interrupt enable/disable)


0 iskljueni su svi prekidi .
1 prekidi su ukljueni
ES - ukljuenje podrke za prekid zbog serijske komunikacije (enables or disables serial interrupt)
0 - UART ne moe generirati prekid.
1 - UART moe generirati prekid.
ET1 - ukljuenje podrke za Timer 1 prekid:
0 - Timer 1 ne moe generirati prekid
1 - Timer 1 moe generirati prekid
EX1 - ukljuenje podrke za vanjski prekid 1 :
0 - promjena na pinu INT1 ne moe generirati prekid
1 - promjena na pinu INT1 generira prekid
ET0 - ukljuenje podrke za Timer 0 prekid:
0 - Timer 0 ne moe generirati prekid
1 - Timer 0 moe generirati prekid
EX0 - ukljuenje podrke za vanjski prekid 0:
0 - promjena na pinu INT0 ne moe generirati prekid
1 - promjena na pinu INT0 generira prekid

ERRO 2013/14.

Timer Control (TCON) Register


TCON registar jednim dijelom mijenja programer (podeavanje), a drugim dijelom se mijenja hardverski.

TCON - Timer Control Register


TF1 bit se automatski postavlja pri preljevu Timer 1 brojaa (counter).
TR1 bit ukljuuje Timer 1.
1 - Timer 1 ukljuen.
0 - Timer 1 iskljuen.
TF0 bit se automatski postavlja pri preljevu Timer 0 brojaa (counter).
TR0 bit ukljuuje Timer 0.
1 - Timer 0 ukljuen.
0 - Timer 0 iskljuen.
IE1 bit se automatski postavlja pri aktivaciji vanjskog prekida 1 .
IT1 bit odluuje o nainu aktivacije vanjskog prekida 1.
1 prekid se aktivira na padajui brid.
0 - prekid se aktivira na nisku razinu (logika 0).
IE0 bit se automatski postavlja pri aktivaciji vanjskog prekida 0.
IT0 bit odluuje o nainu aktivacije vanjskog prekida 0.
1 prekid se aktivira na padajui brid.
0 - prekid se aktivira na nisku razinu (logika 0).

str.4/9

ERRO 2013/14.

str.5/9

Prioriteti prekida
Ugradbeni sustav s mikrokontrolerom radi cijelo vrijeme, te je mogua istovremena aktivacija vie prekida. Kako je potrebno
neko vrijeme za programski kod koji reagira na prekid (to nazivamo "obradom prekida"), mogui su i novi prekidi tijekom
"obrade prekida", Kako bi se smanjili mogui problemi, postoji prioritet (redoslijed) prekida:
1.

Vanjski prekid INT0

2.

Timer 0

3.

Vanjski prekid INT1

4.

Timer 1

5.
Serijska komunikacija
(prioritet 1 je najvii odnosno najvaniji pririotet)
Vii prioritet moe prekinuti nii prioritet tijekom njegove obrade, ali obrnuto ne vrijedi (npr. tijekom obrade prekida Timera 1
moe doi do vanjskog prekida 0. Obrada Timera 1 se zaustavlja, te se zapoinje s obradom vanjskog prekida 0. Ako tada doe
prekid Timera 0, ne prekida se obrada vanjskog prekida, ali e se po zavretku obrade krenuti s obradom Timera 0, a tek po
zavretku toga se mikrokontroler vraa na obradu prekida Timera 1).
Koritenjem registra IP (Interrupt Priority) mogue je podignuti vanost nekog prekida. Stvara se dvorazinski sustav gdje je
razina 1 vanija, te e se prekidi te razine izvriti prije onih s razine 0.

PS - Serial Port Interrupt priority bit


PT1 - Timer 1 interrupt priority
PX1 - External Interrupt INT1 priority
PT0 - Timer 0 Interrupt Priority
PX0 - External Interrupt INT0 Priority
Uz ove prekide postoji i prekid RESET koji je najvieg prioriteta.

ERRO 2013/14.

str.6/9

Tako dobivamo tablicu prioriteta:


1.

RESET (najvaniji prekid)

2.

Vanjski prekid INT0 (PX0=1)

3.

Timer 0 (PT0=1)

4.

Vanjski prekid INT1 (PX1=1)

5.

Timer 1 (PT1=1)

6.

Serijska komunikacija (PS1=1)

7.

Vanjski prekid INT0 (PX0=0)

8.

Timer 0 (PT0=0)

9.

Vanjski prekid INT1 (PX1=0)

10.

Timer 1 (PT1=0)

11.

Serijska komunikacija (PS1=0) (najmanje vaan prekid)

Uz ove registre i prekide postoje i registri i postupci koji su vezani uz serijsku komunikaciju, a koji se u ovim materijalima nee
obraivati.

ERRO 2013/14.

str.7/9

Obrada prekida
Kada sklopovi mikrokontolera zakljue kako je dolo do prekida, skae na programske lokacije dane u tablici:
Interrupt

Zastavica

Adresa prekidne rutine

System reset

RST

0000H

External interrupt 0

IE0

0003H

Timer 0

TF0

000BH

External interrupt 1

IE1

0013H

Timer 1

TF1

001BH

RI or TI

0023H

Serial port

Razmak izmeu navedenih adresa je nedovoljan za programski kod koji obrauje prekid, pa je esto na tim adresama
bezuvjetan skok na drugu lokaciju koja sadri kod za obradu.
Obrada prekida moe biti pozvana u bilo kojem trenutku. Kako je nuno napisati "univerzalnu" rutinu za obradu, uobiajen
redoslijed u obradi prekida je:
1. spremanje konteksta (spremanje trenutnih vrijednosti registara koji e tijekom obrade biti prepisani drugim
vrijednostima, koje su nune za obradu prekida)
2. obrada prekida
3. vraanje konteksta (povrat vrijednosti u registre kako bi nastavili s osnovnim programom)
4. resetiranje zastavice koja je aktivirala prekid (TF1, TF0, IE1 ... ) - pogledati materijale s predavanja
Specifinosti obrade prekida 8051 u SDCC (i drugim C prevodiocima) su objanjene dalje u tekstu.

ERRO 2013/14.

str.8/9

Rad s timerima
8051 ima 2 Timera: Timer0 i Timer1. Timeri istovremeno rade i kao brojai, te se njihove karakteristike definiraju kroz TMOD
registar (Timer Mode)

GATE1 odluuje o aktivaciji Timera 1 ovisno o stanju INT1 pina (P3.3):


1 - Timer 1 radi samo ako je INT1 bit postavljen (logika 1).
0 - Timer 1 radi bez obzira na INT1 bit.
C/T1 odabire izvor impulsa za timer/counter 1:
1 - Timer broji impulse dovedene na T1 pin (P3.5).
0 - Timer broji impulse s internog oscilatora.
T1M1,T1M0 odabir moda rada Timera 1.
T1M1
0
0
1
1

T1M0
0
1
0
1

MOD
0
1
2
3

OPIS
13-bit timer
16-bit timer
8-bit auto-reload
Split mode

GATE0 odluuje o aktivaciji Timera 0 ovisno o stanju INT0 pin (P3.2):


1 - Timer 0 radi samo ako je INT0 bit postavljen (logika 1).
0 -radi bez obzira na INT0 bit.
C/T0 odabire izvor impulsa za timer/counter 0:
1 - Timer broji impulse dovedene na T0 pin (P3.4).
0 - Timer broji impulse s internog oscilatora.
T0M1,T0M0 odabir moda rada Timera 0.
T0M1
0
0
1
1

T0M0
0
1
0
1

MOD
0
1
2
3

OPIS
13-bit timer
16-bit timer
8-bit auto-reload
Split mode

Svi modovi rada timera su lijepo grafiki prikazani na stranici http://www.mikroe.com/chapters/view/65/

ERRO 2013/14.

str.9/9

Rad s prekidima u SDCC


Rad s prekidima u SDCC (i ostalim C prevodiocima za 8051) je jednostavan. Potrebno je samo napisati funkciju u obliku:
void proizvoljanNazivFunkcije () __interrupt oznaka_prekida {
// PROGRAMSKI KOD
}

- void jer funkcija nita ne vraa.


- naziv funkcije je proizvoljan
- nema parametara
- __interrupt oznaava kako se radi o prekidnoj rutini
- oznaka prekida je broj koji predstavlja o kojem se prekidu radi.
Interrupt
vanjski prekid 0
Timer 0
vanjski prekid 1
Timer 1
UART/SPI (serijska komunikacija)

oznaka prekida
0
1
2
3
4

adresa lokacije
003
0x0B
013
0x1B
023

Primjer prekidne funkcije za Timer 1:


void timer1() __interrupt 3 {
}
Kako bi programski kod prekidne funkcije uope bio pozvan, potrebno je u main funkciji podesiti odgovarajue registre (IE,
TCON, TMOD, IP).
Primjer za Timer1:
int brojac;
void timer1() __interrupt 3 {
brojac++;
}
void main() {
brojac=0;
ET1=1; // ENABLE Timer 1 interrupt
TMOD=0x20;
// postavi mod rada timera1 na 2 - 8-bit auto-reload
TH1=0x06;
// postavi vrijednost s kojom se timer 1 automatski puni - daje 250 impulsa prije
//"okidanja"
EA=1;
// ENABLE interrupt (nuno postavljeno na 1 kako bi ijedan interrupt radio)
TR1=1;
// START Timer 1 (s logikom 0 se zaustavlja Timer 1)
}
Napomena:
SDCC e, ako je funkcija ispravno napisana, obaviti:
1. snimanje konteksta
2. vraanje konteksta
3. resetiranje zastavice
Time je na programeru ostala samo briga oko obrade prekida (pogledati stranicu

You might also like