Vorrang hat er schon, aber dann müssen die Werte, die er verändert hat, auch ausgewertet werden, bevor er ein zweites Mal auftritt, sonst werden die Werte wieder überschrieben.
Was ich daran noch nicht verstehe: Die Messung, die nicht ausgewertet werden kann, wird überschrieben. Nagut, dann fehlt eine Messung. Aber die nächste Messung überschreibt die Werte und wird ausgewertet. Und dieses Ergebnis muss doch dann stimmen. Es können Messungen aus Zeitgründen verloren gehen. Aber wenn ausgewertet wird, dann stimmt das Ergebnis.
Ich verstehe deine Programmierung ohne Warteschleifen und habe das auch schonmal angewendet. Damit habe ich eine Animation auf einer 7-Segment Anzeige laufen lassen, während die Messungen liefen. Das funktionierte auch wie gewünscht. Nur weiß ich jetzt nicht so richtig, wie ich das auf die I2C Bibliothek anwende.
Als Beispiel nehme ich mal die TWIM_Stop Funktion:
Code:
void TWIM_Stop (void)
{
// Send stop condition
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
//Wait until stop condition is executed and bus released
while (TWCR & (1<<TWINT));
}
Ich müsste also natürlich das while entfernen und mit " if ( Zähler == 10 ) " dafür sorgen, dass z.B. alle 10ms diese TWINT-Bedingung überprüft wird. Da die Bedingung aber nicht zu jeder Zeit überprüft werden soll, sondern nur in bestimmten Situationen, muss ich noch eine Variable setzten, die den Zustand speichert und alle anderen Funktionen müssen durch die Zustandsvariable verriegelt sein?
Das würde dann so aussehen:
Code:
void TWIM_Stop (int Zähler)
{
// Send stop condition
if ( Zähler == 5 && Zustand == 6 )
{
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
Zustand++;
}
//Wait until stop condition is executed and bus released
if (Zähler == 10 && Zustand == 7 && (TWCR & (1<<TWINT) )
Zustand++;
}
Lesezeichen