Byte per #define vorinitialisieren

OP #3301246
Lesenswert?

Moin

Habe hier 2 RGB LEDs und wollte diese über ein Define mit einer Farbe 
ansteuern.
Da ich es übersichtlicher gestalten wollte, habe ich es jeweils mit 
diesen beiden Wegen probiert:
1
#define LED_1 (1<<P4OUT3)|(0<<P4OUT2)|(1<<P4OUT1)
2
#define LED_2 ~P4OUT6|P4OUT5|P4OUT4

Doch leider ist bei der Ausgabe auf
1
LED_PORT = (LED_1 | LED_2);
der komplette Port auf 0xFF

Wenn ich die defines nun mit #define LED_1 0x0A und 0x30 mache, 
funktioniert es.

Ich dachte ich hätte Bitmanipulation verstanden...

Danke für eure Hilfe! :)
OP #3301271
Lesenswert?

Grundlagen sind ja nicht unbekannt, das Verständnis ergibt sich bei mir 
aber besser durch Anwendung.

Ok und warum funkioniert das bei LED_1 nicht?
Es sollte ja dann 0b00001010 sein.

2 Varianten, weil ich ausprobieren möchte was geht und was nicht, auch 
um meinen Code übersichtlicher zu machen.
Ports usw. alles richtig. Leuchtet ja ;)
#3301281
Lesenswert?

1.) NOT bindet staerker als UND bzw. ODER
2.) UND bindet staerker als ODER
3.) im Zweifel Klammern verwenden!

(4.) MAKROS MAKROS MAKROS!)

1 und 2 sind wie Punkt vor Strich - nur fuer Logik

vermutlich willst du folgendes:
1
#define LED_1 ((1<<P4OUT3)|(0<<P4OUT2)|(1<<P4OUT1))
2
#define LED_2 (~((1<<P4OUT6)|(1<<P4OUT5)|(1<<P4OUT4)))

bzw.:
1
#define LED_1 (_BV(P4OUT3)|_BV(P4OUT1))
2
#define LED_2 (~(_BV(P4OUT6)|_BV(P4OUT5)|_BV(P4OUT4)))

MfG
OP #3301582
Lesenswert?

Muss noch mal nachhaken, denn im Moment ist es so dass
1
LED_PORT = (0<<P4OUT3) | (0<<P4OUT2) | (1<<P4OUT1);
eine andere Farbe als
1
LED_PORT = 0x02;
ergibt.

Meiner Meinung nach müsste doch beim 1. Ausdruck 0000 0010 rauskommen, 
aber leider ist es 0000 0100.

Was ist an der Bitverschiebung falsch?

Weil in der Chipspezifischen Headerdatei ist das ja so korrekt 
angegeben:
1
enum {
2
  P4OUT0          = 0x0001,
3
  P4OUT1          = 0x0002,
4
  P4OUT2          = 0x0004,
5
  P4OUT3          = 0x0008,
6
  P4OUT4          = 0x0010,
7
  P4OUT5          = 0x0020,
8
  P4OUT6          = 0x0040,
9
  P4OUT7          = 0x0080
10
};

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren