bueno resulta que tengo unos problema con una rutinita:
;Programa que saque por PORTA la siguiente secuencia cuando se produzca interrupción externa
;por flanco de bajada:
;10101
;espera medio segundo
;01010
;espera mediosegundo
;y la siguiente secuencia cuando se produzca interrupción por cambio de nibble pero solo en RB6,
;si se produce en RB7, RB5 ó RB4 debe volver a donde ocurrió la interrupción.
;11011
;espera medio segundo
;00100
;espera medio segundo
;cada secuencia se debe quedar ejecutando hasta que se produzca la otra interrupción, o sea que si se está
;ejecutando la primera secuencia (por interrupción externa), esta no parará hasta que se produzca la otra
;interrupción por cambio de nibble en RB6 y así sucesivamente.
LIST P=16F84A
#INCLUDE "P16F84A.INC"
TMR0_OPT EQU 1H ;EN EL BANCO1 TMR0, EN EL BANCO0 REGISTRO OPTION
;###########################DEFINICION DE REGISTRO ###########################
CBLOCK 0X0C
CONTAR
ENDC
;##############################################################################
ORG 0
GOTO INICIO
;################################### INTERRUPCION ##############################
ORG 0X04
BTFSS INTCON,INTF
GOTO NIBBLE
GOTO REPONER
REPONER BCF INTCON,INTF
BSF INTCON,GIE
RUTINA1 MOVLW B'00010101'
MOVWF PORTA
CALL MEDIO
MOVLW B'00001010'
CALL MEDIO
GOTO RUTINA1
NIBBLE BTFSS PORTB,6
GOTO FIN
GOTO REPONER2
REPONER2 BCF INTCON,RBIF
BSF INTCON,GIE
RUTINA2 MOVLW B'00011011'
MOVWF PORTA
CALL MEDIO
MOVLW B'00000100'
MOVWF PORTA
CALL MEDIO
GOTO RUTINA2
FIN BCF INTCON,RBIF
MOVF PORTB
RETFIE
;################################################################################
INICIO BSF STATUS,5
CLRF PORTA
MOVLW 0XFF
MOVWF PORTB
MOVLW B'00000010'
MOVWF TMR0_OPT
BCF STATUS,5
CLRF PORTA
CLRF PORTB
MOVLW B'10011000'
MOVWF INTCON
LOOP GOTO LOOP
;###################### MEDIO SEGUNDO CON TMR0 ###########################
MEDIO MOVLW .250
MOVWF CONTAR
NON CALL DOSMI
DECFSZ CONTAR,1
GOTO NON
RETURN
DOSMI MOVLW .6
MOVWF TMR0_OPT
NO BTFSS INTCON,2
GOTO NO
BCF INTCON,2
RETURN
;#########################################################################
END
La rutina debuggea muy bien en MPLAB, cumple con las demoras, si se hace una interrupcion cambia de rutina, pero funciona bien hasta cierto punto, ¿por qué hasta cierto punto? por que cuando el pic entra en la rutina de demora y si ocurre una interrupcion, ahí se queda enganchado todo el tiempo q le da la gana, como puedo solucionar eso? o solo será en simulacion el problema?
Ahora, en proteus funciona correctamente la interrupcion por cambio de nibble, funcionan bien los tiempos y el encendido de los leds, pero la interrupcion externa da problemas el PIC se queda estático mostrando en PORTA la primera secuencia(10101), no cambia a la segunda secuencia, si ocurre interrrupcion en cambio de nibble en RB6 pss cambia a las secuencia de cambio de nibble...y por ultimo RA4 del pic 16F84A funciona bien proteus?
dejo adjunto el asm y DSN ...
saludos