PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variable Ausgabe



CsMTEch
09.06.2014, 13:08
Hallo,

ich würde die gerne variable Bitmaske haben, also:

PortD &= 0bxxxx0000

Die 'x's (oder wie ist der Plural?:D) sollen dabei Variabel sein, also entweder 1 oder 0.

Wie könnte man das realisieren?

Lg

BMS
09.06.2014, 13:40
Hallo,
ganz einfach:
PORTD &= maske;
Und maske muss dann halt vorher irgendwo definiert sein.
Sollen alle x den gleichen Wert haben? Oder sollen diese unabhängig voneinander sein?
Grüße, Bernhard

CsMTEch
09.06.2014, 14:08
Wie definiere ich denn "Maske"?
Mach ich das ähnlich wie mit einer Variable (int Zahl = 20)?

Die 'x'e soll am besten unabhängig von einander sein, also z.B. 0110.

Schon mal danke für die rasche Antwort :)

BMS
09.06.2014, 14:18
Z.B.

uint8_t maske;
maske=0;
if(a){maske|=(1<<7);}
if(b){maske|=(1<<6);}
if(c){maske|=(1<<5);}
if(d){maske|=(1<<4);}
PORTD&=maske;

(ungetestet)
Je nach dem wie abcd gesetzt sind, wird die Maske angepasst.
Die Maske ist in dem Beispiel abcd0000 (binär), wobei a,b,c,d jeweils 0 oder 1 sein können.
Sicherlich gibt es elegantere Lösungen.

Wozu möchtest du das verwenden? Je nach Aufgabe kann man das eventuell auch ganz anders lösen.

CsMTEch
09.06.2014, 14:38
Ich will eigentlich ein Bitmaske an eine Funktion übergeben, die dementsprechend die Ausgänge schaltet und LEDs leuchten lässt.

void Out_Leds(Bitmaske)
{
PortD &= Bitmaske;
}

In der Main sollte die Funktion dann so aufgerufen werden können:

Out_Leds(11110000);

BMS
09.06.2014, 15:06
Achso an D4...D7 hängen LEDs. Und die restlichen Pins an PORTD sollen unverändert bleiben?
Hm :-k
Versuch mal das:


void Out_Leds(uint8_t maske)
{
PORTD|=(maske & 0xf0); //LEDs einschalten, die eingeschaltet werden sollen
PORTD&=(maske | 0x0f); //LEDs ausschalten, die ausgeschaltet werden sollen
}
(ungetestet)
Die Main muss dann Out_Leds(0b........); aufrufen.
Grüße, Bernhard