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 #5147005
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

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