Acá les mando el código por si encuentran dónde puede estar el error. Creo que el flag queda reseteado (BCF INTF, antes de salir de la interrupción), pero tal vez me equivoque.
Desde ya, muchas gracias.
Arim
__________________________________________________________
LIST P=16F84
RADIX HEX
#INCLUDE P16F84.INC
;ASIGNACIONES
CONT EQU 0x0C
A EQU 0x0D
PDel0 EQU 0x0E
PDel1 EQU 0x0F
ORG 00H
GOTO INICIO
;INTERRUPCIÓN
ORG 04H
BCF INTCON,GIE
BCF INTCON,INTE
CALL SOUND
BCF INTCON,INTF
RETFIE
;PROGRAMA PRINCIPAL
INICIO
BSF STATUS,RP0
CLRF TRISA
MOVLW B'00111111'
MOVWF TRISB
BCF STATUS,RP0
BSF INTCON,GIE
BSF INTCON,INTE
CLRF PORTA
CLRF CONT
CLRF A
TEST MOVLW d'9'
SUBWF A,0
BTFSC STATUS,Z
GOTO SALIDA
BTFSC PORTB,3
INCF CONT
CALL RET
INCF A
GOTO TEST
SALIDA MOVFW CONT
MOVWF PORTA
CLRF CONT
CLRF A
GOTO TEST
;RETARDO
RET movlw .110 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .181 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz PDel1,1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0,1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
SOUND
BSF PORTB,7
BSF PORTB,6
CALL RET
CALL RET
CALL RET
BCF PORTB,7
BCF PORTB,6
CALL RET
CALL RET
BSF PORTB,7
BSF PORTB,6
CALL RET
CALL RET
CALL RET
BCF PORTB,7
BCF PORTB,6
RETURN
END
__________________________________________________________