TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: timh en 09 de Diciembre de 2011, 02:20:08

Título: Problema con interrupción
Publicado 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:

Código: [Seleccionar]
   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.
Título: Re: Problema con interrupción
Publicado por: AngelGris en 09 de Diciembre de 2011, 09:12:55
  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
Título: Re: Problema con interrupción
Publicado por: tapi8 en 09 de Diciembre de 2011, 15:15:49
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