Gast
#3548793
Hallo
ich nutze den ccs c Compiler v4.128 und habe
für einen Zeitmesser ein gängiges Beispiel
hergenommen.
Das Beispiel funktioniert auch wunderbar, nur
wenn ein EXT mit einem Timer0 Überlauf
zusammentrifft, dann kommt es zu einem falschen
Ergebnis.
#int_TIMER0
void TIMER0_isr(void)
{
Counter0 = Counter0 + 1;
}
#int_EXT
void EXT_isr(void)
{
anzahl0 = (Counter0 * 65536) + get_timer0() ;
if (anzahl0 < 100000)
{
output_high(PIN_C0);
}
else
{
output_low(PIN_C0);
}
set_timer0(0);
Counter0 = 0;
}
void main()
{
while(TRUE)
{
}
}
Ich weiß theoretisch, daß
Interrupts nacheinander abgearbeitet werden, warum
also kommt beim zeitnahen Zusammentreffen
des EXT und des Timer0 Überlaufes zu einem
Fehler und was kann man dagegen machen?
Der Fehler sieht so aus, daß wohl der Counter
nicht hochgezählt ist aber der get_timer0()
noch recht niedrig ist, also übergelaufen ist.
Auch ein disable_interrupts entweder im ext
oder timer0 Interrupt brachte kein Ergebnis.
Vielen Dank im Voraus für eure Ratschläge