Forum: Mikrocontroller und Digitale Elektronik Funktion "bit_is_set(register,position)" in codevision


von Daniel (Gast)


Lesenswert?

Hallo,
ich steige gerade von AVR Studio auf Codevision um.
Dabei möchte ich mein bisheriger Code an Codevision anpassen.

Nun gibt es für AVR Studio die Funktion "bit_is_set(register,position)".

Wie kann ich diese Funktion in Codevision schreiben?

Hier ein kleiner Codeauszug
1
void LCD_SET_COLUMN(unsigned char column_2)
2
{
3
         ...
4
  if(bit_is_set(column_2,5)) column_msb = column_msb + 0x04;
5
  if(bit_is_set(column_2,5)) column_msb = column_msb + 0x02;
6
  if(bit_is_set(column_2,4)) column_msb = column_msb + 0x01;
7
  if(bit_is_set(column_2,3)) column_lsb = column_lsb + 0x08;
8
         ...

Danke im Vorraus.
Gruß Daniel

von crazy horse (Gast)


Lesenswert?

da gibts nichts CodeVision-spezifisches.
if (column_2 | 1<<5) ...
1<<5 kannst du natürlich direkt durch eine Zahl ersetzen. Oder mit 
defines, etwas besser lesbar, aber in dem Zusammenhang nicht unbedingt 
nötig:
#define test_bit_5 0x10
if (column_2 | test_bit_5)...

von Daniel (Gast)


Lesenswert?

Danke,
ich werde das Zweitere nutzen.
Gruß
Daniel

von Thorsten (Gast)


Lesenswert?

müsste das nicht

if(column_2 & 1<<5){};

heissen?

von Karl H. (kbuchegg)


Lesenswert?

> if (column_2 | 1<<5) ...

UND, nicht ODER

  if( column_2 & ( 1 << 5 ) )


Ich würde allerdings empfehlen ein Makro dafür zu schreiben.

#define bit_is_set( Reg, Bit ) ( Reg & ( 1 << Bit ) )

ganz am Anfang rein und du brauchst das Programm nicht
umschreiben.

von crazy horse (Gast)


Lesenswert?

auweia, logisch :-)

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
Noch kein Account? Hier anmelden.