Forum: Mikrocontroller und Digitale Elektronik Wert in Register schreiben


von Mirko Radowitz (Gast)


Lesenswert?

Hi,

mich würde mal interessieren, mit welcher Methode man in ein Register 
schreibt. Da gibts ja mehrere Möglichkeiten. Aber was ist zu bevorzugen? 
(Unterschied)

Als Beispiel das ADC Register vom AT90S4433:

outb(ADCSR, BV(ADEN) | BV(ADSC) | BV(ADFR) | BV(ADPS1) | BV (ADPS2)); 
->11100110

oder einfach:

ADCSR = 0xE6;

Den outp-Befehl soll man ja nicht mehr verwenden.

Vielen Dank im voraus.

Gruß Mirko

von Dieter Brüggemann (Gast)


Lesenswert?

Hallo Mirko

Den outp sollte man nicht mehr verwenden, da hast du Recht.

Bei dieser alten Variante sieht man halt, mehr oder weniger direkt, 
welche Bits im Register gesetzt werden oder nicht.

outb(ADCSR, BV(ADEN) | BV(ADSC) | BV(ADFR) | BV(ADPS1) | BV (ADPS2)); 
->11100110

Hier muß man erst immer nachschauen oder rechnen.
ADCSR = 0xE6;

Ich schreibe alle Werte jetzt so z.B.:
Da sieht man auch direkt, welche Bits gesetzt werden.

UCSRB = (1<<TXEN) |( 1<<TXCIE);

MFG
Dieter

von Reiner (Gast)


Lesenswert?

Wie wärs denn hiermit:
ADCSR = _BV(ADEN) | _BV(ADSC) | _BV (ADFR) ....
oder
UCSRB = _BV(TXEN) | _BV(TXCIE);

von Sascha Weitkunat (Gast)


Lesenswert?

Wobei _BV(xx) und BV(xx) nur Makros sind um eine 1 um X nach links zu 
shiften, also äquivalent zu (1 << X).

Die Verwendung von _BV(X) oder (1 << X) fällt wohl unter die 
künstlerische Freiheit, wobei (1 << X) vielleicht etwas durchschaubarer 
ist.

von Mirko Radowitz (Gast)


Lesenswert?

Danke für die Info

Gruß Mirko

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.