Solo puedo activar INT por flanco positivo en 16F690

Estado
Cerrado para nuevas respuestas.
Hola, estoy aprendiendo a utilizar los microcontroladores y trate de hacer un programa para aprender utilizar la interrupcion de INT/RA2. Entiendo que configurando el registro OPTION se logra configurar el flanco por el que se dispara INT, yo probe de las dos formas, colocando el bit 6 en 1 y en 0 y siempre se disparaba igual.

En fin me funciono mi programa pero solo por flanco negativo.

Aqui pongo el programa a ver si me pueden ayudar con algun error, la idea es q enciende un motor en el puerto c y si se da la interrupcion en el puerto a, se detiene 10s y luego vuelve a encender. Incluso lo simule con MPLAB SIM y si me funcionaba como yo queria?

Gracias a quienes respondan

list p=16F690 ; list directive to define processor
#include <p16F690.inc> ; processor specific variable definitions

errorlevel -302 ; suppress message 302 from list file

__CONFIG _CP_OFF & _CPD_OFF & _BOR_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _FCMEN_OFF & _IESO_OFF

CBLOCK 0X20
CONT1 ;VARIABLE DE TIEMPO 1
CONT2 ;VARIABLE DE TIEMPO 2
CONT3 ;VARIABLE DE TIEMPO 3
ENDC

CBLOCK 0X70 ;REGISTROS TEMPORALES
STATUS_TEMP
WORK_TEMP
ENDC

;--------------------------DIRECCION 0000H, AQUI APUNTA CUANDO SE HACE UN RESET---------------------------
ORG 0
GOTO INICIO ;SALTA A INICIO YA QUE A CONTINUACION VIENE EL VECTOR DE INTERRUPCION
;--------------------------------------VECTOR DE INTERRUPCION---------------------------------------------
ORG 4
GOTO EMERGENCIA ;RUTINA DE SERIVICO DE INTERRUPCION
;--------------------------------------PROGRAMA PRINCIPAL-------------------------------------------------
ORG 5
INICIO:
BSF STATUS,RP1 ;BANCO2
BCF ANSEL,2 ;RA2 COMO ENTRADA DIGITAL
BCF STATUS,RP1 ;BANCO0
BSF STATUS,RP0 ;BANCO1
BSF TRISA,2 ;CONFIGURA RA2 COMO ENTRADA
BCF TRISC,0 ;PUERTO C COMO SALIDA
MOVLW B'10010000' ;SE VA A GRABAR EN INTCON LA HABILITACION DE GIE Y INTE
MOVWF INTCON ;SE ESCRIBE PARA CONFIGURAR LAS INTERRUPCIONES
BSF OPTION_REG,6 ;SE ESCRIBE 1 EN INTEDG PARA QUE SE ACTIVE POR FLANCO DE SUBIDA
BCF STATUS,RP0 ;DE VUELTA A BANCO0

PRINCIPAL:
BSF PORTC,0 ;ENCIENDE MOTOR
GOTO $-1

;---------------------------------------------RUTINA-DE-SERVICIO-DE-INTERRUPCION---------------------------
EMERGENCIA
MOVWF WORK_TEMP ;GRABA EL REGISTRO DE TRABAJO EN SU REGISTRO TEMPORAL
SWAPF STATUS,0 ;INTERCAMBIA LOS BITS MAS ALTOS Y MAS BAJOS DE STATUS Y LOS GRABA EN W
CLRF STATUS ;LIMPIA STATUS Y SE DEVUELVE A BANCO0, INDEPENDIENTE DE DONDE ESTABA
MOVWF STATUS_TEMP ;GRABA STATUS EN STATUS_TEMP PARA Q NO SE PIERDA
;---------------------------------AQUI-SE-PONE-LA-RUTINA-PARA-ATENDER-LA-INTERRUPCION-----------------------
BCF PORTC,0
MOVLW 0X033 ;CARGA UNA CONSTANTE PARA EL RETARDO
MOVWF CONT3
CALL RETARDO
;---------------------------------AQUI-TERMINA-LA-RUTINA-PARA-ATENDER-LA-INTERRUPCION-----------------------
SWAPF STATUS_TEMP,0 ;LE DA VUELTA A STATUS DEJANDOLO IGUAL QUE ANTES Y LO GRABA EN W
MOVWF STATUS ;DEJA STATUS COMO ESTABA ANTES
SWAPF WORK_TEMP,1 ;LE DA VUELTA Y LO GRABA EN EL MISMO
SWAPF WORK_TEMP,0 ;LE DA VUELTA DEJANDOLO IGUAL Y LO DEVUELVE A W
BCF INTCON,INTF ;LIMPIA INTF PARA QUE NO SE QUEDE PEGADO EN LA MISMA INTERRUPCION
RETFIE ;TERMINO DE ATENDER LA INTERRUPCION
;-----------------------------------TERMINA-LA-RUTINA-DE-SERVICIO-DE-INTERRUPCION---------------------------

RETARDO:
DECFSZ CONT1 ;UNA FORMA DE HACER UN RETARDO ES HACER PERDER TIEMPO AL PROCESADOR
GOTO RETARDO ;HACE 3INST * 256VECES= 768 INSTRUCCIONES
DECFSZ CONT2 ;(768+3) * 256= 197376 INSTRUCCIONES
GOTO RETARDO
DECFSZ CONT3 ;(197376+3) * 51= 10066329/1M = 10.06s
GOTO RETARDO
RETURN
END
 
Estado
Cerrado para nuevas respuestas.
Atrás
Arriba