Mit den Einstellungen vom ‚PIE1‘-Register werden weitere Funktionen (bzw. Unterfunktionen) der Interruptmöglichkeiten des Controllers eingestellt.
Man muss beachten, dass die generelle Funktion der Interrupts in ‚INTCON‚ eingeschaltet werden muss, sonst geht nix Also dort Bit 7 und ggf. Bit 6 auf „1“ setzen.
Bit 7:
1 = Interrupt bei Ende eines EEPROM-Schreibvorganges aktiv.
0 = Interrupt bei Ende EEPROM schreiben inaktiv.
Bit 6:
1 = Interrupt bei Ende eines A/D-Wandler Vorganges
Das INTCON Register beinhaltet die Settings zu den Interruptfunktionen des 12F675.
Herstellerseitig wird empfohlen, die betreffenden Bits vor der Benutzung über die Software zurückzusetzen, um eine sichere Funktionen zu gewähren.
INTCON liegt in Bank0.
Bit 7:
0 = Alle Interrupts deaktiviert.
1 = Alle aktiviert.
Es ist zu beachten, dass die Interrupts auch ggf. noch in den betreffenden/weiteren Registern aktiviert werden müssen.
Bit 6:
0 = Alle Interrupts deaktiviert, die intern vom PIC ausgelöst werden können.
1 = Alle Interrupts aktiviert, die intern vom PIC ausgelöst werden können.
Es ist zu beachten, dass auch die Interrupts auch ggf. noch in den betreffenden/weiteren Registern aktiviert werden müssen. Insbsondere Register PIE1 spielt hier eine große Rolle!
Bit 5:
0 = Timer0 Interrupt abgeschaltet
1 = Timer0 Interrupt aktiv
Bit 4:
0 = GP2 Interrupt abgeschaltet
1 = GP2 Interrupt aktiv
Bit 3:
0 = GPIO Interrupt abgeschaltet
1 = GPIO Interrupt aktiv
Dies bezieht sich nicht nur auf einen einzelnen Pin wie bei Bit 4, ein Pegelwechsel an einem Pin des gesamten GPIO-Ports kann einen Interrupt auslösen. Beim 12F675 kann dies jeder Pin des Ports sein.
Bit 2:
1 = Timer0 hat in Register TMR0 einen Überlauf ausgelöst
0 = Timer0 hat keinen Überlauf ausgelöst.
Man kann also auslesen, ob der Timer durchgezählt hat. Wichtig: Das Bit wird NICHT vom Controller zurückgesetzt, das muss im Programm geschehen (bcf INTCON,2).
Bit 1:
1 = Interrupt an GP2 wurde ausgelöst
0 = Kein Interrupt an GP2 ausgelöst.
Auch hier muss das Bit manuell zurück gesetzt werden, z. B. mit „bcf INTOCON,1“.
Bit 0:
0 = Kein Pegelwechsel an GPIO
1 = Pegelwechsel hat an einem Pin von GPIO stattgefunden.
Auch hier muss das Bit im Programm gelöscht werden.
Ich habe mal eine .asm Datei erstellt, in der Beispiele für die Einstellung des Timer0, Timer1 und Interrupt durch Timer0 aufgeführt sind. Diesmal ist auch die Konfiguration mit im Code angegeben.
In der Hauptroutine blinkt LED5. Interrupt Timer0 wird eingeschaltet und LED1 durch den Interrupt eingeschaltet. Danach wird der Interrupt wieder deaktiviert, LED1 gelöscht und das Ganze beginnt von vorne.