Wert aus Array auf Portpin legen

Gast #5144216
Lesenswert?
• ▲
▼
Hallo, ich programmiere gerade einen Atmel-Controller und arbeite das 
erste mal mit Arrays.

Ich möchte eine LED-Anzeige steuern und habe "Muster" in einem Array 
abgelegt. Dieses Muster möchte ich auslesen und auf die Ausgänge legen.

Jedoch weiß ich nicht, wie ich ein einzelnes Bit des Werts aus dem Array 
auf einen Pin bekomme.

Beispiel:
Array-Wert: 0x 362 --> Binär= 0011 0110 00X0 (X, das Bit, das ausgegeben 
werden soll)


Jetzt habe ich 12 LEDs angeschlossen und jeder LED soll ein Bit aus dem 
Array zugewiesen werden. Wie mache ich das?

Das zweite Bit an LED1:

PORT_LED1 = (PIN_LED1 & (ARRAY[7] & 0x02))???
(PORTB = PB1)

Oder mit Bit schieben?

Schönen Gruß und Dank im vorraus
Gast
Lesenswert?
• ▲
▼
Kann man so machen:
1
#define bitMaske 0b00000010
2

3
PORTB = PORTB & bitMaske | (meinByte & bitMaske);

Eventuell erzeugt die Variante mit if/else jedoch kompakteren 
Maschinen-Code, auch wenn der C-Quelltext komplexer aussieht. Denn sie 
kann dann auf Bit-Befehle zugreifen, für die es in C leider kein 1:1 
Gegenstück gibt.

1
#define bitMaske 0b00000010
2
if (meinByte & bitMaske)
3
{
4
   PORTB |= 0b10000000;
5
}
6
else
7
{
8
    PORTB &= 0b10000000;
9
}

Hier sieht es so aus, als müsste der Prozessort das PORTB Register 
zuerst lesen, dann eine UND bzw ODER Verknüpfung durchführen und dann 
zurück schreiben. In Wirklichkeit mach der Compiler daraus aber simple 
Setze-Bit und Lösche-Bit Befehle, die der Prozessor in einem Takt 
ausführt. Es bleibt also lediglich die Rechnerrei für die if() Bedingung 
übrig.

Anstelle der Bitmasken schreibt man oft auch:

(1<<0) entspricht 0b00000001
(1<<7) entspricht 0b10000000

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.