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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.