Hallo Microcontroller Community,
Bin ziemlicher PIC und Assembler Neuling und habe da ein Problem beim
Kompilieren.
Ich würde gerne die beiden Interruptregister vom PIC nutzen, high=0x08
und low=0x18. Habe soweit alle Registerbits gesetzt:
;-----externer Interrupt (INT1)
bsf INTCON2,INTEDG1 ;Interrupt bei steigender Taktflanke
bsf INTCON3,INT1IP ;externer interrupt mit hoher priorität
;------Interupt-----
bsf RCON,IPEN ;enable Interruptpriorität
bcf INTCON,T0IF ;Interrupt Flag Timer0 auf 0
bsf INTCON,T0IE ;Enable Bit für Timer0 setzen (Bit 5 INTCOM)
bsf INTCON,GIE ;Interrupt Hauptschalter setzen (Bit 7 INTCOM)
bsf INTCON,PEIE ;Enable Bit für zusätzliche Interrups
bsf INTCON3,INT1IE ;Enable Bit externer Interrupt INT1
bcf INTCON3,INT1IF ;Interrupt Flag "externer Interrupt (INT1)" auf
0
Der externe Interrupt ist high und der Timer Interrupt low, doch wenn
ich mit ORG 0x18 den Sprungvektor für den low angebe, kann ich
das Programm nicht kompilieren. Es erscheint nur die Fehlermeldung:
make[2]: *** [dist/default/production/Infrarotsensor.X.production.hex]
Fehler 1
make[1]: *** [.build-conf] Fehler 2
make: *** [.build-impl] Fehler 2
BUILD FAILED (exit value 2, total time: 64ms)
Wenn ich die Zeile auskommentiere, kompiliert er Problemlos.
Der Sprung ins high 0x08 funktioniert ohne Problem.
Was habe ich vergessen zu bedenken??
Danke schonmal im vorraus.
low Interruptroutine:
ORG 0x18 ; Interrupt Vector low
bcf INTCON,GIE
movwf w_temp ; save W register
movff STATUS,status_temp ; swap status to be saved into W
movff BSR,bsr_temp ; save STATUS register
;-----------------------------------------------------------------------
-------
; btfss INTCON,T0IF ;Test auf Timer-Interrupt
; btfss PIR1,TMR1IF
call Sample
goto ExitISRl
;-----------------------------------------------------------------------
--------
ExitISRl
movff bsr_temp, BSR
movf w_temp, W ; restore W register
movff status_temp, STATUS ; swap status_temp into W,
bcf INTCON,T0IF ;Interrupt Flag Timer0 auf 0
bsf INTCON,GIE ;Interupt Hauptschalter setzen
retfie