Ganz kurz - Die richtige Art ein Bit zu setzen

Gast #178518
Lesenswert?

So ...
Langsam blick ichs nimmer ...

Welches ist denn nun die richtige Art ein Bit eines Ports zu setzen (am
Beispiel eines atmega8).

Sagen wir ich will an PORT D, das 0te Bit auf 1 setzen .. Wie mache ich
das ..

cbi und sbi ist ja veraltet (lt. Doku), und loop_until_bit_is_set ist
glaub ich nicht das was ich suche, oder ?
Gast #178521
Lesenswert?

Hi,

ich bevorzuge diese schreibweise:

DDRC |=(1<<DDRC0)
DDRC &= ~(1<DDRC0)

man sieht gleich welches BIT im Register gesetzt oder geloescht ist
z.B. :

ADCSRA |= (1<<ADEN) | (1<<ADPS2);

hier sieht man es eindeutig das nur ADEN und ADPS2 im Register ADCSRA
gesetzt werden.

man kann ich sich auch kleine makros machen, aber die C Schreibweise
kann jeder lesen.

Mfg
Dirk
Gast #178523
Lesenswert?

Schon, nur ich find's auch Praktischer, wenn man die "K&R"-Version
benutzt :)
Das versteht wirklich jeder C-Programmierer. Und wenn man mal Hilfe
braucht, bei dem es nicht um Hardwarespezifische Sachen geht, dann muss
der Helfende sich entweder auch bereits mit der AVR-Toolchain befassen,
oder der Hilfesuchende muss es ihm erklären.
Ich habe eine Zeitlang auch _BV verwendet, aber es nachher doch wieder
ersetzt...

Allerdings: jedem Pott seinen Deckel, soll heissen: jeder so, wie er es
mag!
Gast #178524
Lesenswert?

Ich blicks auch nicht, kann mir jemand erklären was der Unterschied
ist:
1. TIMSK = _BV(TOIE0); //ich dachte ich setze das bit (=1)?
2. TIMSK |= _BV(TICIE1); //bit löschen (=0) ?
3. TIMSK &= _BV(TICIE1); //was passiert jetzt?

4. TIMSK = _BV(TOIE0);
ist das gleiche wie
   TIMSK = (1<<TOIE0);
???
Gast #178525
Lesenswert?

1.) nur das Bit TOIE0 wird gesetzt -- alle anderen werden gelöscht
(effektiv ein OUT, sofern die Parameter das zulassen und Optimierung
aktiv ist)

2.) das Bit TICIE1 wird gesetzt, alle anderen bleiben unverändert
(effektiv ein SBI, sofern ... wie oben)

3.) eine wenig sinnvolle Operation; in TIMSK werden alle Bits gelöscht
außer TICIE1, das bleibt erhalten

Sinnvoller wäre:

TIMSK &= ~_BV(TICIE1);

Das TICIE1-Bit in TIMSK wird gelöscht (effektiv ein CBI, sofern...)

4.) Ja.

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