język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pod nazwą PC7 kryje się liczba 7, więc zostanie wykonane 1<<7, czyli 0b00000001 << 7 np.
0b00000001<<0 = 0b00000001
0b00000001<<1 = 0b00000010
0b00000001<<2 = 0b00000100 itd.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
PORTC ^= led_pin to to samo co PORTC = PORTC ^ led_pin oraz PORTC = PORTC ^ 0b10000000
^ to operator bitowy, który ma taką tablicę prawdy:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
Mówiąc krótko jak pierwszy z argumentów jest 1 to wynikiem jest przeciwna wartość drugiego argumentu i to jest robione powyżej tylko, że na wszystkich bitach np. 0b11110000 ^ 0b01010101 = 0b(1^0)(1^1)(1^0)(1^1)(0^0)(0^1)(0^0)(0^1) = 0b10100101, a skoro druga liczba to 0b10000000 to na przeciwny zamieniany jest najstarszy bit (pierwszy od lewej)
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zacznijmy od tego co w nawiasie PINC & key_pin = PINC & 0b01000000 to iloczyn logiczny, który ma taką tablicę prawdy:
0 & 0 = 0 //0*0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
Jeżeli chociaż jeden z argumentów jest 0 to wynik jest 0. Wynik jest obliczany na wszystkich bitach np. 0b11110000 & 0b01010101 = 0b01010000 i służy to tutaj do sprawdzenia stanu 6 bitu PINC, bo działanie 0byXyyyyyy & 0b01000000 = 0b0X000000 i jak X = 1 to wynikiem jest 0b01000000, a jak X jest 0 to wynikiem jest 0b00000000. W języku C każda wartość większa od 0 to prawda, a 0 to fałsz zatem dla X = 1 wyrażenie w nawiasach jest prawdą, a dla X = 0 wynikiem wyrażenia w nawiasach jest fałsz.
! to negacja
logiczna, czyli taka która traktuje liczbę jako całość (w porównaniu do operatorów bitowych, które działają na poszczególnych bitach) i zamienia prawdę na fałsz i na odwrót). Całkowity wynik jest jak widać zanegowany.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Tablica prawdy dla sumy bitowej:
0 | 0 = 0 //0+0=0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
Działanie wykonywane jest na wszystkich bitach np. 0b11110000 & 0b01010101 = 0b11110101. Jak chociaż jeden z argumentów jest 1 to wynik jest 1. Wykorzystane jest to tutaj do ustawienia najstarszego bitu DDRC na 1, a pozostałe będą niezmienione. Nie musimy znać stanu tego bitu. Na pewno po tej operacji będzie 1.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Operator & był omówiony. Kolejny ~służy do negacji wszystkich bitów np. ~0b11110000 = 0b00001111. W wyniku negacji bitowej key_pin otrzymamy ~0b01000000 = 0b10111111. Tutaj z kolei wykorzystane jest to do wyzerowania 6 bitu DDRC (pozostałe zostaną niezmienione). Nie musimy znać jego stanu, po tej operacji na pewno będzie 0.