Ein Bit setzten

Gast #4118401
Lesenswert?

Hallo,

kann ich ein einziges Ausgangsbitt in GCC wie folgt setzten ?

Das soll das Bit ACO des Analogkomparatorregisters auf Bit 0 des Portes 
B schreiben.

PB0 = ACO;


Ich möchte mir somit folgendes spare:
if(ACO == 1)
{
PORTB |= (1<<PB0);
}
else
{
PORTB &= ~(1<<PB0);
}

Gibt es eventuell eine andere kürzere Alternative ?

Grüße
#4118439
Lesenswert?

Sebastian V. O. schrieb:
> Ich habe nur eine alternative Variante des Codes vom TE geliefert. Dort
> taucht auch kein ACSR auf. Keine Ahnung ob meine Variante oder die vom
> TE schneller ist/weniger Instructions braucht, aber so ist es etwas
> weniger Tipparbeit. Bzw. wenn man weiß, dass das Bit sowieso 0 ist kann
> man sich das löschen des Bits auch sparen.
Die Variante vom TE als auch deine funktionieren aber nicht.

Project HC schrieb:
1
> if(ACSR & (1 << ACO)) PORTB |=  (1<<PB0);
2
> else                  PORTB &= ~(1<<PB0);
so is richtig
Gast #4120983
Lesenswert?

Walter S. schrieb:
> Simpel schrieb:
>> In Bascom schreibt man dafür einfach:  PORTB.0 = ACO.
>
> das glaube ich jetzt mal nicht

Damit liegst du richtig!
AC0 hat den Wert 4 entsprechend dem Bit-Platz in ACSR.

Richtig muss es heißen: PORTB.0 = ACSR.AC0

Und das geht! Habe ich im Simulator getestet.

Simpel schrieb:
> Sieht halt nicht so elitär aus, wie ein
> "PORTB = (PORTB & ~(1 << PB0)) | ((ACSR & (1 << ACO)) >> ACO) << PB0;"

Damit hat er immer noch recht!!!!!

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