• Grupa PINO
  • Prv.pl
  • Patrz.pl
  • Jpg.pl
  • Blogi.pl
  • Slajdzik.pl
  • Tujest.pl
  • Moblo.pl
  • Jak.pl
  • Logowanie
  • Rejestracja

Programowanie mikrokontrolerów AVR

Materiał kierowany będzie głównie do studentów lub hobbystów programowania mikrokontrolerów, z naciskiem na praktyczną wiedzę opartą na własnych doświadczeniach.

Kategorie postów

  • elektronika (3)

Strony

  • Strona główna
  • Księga gości

Przerwania zewnętrzne_cz2

Na obrazku powyżej przedstawiony najbardziej popularny schemat podłączenia przycisku do miktrokontrolera. Gdy przycisk nie jest wciśnięty, obwód jest otwarty i na pinie PD2 jest stan wysoki. Gdy przycisk zostanie wciśnięty całe napięcie odłoży się na rezystancji podłączonej do zasilania Vcc, i na pinie PD2 będzie stan niski. Taka konfiguracja jest defaultowa i wymaga najmniej zmian w rejestrach.


Zaczynając zabawę zwłaszcza z procesorami ATmega, jesteśmy zdani na dokumentacje czyli potocznie zwane datasheety. Są na szczęście tak napisane, że bardzo łatwo po małej wprawie znajdziemy informacje, których potrzebujemy jako młodzi kontruktorzy. W wypadku obsługi przerwań zewnętrznych jest nie inaczej.

Pierwszym interesującym rejestrem jest rejestr :  MCUCR – MCU Control Register

The MCU Control Register contains control bits for interrupt sense control and general MCU functions.

ISC01 ISC00 Description
0    0 The low level of INT0 generates an interrupt request.
0 1  Any logical change on INT0 generates an interrupt request
1 1  Any logical change on INT0 generates an interrupt request

Gdy chcemy korzytać z konfiguracji, gdy to stan niski aktywuje przerwanie, ten rejestr nas nie interesuje. Dla osób, które z jakigoś powodu chcą aby to stan wysoki zgłaszał przerwanie, a stan niski nie musi wykorzystać opcje rising edge, czyli zgłoszenie przerwania spowodowane rosnącym zboczem.

Wtedy taki zapis w języku C wyglądałby następująco:

MMUCR |= (1 << ISC01) | (1 << ISC00) ;

Dla niewtajemniczonych co oznacza zapis '|=' można to zapisać także jako :

MMUCR = MMUCR |  (1 << ISC01) | (1 << ISC00) ; 

Operator '|' jest tak zwaną sumą logiczną lub logicznym OR. Dla sumy logicznej wystarczy jeden argument o wartości "1", aby jej suma wynosiła "1", dlatego w postaci sumy zapisujemy do rejestrów poszególne je wartości. 

 

Kolejnym rejestrem, który będzie nas interesował jest rejestr : GICR – General Interrupt Control Register 

 

 

Dla ustalenia uwagi będzie to INT0. Ten rejestr odpowiada, który dokładnie PIN będzie odpiwiadał za zgłoszenie przerwania. Dla ATmego16 będzie to pin PD2, ale dla innego miktrokontrolera będzie to odpowiednio inna wartość.

 

02 maja 2021   Dodaj komentarz
elektronika   external   interrupts  
Do tej pory nie pojawił się jeszcze żaden komentarz. Ale Ty możesz to zmienić ;)

Dodaj komentarz

Elektroniczne_hobby | Blogi