top of page

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ć.)


Wyróżnione posty
Ostatnie posty
Archiwum
Wyszukaj wg tagów
Nie ma jeszcze tagów.
Podążaj za nami
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page