TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: timh en 09 de Diciembre de 2011, 02:20:08
-
Hola, espero que no sea muy noche, ando terminando unas practicas, pero se me ha presentado el siguiente problema en mi programa:
LIST P=16F877A
INCLUDE <P16F877A.INC>
__CONFIG _XT_OSC & _PWRTE_ON & _BODEN_OFF & _CP_OFF & _WDT_OFF
PASAJEROS EQU 0x20
#DEFINE BANCO0 BCF STATUS,5
#DEFINE BANCO1 BSF STATUS,5
;-----------------INICIO--------------
ORG 0
GOTO INICIO
ORG 4
GOTO INTERRUPCION
INICIO BANCO1
MOVLW 0xFF
MOVWF TRISB
CLRF TRISD
BANCO0
CLRF PORTD
CLRF PASAJEROS
MOSTRAR MOVF PASAJEROS,W
MOVWF PORTD
BSF INTCON,GIE
BSF INTCON,RBIE
GOTO MOSTRAR
INTERRUPCION
BCF INTCON,GIE
BCF INTCON,RBIE
MOVF PORTB,W
INCF PASAJEROS
BCF INTCON,RBIF
RETFIE
END
Verán mi problema viene cuando aprieto el push button, en la interrupción el registro pasajeros se debería de incrementar en uno, pero no, se incrementa dos veces, es decir ocurre una interrupción cuando presiono el botón y otra cuando lo suelto, ¿Que creén que pueda ser lo que este mal o que me falte agregar para que solo ocurra una interrupción al presionar el botón y no dos?
NOTA: Estoy usando la interrupción por cambio de estado en RB4-RB7.
-
Lo que está ocurriendo es correcto. La interrupción que estás utilizando es por cambio de estado, es decir que se va a ejecutar cuando pasas de 0 a 1 y de 1 a 0 por lo tanto ocurre tanto cuando presionas el botón como cuando lo sueltas.
Dentro del bloque de interrupción no es necesario deshabilitar RBIE ya es suficiente con poner a 0 el bit GIE
-
En la interrupcion chequea el pulsador, si esta pulsado incrementa, si no esta pulsado no incrementa.
INTERRUPCION
btfss BUTTON ; lo pongo por 1 no se como lo tienes
retfie ; fue interrupcion al soltarlo sale de interrupcion
incf PASAJEROS ; esta pulsado, incrementa