Das Ein- / Ausschalten des peripheren und globalen Interrupts kann per DEFINE
Code:
#DEFINE D_GlobIntEin bsf INTCON,GIE ; Globaler Interrupt Ein
#DEFINE D_GlobIntAus bcf INTCON,GIE ; Globaler Interrupt Aus
#DEFINE D_PeriIntEin bsf INTCON,PEIE ; Peripherer Interrupt Ein
#DEFINE D_PeriIntAus bcf INTCON,PEIE ; Peripherer Interrupt Aus
oder durch die Befehle
Code:
bsf INTCON,GIE ; Globaler Interrupt Ein
bcf INTCON,GIE ; Globaler Interrupt Aus
bsf INTCON,PEIE ; Peripherer Interrupt Ein
bcf INTCON,PEIE ; Peripherer Interrupt Aus
erfolgen.
Timer werden incrementiert / um 1 erhöht und setzen bei jedem Überlauf von 255 / 0xFF nach 0 das Interrupt-Flag T?IF. Diese Flags müssen per Software zurück gesetzt werden.
Wieviel Zeit zwischen jedem Timer-Increment vergeht, wird durch die Quarz-Frequenz und die Initialisierung der Prescaler bestimmt,
wie lange es bis zum Auslösen eines Interrupts dauert = 256 - Timer-Wert mal Increment-Zeit.
Zum Auslösen eines Interrupts / Aufruf der ISR (Interrupt-Service-Routine) muß das entsprechende IE-Flag und die globale Int-Freigabe GIE gesetzt sein. Für einige Timer muß zusätzlich die periphere Int-Freigabe PEIE gesetzt sein (im Datenblatt nachlesen).
In der ISR muß abgefragt werden, wer den Int ausgelöst hat.
Lesezeichen