System przerwań 8051

W procesorze 8051 znaleźć możemy bardzo przyjemny system przerwań. Potrafi on rozróżnić sześć źródeł przerwania, zagnieżdżać je oraz ustawiać priorytety.

Źródła przerwania wraz z kolejnością przetwarzania

Kolejność obsługiŹródłoZnacznikAdres obsługi
0External 0IE00003h
1Timer 0TF000Bh
2External 1IE10013h
4Timer 1TF1001Bh
5SerialRI/TI0023h

Włączanie/wyłączanie obsługi przerwań

Możliwe jest włączanie bądź wyłaczanie obsługi poszczególnych przerwań poprzez modyfikację bajtu pod adresem A8h (IE SFR).

Co się dzieje, gdy zostanie zgłoszone przerwanie?

  1. Obecna wartość PC zostaje wrzucona na stos,
  2. Przerwania o niższym bądź równym priorytecie zostają zablokowane,
  3. W przypadku przerwań pochodzących z liczników bądź External ustawiane są odpowiednie flagi,
  4. Zaczyna się wykonywać kod z adresu odpowiedniego dla danego przerwania (patrz: tabelka)

Co się dzieje, gdy zakończymy obsługę przerwania?

Po zakończeniu obsługi przerwania należy wykonać polecenie RETI. Zauważ, że to nie RET - RETI oprócz powrotu m.in. odblokowuje zablokowane przerwania.

Priorytety

Każdemu przerwaniu możemy ustawić priorytet. Wybór mamy szeroki: Wysoki i Niski :-D

Do czego służą priorytety? Podczas wywoływania przerwania blokowane są wszystkie inne przerwania o priorytecie takim samym lub niższym. Czyli, jeśli wyskoczy nam przerwanie o niskim priorytecie, to może je przerwać przerwanie o wysokim priorytecie, ale te o niskim będzie musiało poczekać. Jednak przerwania o wysokim priorytecie nie da się przerwać.

Zauważmy też kolejność obsługi. Co się stanie, jeśli w tym samym czasie pojawią się dwa przerwania? Oczywiście, najpierw wykona się te o wyższym priorytecie. Ale co, jeśli pojawią się dwa przerwania o takim samym priorytecie? Oczywiście, najpierw wykona się to, które ma niższą kolejność.

 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki