Moin Ich habe bemerkt, dass in manchen Compilern eine bit_test und bit_set Funktion verfügbar ist, in C18 leider nicht. Hat jemand die entsprechende grad bei der Hand? result=bit_test(byte,bit); bit_set(byte,bit); vieln Dank..
so vielleicht?
1 | byte bit_test(byte b,byte n ) |
2 | {
|
3 | if ( n > 7 ) return 0; |
4 | return byte & (1<<n); |
5 | }
|
6 | |
7 | |
8 | |
9 | byte bit_set(byte b ,byte n ) |
10 | {
|
11 | if ( n > 7 ) return byte; |
12 | return byte | (1<<n); |
13 | }
|
Aus Kompatibilitätsgründen würd ichs immer so machen: Bit setzen: b |= (1<<n); Bit löschen: b &= ~(1<<n); Bit abfragen: if ( b & (1<<n) ) {...} Ist leicht lesbar und 100% kompatibel, da Standard-C. Also keine Bibliotheken nötig!
jo vielen Dank. Nur rein interessehalber: Funktioniert es auch von rechts, also (1>>n)?
Nein. Du solltest aber besser die " byte |= (1 << bit) " Schreibweise verwenden und nicht die Funktionen. Ein vernünftiger Compiler (gibts sowas für PIC12/16/18?) macht daraus eine einzelnen Assembler Anweisung. Die bit_xxx() Funktionen werden ja gerade deshalb vom Compiler bereitgestellt weil sie Probleme haben solche Situationen zu erkennen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.