Ik weet niet welke taal je gebruikt, maar ik zelf picbasic
en dit is een stukje dat ik gebruik als ik verandering
van poort een interrupt wil laten verookzaken.
code:
ON_INTERRUPT GoTo Interrupt_Handler
;Soorten interrupten en flags die benaming krijgen
Symbol RBIF = INTCON.0 ' RB Port Interrupt Flag
Symbol INTF = INTCON.1 ' RB0 External Interrupt Flag
Symbol T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
Symbol RBIE = INTCON.3 ' RB Port Change Interrupt Enable
Symbol INTE = INTCON.4 ' RB0 External Interrupt Enable
Symbol T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
Symbol PEIE = INTCON.6 ' Peripheral Interrupt Enable
Symbol GIE = INTCON.7 ' Global Interrupt Enable
;Waarden van de interrupten en flags
RBIF = 0
INTF = 0
T0IF = 0
RBIE = 1
INTE = 0
T0IE = 0
PEIE = 0
GIE = 1
GoTo Hoofdprogramma
'Interrupt routine start
Interrupt_Handler:
Context SAVE ;Alle geheugen opslaan
If PORTB.5 = 0 Then
Inc Speed ;Teller verhogen
RBIE = 0 ;Interrupt uitzetten
ontdender = Ontdenderloops ;Ontdender instellen
ElseIf PORTB.6 = 0 Then
Inc Auto ;Automatische fadesnelheid
RBIE = 0 ;Interrupt uitzetten
Teller = Auto + 6
ontdender = Ontdenderloops ;Ontdender instellen
EndIf
RBIF = 0 ;Interruptflag legen
While RBIF = 1 ;Zolang interruptflag nog de
RBIF = 0 ;waarde een heeft hier blijven
Wend ;tot deze echt leeg is
Context Restore
En onderaan of waar je wilt zet je de ontdender weer terug
zodat de interrupt weer wordt ingeschakelt. Dat kan bv zo
code:
If ontdender > 1 Then ;Als ontdender nog geen 1 is dan
Dec ontdender ;min 1
ElseIf ontdender = 1 Then ;Als ontdender 1 is dan de
RBIF = 0 ;interruptflag 0 maken en de
RBIE = 1 ;interrupt weer inschakelen
EndIf
Misschien heb je er iets aan