Hola a todos,buenas tardes, soy nuevo en el foro, 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 rb4-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.
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. Les dejo mi esquema de proteus.