Bestimmter Stelle aus Variable erhalten

Gast #365176
Lesenswert?
• ▲
▼
Hallo,
hab das so versucht:

void write_data(uint8_t wert)
{
 if(wert & 1)
  {
   LCD_DATA0_PORT |=  (1 << LCD_DATA0_PIN);
  }
 else
  {
   LCD_DATA0_PORT &=  ~(1 << LCD_DATA0_PIN);
  }

 if(wert & 2)
  {
   LCD_DATA1_PORT |=  (1 << LCD_DATA1_PIN);
  }
 else
  {
   LCD_DATA1_PORT &=  ~(1 << LCD_DATA1_PIN);
  }

 if(wert & 4)
  {
   LCD_DATA2_PORT |=  (1 << LCD_DATA2_PIN);
  }
 else
  {
   LCD_DATA2_PORT &=  ~(1 << LCD_DATA2_PIN);
  }
 if(wert & 8)
  {
   LCD_DATA3_PORT |=  (1 << LCD_DATA3_PIN);
  }
 else
  {
   LCD_DATA3_PORT &=  ~(1 << LCD_DATA3_PIN);
  }

}

aber funktioniert nicht, z.B. mit dem Wert 1010.
Gast #365178
Lesenswert?
• ▲
▼
So gehts, wobei ich nicht verstehe, warum ich bei den ifs löschen muss,
um das richtige Resultat zu bekommen....

void write_data(uint8_t wert)
{
 if(wert & (1<<0))
  {
   LCD_DATA0_PORT &=  ~(1 << LCD_DATA0_PIN);
  }
 else
  {
   LCD_DATA0_PORT |=  (1 << LCD_DATA0_PIN);
  }

 if(wert & (1<<1))
  {
   LCD_DATA1_PORT &=  ~(1 << LCD_DATA1_PIN);
  }
 else
  {
   LCD_DATA1_PORT |=  (1 << LCD_DATA1_PIN);
  }

 if(wert & (1<<2))
  {
   LCD_DATA2_PORT &=  ~(1 << LCD_DATA2_PIN);
  }
 else
  {
   LCD_DATA2_PORT |=  (1 << LCD_DATA2_PIN);
  }
 if(wert & (1<<3))
  {
   LCD_DATA3_PORT &=  ~(1 << LCD_DATA3_PIN);
  }
 else
  {
   LCD_DATA3_PORT |=  (1 << LCD_DATA3_PIN);
  }
#365180
Lesenswert?
• ▲
▼
@Nico:
Und? Was würde er dann lernen?

if(wert & (1<<2))
{
 LCD_DATA2_PORT &=  ~(1 << LCD_DATA2_PIN);    *
}
else
{
 LCD_DATA2_PORT |=  (1 << LCD_DATA2_PIN);
}

Seine Frage war, warum bei * das Bit ausgeblendet werden muß, wo
if(...) auf '1' im Bit prüft (bzw. auf != 0).

Kann ich mir nur durch eine umgekehrte Ausgangslogik erklären, oder ich
hab was übersehen (dann sollte ich das Vorglühen bei Maiwanderungen
weglassen).

Grüße, Freakazoid

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.