Forum: Mikrocontroller und Digitale Elektronik zwei Fragen zur Portbearbeitung im AVR


von Owen S. (senmeis)


Lesenswert?

Servus,

F1. Ich moechte Bit4 im PORTB im ATmega128 auf 0 setzen. Ist es korrekt 
mit
1
PORTB &= 0 << PB4;
?

Werden andere Bits dadurch beeinflusst?

F2. Sind
1
input_value = PINC;
und
1
input_value = (PINC7<<PC7)|(PINC6<<PC6)|(PINC5<<PC5)|(PINC4<< PC4)|(PINC3<<PC3)|(PINC2<< PC2)|(PINC1<<PC1)|(PINC0<< PC0);
identisch?

Besten Dank im Vorraus.
Senmeis

von STK500-Besitzer (Gast)


Lesenswert?

>Ist es korrekt
>mit

>PORTB &= 0 << PB4;

>?

Nein. "<<" ist ein Schiebeoperator, der Bytes oder größere Wörter um 
"PB4" nach links verschiebt.
Wenn ein Byte den Wert "0" hat, und man diesen verschiebt, bleibt er 
"0".

Richtig ist es so:

PORTB &= ~(1<<PB4);

So ist es auch im Tutorium beschrieben.


>Werden andere Bits dadurch beeinflusst?
Ja. Aber wenn du es richtig machst, wird der Inhalt des Portregisters 
gelesen, geändert und wieder zurückgeschrieben. Je nach Compiler und 
Bitanzahl wird auch optimiert.

>F2. Sind

>input_value = PINC;

>und

>input_value = (PINC7<<PC7)|(PINC6<<PC6)|(PINC5<<PC5)|(PINC4<< 
>PC4)|(PINC3<<PC3)|(PINC2<< PC2)|(PINC1<<PC1)|(PINC0<< PC0);

>identisch?

Der zweite Ausdruck ist totaler Quatsch.
Guck dir das Tutorium und ein C-Buch an!

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.