Podstawowe operacje logiczne języka C.
Podczas programowania mikrokontrolerów w ramach kursu należy posiadać podstawową wiedzę dotyczącą operacji logicznych wykonywanych na rejestrach układu. Operacje używane są bardzo często podczas programowania i pojawiają się już na początku nauki gdy zachodzi potrzeba konfiguracji peryferiów układu nawet tak podstawowych jak wejścia i wyjścia.
Przykład został opisany na podstawie ustawienia pinu 3 portu D jako wyjście.
W tym celu należy ustawić bit DDD3 rejestru DDRD jako stan wysoki (wartość 1) zgodnie z notą
katalogową:
Żeby spełnić powyższe wymagania można napisać następującą linie kodu:
DDRD|=(1<<DDD3);
Taki zapis jest równoznaczny z zapisem:
DDRD=DDRD|(1<<DDD3);
i oznacza że operacja logiczna której symbol znajduje się przed znakiem przypisania (znak równości) wykonywana jest na aktualnej wartości rejestru po lewej stronie i rejestrze po prawej stronie, a wynik operacji nadpisuje poprzednią wartość rejestru po stronie lewej.
Pierwszą wykonywaną operacją jest przesunięcie bitowe w lewo którego operatorem jest znak "<<".
Po stronie lewej określamy co chcemy przesunąć, zaś po prawej o ile pozycji ma zostać przesunięte.
W omawianym przykładzie przesuwana jest liczba 1. W zapisie dwójkowym 0000 0001. Każdy element tego rejestru(w tym istotna 1 z najmniej znaczącego bitu) przesuwany jest o 3 pozycje, ponieważ jest to numer odpowiadający bitowi DDD3.
Po tej operacji rejestr 0000 0001 zmieniony został na 0000 1000.
Analogicznie wykonywana jest operacja przesunięcia bitowego w prawo (operator ">>")
W pokazanym przykładzie operacją logiczną jest alternatywa OR (|), której tabela logiczna wygląda następująco:
Wykonywana jest ona na rejestrze uzyskanym z operacji przesunięcia bitowego oraz aktualnej wartości rejsetru DDRD. Na potrzeby przykładu przyjmijmy, że rejestr DDRD nie był wcześniej zmieniany i ma on wartość domyślną (0000 0000).
Wynik w czerwonej ramce będzie nowym stanem rejestru DDRD. Korzystanie z operacji logicznych przy konfiguracji jest ważne, ponieważ dzięki nim możemy zmienić stan konkretnych bitów w rejestrze bez wpływu na pozostałe.
Pozostałymi najważniejszymi operacjami logicznymi są: negacja NOT (~), koniunkcja AND (&) oraz alternatywa rozłączna XOR (^):
Zebrane w całość informacje o operatorach w C znajdziecie na Wiki:
(Wiki to zawiera błędy w tabelkach, dlatego lepiej porównać je z tymi wyżej we wpisie. Jeżeli znajdziecie jakieś bardziej dokładne źródło z przykładami to dajcie znać.)