Johnny schrieb:
> while(SPSR & (1<<SPIF)){}
Die Sequenz
1 | SchiebeOut:
|
2 | sbis SPSR, SPIF ; prüfe ob eine alte Übertragung beendet ist
|
3 | rjmp SchiebeOut
|
kommt nur dann aus der Schleife raus, wenn das Bit gesetzt ist.
SBIS bedeutet 'Skip If Bit Is Set'
Skip bedeutet 'überspringe' und gemeint ist damit der nächste Befehl.
Der nächste Befehl, also der RJMP, wird übersrungen (also nicht
ausgeführt), wenn das angegebene Bit gesetzt ist.
Effektiv macht diese Sequenz also:
Solange das Bit NICHT gesetzt ist, wird immer weiter 'geschleift'. Der
RJMP wird jedesmal ausgeführt und führt wieder zum SBIS zurück
Erst dann, wenn das Bit gesetzt ist, wird die Schleife abgebrochen,
weil dann der RJMP nicht ausgeführt wird.
Deine Schleife
1 | while(SPSR & (1<<SPIF)){}
|
macht genau das Gegenteil davon.