Interrupcion no retorna, pic16f877a

Hola escribo para perdirles un poco de ayuda lo que pasa que empiezo con este tema de las interrupciones e hice un pequeño programa que capta interrupciones del puerbo rb5-rb7 y la interrupcion si se dispara, el problema es que la rutina de la interrupcion se cicla y no termina, les dejo mi codigo para que mas o menos se den una idea de como esta el asunto.

Código:
 LIST P=16F877A
    INCLUDE <P16F877A.INC>

LOC EQU 0x20
VIS EQU 0x21
W_TEMP EQU 0x22
STATUS_TEMP EQU 0x23
TEMP EQU 0x24
AUX EQU 0x25

    cblock 0x26
        PDel0
        PDel1
        PDel2
    endc

;-----------------INICIO--------------
    ORG 0
    GOTO INICIO
    ORG 4
    GOTO INTERRUPT

INICIO
            BSF STATUS,RP0
            BSF INTCON,GIE
            BSF INTCON,RBIE
            MOVLW 0xFF
            MOVWF TRISB
            CLRF TRISD
            CLRF TRISC
            BCF STATUS,RP0
            CLRF PORTD
            CLRF PORTC
            CALL MOSTRAR

MOSTRAR     MOVF LOC,W
            MOVWF PORTC
            MOVF VIS,W
            MOVWF PORTD
            CALL DEMORA
            MOVLW 0xFF
            MOVWF PORTC
            MOVLW 0xFF
            MOVWF PORTD
            CALL DEMORA

INTERRUPT   MOVWF W_TEMP
            MOVF STATUS,W
            MOVWF STATUS_TEMP
            MOVLW .9
            MOVWF PORTC
            CALL DEMORA
            MOVLW 0xFF
            MOVWF PORTC
            CALL DEMORA
            MOVF STATUS_TEMP,W
            MOVWF STATUS
            SWAPF W_TEMP,F
            SWAPF W_TEMP,W
            RETFIE
            
;-------------------------------------------------------------
; Generado con PDEL ver SP  r 1.0  el 13/11/2011 Hs 10:40:28 a.m.
; Descripcion: Delay 3000000 ciclos
;-------------------------------------------------------------
DEMORA  movlw     .67       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .91       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .122      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;-------------------------------------------------------------

    END
Estoy trabajando con el pic16f877a y lo tengo con un cristal de 4Mhz.
 

Adjuntos

  • esquema.rar
    18.6 KB · Visitas: 2
Atrás
Arriba