Um bei der Programmierung Bitmasken für die Bitmanipulation zu erzeugen, ist neben der direkten Angabe der Maske im dezimalen, hexadezimalen oder binären Zahlenformat auch eine andere Schreibweise gebräuchlich, in der der Links-Shift-Operator "<<" verwendet wird, um eine Eins auf der nullten Position eines Bytes um die jeweils genannte Anzahl Stellen nach links zu verschieben.

 

Beispiel:  (1 << 3) ist eine andere Schreibweise für das Byte 0b00001000

Warum? Die Eins als Byte umgeschrieben lautet 0b00000001. Mit der Operation << 3 werden die Bits um 3 Stellen nach links geschoben, wobei von rechts mit Nullen aufgefüllt wird. Das Ergebnis ist bereits genannte Byte 0b00001000.

 

Durch eine bitweise ODER-Verknüpfung mehrerer solcher Ausdrücke lassen sich auch Masken mit mehreren Einsen erzeugen. Beispiel:

(1 << 7) | (1 << 4) | (1 <<2) ist eine andere Schreibweise für 0b10010100

 

Gemäß dem Datenblatt jedes Mikrocontrollers erhalten alle Register und auch alle Bits in den Registern unterschiedliche Namen, wie zum Beispiel das Register TCCR1B mit den Bits ICNC1, ICES1, WGM13, WGM12, CS12, CS11, CS10:

 


 Abb.: TC1 Control Register B; Quelle:BBS2 Wolfsburg

Die Namen dieser Register und der Bits sind als Bibliothek für den jeweiligen Controller verfügbar und werden mit Hilfe der "#include io.h"-Anweisung für die Programmierung verfügbar gemacht. Für das obige Beispiel sind in der Datei "iom328p.h" die folgenden Definitionen zu finden:

 

#define TCCR1B _SFR_MEM8(0x81)

#define CS10 0

#define CS11 1

#define CS12 2

#define WGM12 3

#define WGM13 4

#define ICES1 6

#define ICNC1 7

 

Mit dem Bezeichner "TCCR1B" wird eine Hardware-Adresse im Mikrocontroller angesprochen. Bei den Bezeichnern  ICNC1, ICES1, WGM13, WGM12, CS12, CS11, CS10 handelt es sich um andere Definitionen für die Ziffern 7 bis 0. Um die Bits CS12, WGM13 und ICNC1 zu setzen würde somit die Bitmaske

(1 << ICNC1) | (1 << WGM13) | (1 << CS11)

benötigt, die wie oben eine andere Schreibweise für das 0b10010100 darstellt.

 

Bei der Programmierung ergibt sich so die Möglichkeit, Bits anhand ihrer gängigen Namen anzusprechen. Diese sind dem erfahrenen Programmierer eher geläufig als die konkreten Bitnummern, die sich bei verschiedenen Mikrocontrollern einer Controller-Familie auch unterscheiden können, während die Bitnamen häufig gleich bleiben.


Zuletzt geändert: Donnerstag, 20. Januar 2022, 11:15