Ćwiczenia na obsługi przerwań

background image









ĆWICZENIE






TEMAT:

OBSŁUGA KONTROLERA PRZERWAŃ W PAKIECIE KEILuVISON

80C535

background image

Wiadomości wstępne:

Wiadomości wstępne:

W procesorze SAB 80C515 przerwaniami steruje kontroler przerwań, zadaniem

kontrolera przerwań jest kojarzenie sygnałów przerwań ( znaczników zgłoszonych przerwań )
z przypisanymi na stałe adresami pamięci programu (PGM).
Każdy znacznik przerwania ma przypisany adres w pamięci programu.

Przerwanie to sposób pracy procesora polegający na tym że pod wpływem sygnału

zewnętrznego lub pochodzącego z układu wewnętrznego procesora , procesor przerywa
aktualnie wykonywany program ( np. program główny ) i przechodzi do wykonania
podprogramu związanego z sygnałem wywołującym przerwanie. Po wykonaniu podprogramu
obsługi przerwania procesor powraca do wykonywania przerwanego programu . Aby móc
powrócić do przerwanego podprogramu , przed wejściem do podprogramu obsługi przerwania
,procesor przesyła na stos adres rozkazu który ma być wykonany po powrocie z podprogramu
obsługi przerwania .

Każdy sygnał który może wywołać przerwanie ,jest związany z odpowiadającym mu

znacznikiem. W momencie ,gdy sygnał przerwania jest aktywny, odpowiadający mu znacznik
jest ustawiany w stan 1. Sygnał z każdego źródła przerwania może być indywidualnie
zablokowany. Znaczniki blokujące przerwania w mikrokontrolerze SAB80(C)515 znajdują
się w rejestrach IEN0 i IEN1. W rejestrze IEN0 znajduje się znacznik EAL ,którym można
zablokować równocześnie wszystkie przerwania.

IEN0

EAL WDT ET2 ES ET1 EX1 ET0 EX0

• EAL- blokowanie wszystkich przerwań . EAL=0 – żadne przerwanie nie może być przyjęte . EAL=1 każde

przerwanie może być przyjęte pod warunkiem że odpowiadający mu znacznik jest w stanie 1.

• ET2- blokowanie (ET2=0) lub odblokowanie (ET2=1) przerwania generowanego przez licznik T2.

• ES- blokowanie (ES=0) lub odblokowanie (ES=1) przerwania generowanego przez port szeregowy.

• ET1- blokowanie (ET1=0) lub odblokowanie (ET1=1) przerwania generowanego przez licznik T1.

• EX1- blokowanie (EX=0) lub odblokowanie (EX=1) przerwania generowanego przez
licznik T1.
• ET0- blokowanie (ET=0) lub odblokowanie (ET=1) przerwania generowanego przez

licznik T0.

• EX0- blokowanie (EX=0) lub odblokowanie (EX=1) przerwania zewnętrznego z wejścia INT0.

TCON

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0


• TF1- znacznik ustawiamy w stan 1 przy przepełnieniu licznika T1

• TF0- znacznik ustawiamy w stan 1 przy przepełnieniu licznika T0

• IE1- znacznik ustawiamy w stan 1 sygnałem przerwania na wejściu INT1

• IT1- znacznik wyboru sygnału przerywającego na wejściu INT1. IT1 =0- przerwanie jest wywoływane

stanem niskim ,IT1 = 1 – przerwanie jest wywoływane zboczem opadającym.

• IE0- znacznik ustawiamy w stan 1 sygnałem przerwania na wejściu INT0

• IT0- znacznik wyboru sygnału przerywającego na wejściu INT0. IT0 =0- przerwanie jest wywoływane

stanem niskim ,IT0 = 1 – przerwanie jest wywoływane zboczem opadającym.


background image

interrupt 0

-

przerwanie od INT0 (P3.2)

0003h

interrupt 1

-

przerwanie od licznika T0

000bh

interrupt 2

-

przerwanie od INT1 (P3.3)

0013h

interrupt 3

-

przerwanie od licznika T1

001bh

interrupt 4

-

przerwanie od portu szeregowego

0023h

interrupt 5

-

przerwanie od licznika T2

002bh

interrupt 6

-

przerwanie od przetwornika A/C

0043h

interrupt 7

-

przerwanie od INT2 (P1.4)

004bh

interrupt 8

-

przerwanie od INT3 (P1.0)

0053h

interrupt 9

-

przerwanie od INT4 (P1.1)

005bh

interrupt 10

-

przerwanie od INT5 (P1.2)

0063h

interrupt 11

-

przerwanie od INT6 (P1.3)

006bh

STRUKTURA PROGRAMU DO OBSŁUGI PRZERWAŃ

#include <REG515.H>

void main (void)

{

EAL=1;
EX0=1;
IT0=1;

while(1);

}

void int_0 (void) interrupt 0 using 0
{ …PROGRAM

OBSŁUGI PRZERWANIA INT0 …

}

void int_T0 (void) interrupt 1 using 0

{}
void int_1 (void) interrupt 2 using 0
{}
void int_T1 (void) interrupt 3 using 0

{}

ZASADY OBSŁUGI ZGŁOSZENIA PRZERWANIA

1. Obsługa przerwania o niskim poziomie może zostać zawieszona przez przerwanie z

wyższego poziomu ( jeśli nie jest ono zablokowane programowo)

2. Jeżeli występują jednocześnie dwa żądania przerwań o różnych poziomach to jako

pierwsze zostanie przyjęte przerwanie z wyższego poziomu.

3. Jeżeli zgłoszone przerwania są na tym samym poziomie to o kolejności ich obsługi

decyduje wewnętrzna kolejność przeglądania przerwań ( priorytet ).


UWAGA:

1. Znacznik zgłoszenia przerwania jest kasowany w momencie wejścia do programu

obsługi przerwania ( kasowanie automatyczne), wyjątkiem są znaczniki TI oraz RI
muszą być kasowane programowo.

2. Jeżeli zmienna jest modyfikowana w programie obsługi przerwania to należy ją

zadeklarować jako ( volatile ) np. int volatile a=5;

background image

3. W programie obsługi przerwania nie można zablokować znacznika blokowania

przerwania ( np. EX0 = 0; ) natomiast dozwolone jest zerowanie znacznika źródła
przerwania ( np. IE0 = 0; )


1. Otwieramy projekt o nazwie „BLINKY” z katalogu

c:\Keil\C51\EXAMPLES\test\ BLINKY.Uv2

2. Ćwiczenia dotyczące działania kontrolera przerwań.



Zadanie 1.

Program główny pracuje w pętli nieskończonej (nic nie robi). Po wciśnięciu przycisku

P3.2 następuje zgłoszenie przerwania INT_0. W programie obsługi przerwania następuje
negacja zmiennej p i wysłanie wartości zmiennej na port P5.

#include <REG515.H>

char volatile p;

void main (void)

{

EAL=1;
EX0=1;
IT0=1;

while(1);

}

void int_0 (void) interrupt 0 using 0
{

P5 = p;

p = ~ p;

}
void int_T0 (void) interrupt 1 using 0

{}
void int_1 (void) interrupt 2 using 0
{}
void int_T1 (void) interrupt 3 using 0

{}

background image

Zadanie 2.

Program po wykryciu przerwania INT_0 powoduje 5 – krotne zapalenie i zgaszenie

pinów portu P5.

#include <REG515.H>

char volatile p;
void delay ()
{

unsigned int volatile i =50000;

while

(i--);

}

void main (void)

{

EAL=1;
EX0=1;
IT0=1;
while(1);

}

void int_0 (void) interrupt 0 using 2
{
p=5;
while(p--)
{
P5

=

0x00;

delay();
P5

=

0xff;

delay();
}

}
void int_T0 (void) interrupt 1 using 0

{}
void int_1 (void) interrupt 2 using 0
{}
void int_T1 (void) interrupt 3 using 0

{}

background image

Zadanie 3.
Program reaguje na przerwanie od licznika T0, pracującego w trybie 1 i włączanym
programowo. Program obsługi przerwania powinien zwiększać zmienną o 1 i wyświetlać ją
na porcie P5, jeśli zmienna przekroczy wartość 255 to ją zeruje.

#include <REG515.H>

int volatile p;

void delay (void)
{

unsigned int i=50000;

while(i--);
}

void main (void)

{

EAL=1;
ET0=1;
MOD=0x01;
TR0=1;

while(1);

}

void int_0 (void) interrupt 0 using 0
{}
void int_T0 (void) interrupt 1 using 0

{
p++;

if(p<256)

P5=p;

else

p=0x00;

delay(

);

}
void int_1 (void) interrupt 2 using 0
{}
void int_T1 (void) interrupt 3 using 0

{}

background image

Zadanie 4.
Napisz modyfikację do zadania 3, aby było obsługiwane przerwanie od licznika T1, natomiast
program obsługi przerwania przesuwał zmienną p o 1 bit w lewo za każdym zgłoszeniem
przerwania poczynając od wartości p=0x01 i wyświetlał wartość zmiennej na porcie P5. Jeśli
zmienna p przekroczy wartość p=0x80 to powinna być ustawiona na p=0x01.

Zadanie 5.

Napisz program obsługujący przerwania INT_0 i INT_1. Program obsługi przerwania INT_0
powinien zwiększać zmienną p o 1 natomiast program obsługi przerwania INT_1 zmniejszać
tą samą zmienną o jeden, w obydwu przypadkach zmienna powinna być wyświetlana na
porcie P5.

#include <REG515.H>

int volatile p;
void main (void)

{

EAL=1;
EX0=EX1=1;

IT0=IT1=1;
P5=0x00;

while(1);

}

void int_0 (void) interrupt 0 using 0
{
p++;
P5=p;
}
void int_T0 (void) interrupt 1 using 0

{}
void int_1 (void) interrupt 2 using 0
{
p--;
P5=p;
}
void int_T1 (void) interrupt 3 using 0

{}

Zadanie 6.

Dopisz do zadania 5 ograniczenie dla zmiennej p aby była z zakresu 0<p<16.

Zadanie 7.

Napisz program który obsługuje przerwania od licznika T0 pracującego w trybie 1, włączany
TR0. Program przerwania od licznika ma zwiększać zmienną p o 1 i wyświetlać jej zawartość
na porcie P5 jeżeli wartość zmiennej przekroczy p=0xff do powinna być wyświetlana na
porcie P1.


Wyszukiwarka

Podobne podstrony:
ćwiczenia na silniku, Szkolenie żeglarskie, szkolenie żeglarskie, SILNIK OBSŁUGA ISSA
Ćwiczenia na nogi i pośladki
cwiczenia na bazie PNF
12 ćwiczenia na emisję głosu, Materiały na zajęcia teatralne, Praca WARSZTATY TEATRALNE
ĆWICZENIA NA PROSTOWNIKI GRZBIETU, Kulturystyka, Ćwiczenia
ćwiczenia na koncentrację uwagi
Ćwiczenia na nogi
Ćwiczenia na jędrne pośladki
Ćwiczenia na utratę dźwięczności
Ćwiczenia na płaski brzuch, jędrne pośladki i uda oraz ładny biust
Ćwiczenia na drabinkach koordynacyjnych – cz 8
cwiczenia na biceps w domu dla mezczyzn
Kropki cwiczenie na kreatywnosc id 250
cwiczenia na klate kulturystyka

więcej podobnych podstron