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ść.
Dodaj komentarz