Neue Erkenntnisse:
Ich habe eben mal mit dem C-Compiler XC8 geprüft was der für einen Assembler Code draus macht.
Um die Globalen Interrupts zu sperren mus man in "C" die funktion di() aufrufen.
Dies ist jedoch keine Funktion sondern ein macro definiert in der Datei PIC.H
Und nun, man staune, je nach verwendetem PIC gibt es da tatsächlich Unterschiede.
Dort wird tatsächlich ein Code erzeugt, der darauf wartet, bis das gelöschte Bit auch wirklich gelöscht ist.
Ich hab dann im Compiler mal verschiedene PICs ausgewählt und neu Compiliert um mir den Assembler Code anzusehen.
Die Bestätigung war eindeutig.
Die PICs 16C61,16C62,16C63,16C63A,16C64,16C65,16C65B,16C71, 16C73,16C73B,16C74,16C74B,16C84,16C745,16C765,16LC 74B
brauchen anscheinend diesen Code um richtig zu funktionieren.
Der PIC12F617 braucht diesen Code anscheinend nicht. Das wird wohl ein Fehler im Datenblatt sein.
Eine Information von Microchip steht aber noch aus.
Auszug aus der originalen Datei PIC.H von Microchip:
#define di() { do { GIE = 0; } while ( GIE == 1 ); } // disable interrupt bit
Die Errata Sheets werde ich auch gleich mal durchforsten.
Lesezeichen