Sprawdzanie wciśnięcia klawiszy odbywa się w przerwaniu INT0 w liniach od 11 do 15.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A działa to tak. Po wejściu do przerwania piny klawiszy ustawiane są jako wejścia podciągnięte do Vcc (linia 3 i 4).
Następnie pin PD2 jest ustawiany jako wyjście w stanie niskim (linia 6 i 7). Na PD2 panuje stan niski więc możemy go potraktować jako GND. Czyli mamy typową sytuację, w której wciśnięcie klawisza zwiera wejście do GND.
Jeśli wciśnięty został np. klawisz 3 podłączony do PC3 to stan niski z PD2 zostanie podany na wejście PD3. Warunki w liniach od 11 do 15 sprawdzają na którym pinie od PC1 do PC5 jest stan niski.
Czyli po wciśnięciu PC3 PINC przyjmie wartość 0bxx11011x. Na tą wartość zostaje nałożona maska KL3 czyli 0b00001000. Po wykonaniu iloczynu logicznego & otrzymujemy
Kod:
0bxx11011x
0b00001000
& 0b00000000
Wartość 0b00000000 to FALSE (fałsz) co po zastosowaniu negacji logicznej
! da nam TRUE (prawda). Czyli wykonany zostanie warunek
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Gdyby jednak przerwanie się wykonało a żaden klawisz nie byłby wciśnięty (drgania styków) to żaden warunek się nie wykona bo
Kod:
PINC 0bxx11111x
KL3 0b00001000
& 0b00001000 (TRUE)
!0b00001000 (FALSE)
Dla pozostałych klawiszy zadziała to tak samo.
W PINC literą x oznaczyłem bity, które nas nie interesują.