Herzlichen Glückwunsch zum Erfolg und herzlichen Dank, dass du die Lösung hier postest und so dein Wissen mit uns (mir) teilst!
Das ist ja fies. Und es läuft der Microchip-Gewohnheit zuwider, Bitnamen im XC8 abweichend vom Datenblatt zu wählen. Sieht nach einer übertriebenen Vereinheitlichung mit TMR1IF ... aus. T0IF ist ja der historische Standardname beim Timer0-Interruptflag.
Ja, schon. GIE wird mit dem Einsprung in die ISR per Hardware weggenommen und beim Verlassen der ISR vom retfie-Befehl wieder gesetzt, damit kein zweiter Interrupt verschachtelt aktiviert werden kann. Dafür ist dieser Controller nicht ausgelegt, die Rücksprungadressen würden dann durcheinander kommen.
ISR-Priorisierung gibt es hier ebenfalls nicht. da solltest du nochmal genauer hinschauen.
Nein. Wie sollte main() das auch sinnvoll leisten? GIE sollte in der Regel nur dort manipuliert werden, wo man einem Interrupt die Unterbrechungserlaubnis geben oder entziehen will oder zur Realisierung atomarer Befehlssequenzen. Ansonsten kann im Controller hundert Jahre lang eine Timer0-ISR zyklisch aktiviert werden ohne dass jemals GIE durch einen Programmbefehl gesetzt oder gelöscht werden muss.
Lesezeichen