Herzlichen Glückwunsch zum Erfolg und herzlichen Dank, dass du die Lösung hier postest und so dein Wissen mit uns (mir) teilst!

Zitat Zitat von juppkk Beitrag anzeigen
Beim XC8/ PIC12F675 ist alles anders, das ist mein Problem schlechthin.
XC8 kennt T0IE nicht. Dort heißt es TMR0IE.
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.

Zitat Zitat von juppkk Beitrag anzeigen
>>>dein Kommentar //RETFIE wird von XC8 autom. generiert, ebenso GIE=0. (heißt es) macht keinen rechten Sinn. Das Global Interrupt Enable ist aktiviert, wenn =1; <<<
Da bin ich mir sicher, das gelesen zu haben. XC8 generiert den RETFIE, ist im Debugger ja auch zu sehen und GIE wird automatisch in der ISR auf 0 gesetzt.
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.

Zitat Zitat von juppkk Beitrag anzeigen
Darum muß es im Main() immer wieder neu gesetzt werden.
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.