Die wichtige Bedeutung von Byteoperationen bei der Mikrocontroller-Programmierung
#include<avr/io.h>
int main(void)
{
unsigned char akku;
DDRB = 0b00000000;
DDRC = 0b11111111;
while(1)
{
akku = PINB;
if( (akku & 0b00000001) > 0 )
{
PORTC = 42;
}
else
{
PORTC = 0;
}
}
}
Code 0-1: Taster-Programm
- Obiges Programm zeigt immer, wenn der Taster bei PB0 gedrückt ist eine 42 an, ansonsten eine Null.
- Die Potentiale an den Pins von Port B werden durch den Befehl akku = PINB als Bitmuster in die Variable akku geladen.
- Es muß nun überprüft werden, ob das erste Bit (Bit 0 / PB0) am Eingang auf 1 gesetzt ist.
- (akku & 0b00000001) stellt eine bitweise UND-Verknüpfung des Inhalts von akku mit der Zahl 1 (0b00000001) dar.
- Da bei einer UND-Verknüpfung stets die korrespondierenden Bits beide 1 sein müssen, damit an der Bitstelle wieder 1 herauskommt, spielen für das Ergebnis das 2. bis 8. Bit von akku keine Rolle.
- Nur wenn das 1. Bit (PB0) 1 ist kommt bei der UND Verknüpfung insgesamt 1 heraus, sonst Null.
- Somit ist die if-Bedingung genau dann erfüllt, wenn der Taster bei PB0 gedrückt ist.
|
- Während bei der Programmierung am PC ev. nicht ganz der Nutzen bitweiser logischer Verknüpfungen einzusehen war, gewinnen sie im Zusammenhang mit der Programmierung von Mikrocontrollern eine große Bedeutung.
|
Rechenbeispiele für Bitweise UND-Verknüpfung
- 0b10101010 & 0b01010101 = 0b00000000
- 0b11111100 & 0b00111111 = 0b00111100
- 255 & 2 = 2
- 14 & 15 = 14
- 0xf0 & 0xf1 = 0xf0
|
Rechenbeispiele für Bitweise ODER-Verknüpfung
- 0b10101010 | 0b01010101 = 0b11111111
- 0b11111100 | 0b00111100 = 0b11111100
- 255 | 2 = 255
- 14 | 15 = 15
- 0xf0 | 0xf1 = 0xf1
|
Bitshift-Operator
- Ein weiterer Bitoperator, der an dieser Stelle schon eingeführt werden soll ist der Bitshift-Operator
- Mit seiner Hilfe lassen sich einzelne Bits in einer unsigned char Variable setzen:
- akku = 1<<2; beispielsweise verschiebt zweimal die 1 um ein Bit. Das ergibt dann dezimal 4.
- akku = 1<<5; ergibt entsprechend 32, oder 0b00100000.
- Die Zahl hinter dem << entspricht also immer dem Bit, das gesetzt wird.
|