Forum: Mikrocontroller und Digitale Elektronik PIC 18F2431 nutzung Interruptregister high 0x08 und low 0x16, kompilier Problem


von Oli G. (og_9191)


Lesenswert?

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

: Bearbeitet durch User
von Oli G. (og_9191)


Lesenswert?

Hatte die Vermutung das die high ISR zu lang ist, da zwischen 08h und 
18h nur 10h bzw 16 Speicher liegen. Doch auch als ich sie per call 
befehl ausgelagert habe kamm keine änderrung bei der Kompilierung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.