Zitat Zitat von sternst
Gibts noch eine Erklärung dazu wie nun der Port durchgeshiftet wird um zu Prüfen ob ein Pin1 ist oder die Register zu setzen?
"PORTB <<= 1;" ist das gleiche wie "PORTB = PORTB << 1;".
Dabei wird erstmal der aktuelle Wert aus dem Register PORTB gelesen, dann dieser Wert um eine Stelle nach links geschoben (links fällt dabei ein Bit raus, rechts wird eine 0 nachgeschoben) und der geänderte Wert wird zurück in das Register geschrieben. Nach 8 Schleifendurchläufen ist die 1 links rausgefallen (PORTB ist dann also 0) und das if sorgt dann dafür, dass ganz rechts wieder eine 1 reingeschrieben wird.
Danke - ist also Quasi wie ein Schieberegister/Multiplexer. Den würde man ja Ähnlich Programmieren.

Zitat Zitat von fhs
Hi,

Zitat Zitat von BlackDevil
...Die Variable run will nicht, wie ich Prüfe ob sie 1 oder ist habe ich oben gepostet. So wie ich es eingebunden habe (run==1) funktioniert es nicht.
und Du bist Dir ganz sicher, dass Du jetzt <pre>uint8_t run=PINA&(1<<PINA0);</pre> geschrieben hast? Dann muss "run" funktionieren, wenn Du Bit0 setzt (in Deiner ursprünglichen Code-Variante hattest Du , glaube ich, mit Bit 1 gearbeitet).
Ich habe die Deklarationszeile mit Copy and Paste eingefügt... Ich machs nachher noch mal und poste den spaß

Spricht etwas dagegen statt PORTA |= (1<<PINA1), outp (0x04, PORTB); (wenn ich da richtig liege ... ) schreiben?
Bin mir nicht sicher, dass die alten "outp()" Funktionen bei den neueren GCC Versionen noch unterstützt werden. Die erste Variante ist die übliche. PORTA liegt an der Adresse 0x1B, also sind die beiden Ausdrücke nicht äquivalent.

Gruß

Fred
Das die beiden nicht Äquivalent sind liegt allein schon daran das in der einen Version PORTA und PINA angesprochen wird und bei der zweiten Variante PORTB ... geht nur um die generelle Funktion. Werde auch das nachher einfach mal ausprobieren... Finde das etwas Eingänglicher als mit den Bitoperatoren

Danke