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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.