Ich benutze MPLAB, um PIC16F84A für mein Projekt zu programmieren. Ich habe einen Assembler-Code, wo RB4-7 Bits mit Tasten verbunden sind und somit als Eingänge verwendet werden. Ein Interrupt-Unterprogramm wird implementiert, um jeden neuen Interrupt zu behandeln (wenn eine Taste gedrückt wird). Alles funktioniert gut, wenn eine Taste gedrückt wird, geht das Bild zum angegebenen Unterprogramm. Aber jetzt, wenn ich in der Unterroutine bin, muss ich das Flag löschen (INTCON - RBIF), aber es wird nicht gelöscht, aber das Löschen eines anderen Bits im INTCON-Register funktioniert gut. Also was soll ich tun?MPLAB, versucht, ein bisschen zu löschen, aber es bleibt 1
Hier ist mein Code:
ORG 0X00
GOTO START
ORG 0x04
BTFSC INTCON,RBIF
GOTO RBX_INT
START CLRF PORTA
MOVLW B'10001000'
MOVWF INTCON
BSF STATUS,RP0
CLRF TRISA
MOVLW B'11110000'
MOVWF TRISB
MOVLW B'10000111'
MOVWF OPTION_REG
BCF STATUS,RP0
MAIN GOTO MAIN
Und das ist mein Unterprogramm:
RBX_INT BCF INTCON,RBIF
MOVLW D'156'
CALL DELAY
RETFIE
Wenn dies ein "Interrupt bei Änderung" ist, müssen Sie den Port tatsächlich ** lesen **, auch wenn Sie den Status nicht kennen müssen. Wenn Sie das nicht tun, wird die Logik, die den Interrupt auslöst, weiter feuern. –
@RogerRowland Ja das war das Problem. – kamal