Interrupcion PIC18 RB0. No funciona

Hola a todos.

Estoy usando el MPLAB_X_IDE, el ICD3 con la placa PICDEM2_PLUS, y el micro es un PIC18f452.
Y tengo el siguiente problema:
Quiero realizar una interrupcion por el puerto RB0 pero ésta no se me activa al pulsarlo. He probado de varias maneras, y os dejo aqui un pequeño programilla a ver si me podeis hechar una mano.

un saludo y gracias de antemano.

Código:
#include <p18f452.h>
#include <portb.h>

#pragma config OSC=HS, OSCS=OFF
#pragma config PWRT=OFF
#pragma config BOR=OFF
#pragma config WDT=OFF
#pragma config CCP2MUX=OFF
#pragma config LVP=OFF

void porb (void);

/*** Funcion interrupcion ***/
#pragma code interr_alta=0x08
void interr_alta(void)
{
    _asm goto porb _endasm
}
#pragma code
#pragma interrupt porb
void porb (void)
{
    PORTBbits.RB2=1;
    INTCONbits.INT0IF=0;
}

/*** Programa principal ***/
void main (void)
{
    /*** Config. puertos ***/
    TRISA=0xFF;
    /*** Configuro el puertoB como salida menos RB0 ***/
    TRISB=0b0001;
    /*** Config. interrupcion ***/
    INTCONbits.INT0IE=1;
    INTCONbits.RBIE=1;
    INTCONbits.GIE=1;
    INTCONbits.PEIE=1;
    INTCONbits.INT0IF=0;
    while (1)
    {
        PORTBbits.RB3=1;
    }
}
 
Hola Kresnyk,
Hace un tiempo, he hecho alguna prueba con esa PICDEM, y si no recuerdo mal, a la pata RB0 también tienes conectado un led. Esto te dividirá la tensión y el PIC no reconocerá las transiciones de nivel. Revisa el esquema eléctrico de la placa y comprueba esto. Probablemente tengas algún jumper para deshabilitar la línea de leds o algo así.
 
Para la interrupción de RB0 no es necesario INTCONbits.RBIE=1; Esta interrupción es para cuando hay algún cambio en el puerto B. Tampoco es necesario PEIE
Otra cosa es que en el TRISB sólo escribiste 4 bits, creo que es correcto porque deberían ser los 4 MSB, pero de todas formas yo escribiría en todos.
Por último, comparto con chesko, habría que medir el voltaje del pin de entrada.
Saludos
 
Hola a todos.

Estoy usando el MPLAB_X_IDE, el ICD3 con la placa PICDEM2_PLUS, y el micro es un PIC18f452.
Y tengo el siguiente problema:
Quiero realizar una interrupcion por el puerto RB0 pero ésta no se me activa al pulsarlo. He probado de varias maneras, y os dejo aqui un pequeño programilla a ver si me podeis hechar una mano.

un saludo y gracias de antemano.

Código:
#include <p18f452.h>
#include <portb.h>

#pragma config OSC=HS, OSCS=OFF
#pragma config PWRT=OFF
#pragma config BOR=OFF
#pragma config WDT=OFF
#pragma config CCP2MUX=OFF
#pragma config LVP=OFF

void porb (void);

/*** Funcion interrupcion ***/
#pragma code interr_alta=0x08
void interr_alta(void)
{
    _asm goto porb _endasm
}
#pragma code
#pragma interrupt porb
void porb (void)
{
    PORTBbits.RB2=1;
    INTCONbits.INT0IF=0;
}

/*** Programa principal ***/
void main (void)
{
    /*** Config. puertos ***/
    TRISA=0xFF;
    /*** Configuro el puertoB como salida menos RB0 ***/
    TRISB=0b0001;
    /*** Config. interrupcion ***/
    INTCONbits.INT0IE=1;
    INTCONbits.RBIE=1;
    INTCONbits.GIE=1;
    INTCONbits.PEIE=1;
    INTCONbits.INT0IF=0;
    while (1)
    {
        PORTBbits.RB3=1;
    }
}

Hola, los registros RBIE, PEIE no necesitas tocarlos. Pon en la funcion de tratamiento de la interrupción un sistema antirrebotes.
Necesitas activar el registro INTEDG0 de INTCON2. Un saludo
 
Hola de nuevo.

Gracias por vuestra ayuda a la hora de "depurar" mis errores jeje.

El problema es como vosotros deciís, un conflicto en el RB0 LED y el RB0 interrptor. Segui investigando y encontre que la solución para hacer que funcione la interrupción fue quitar el jumper J6 (que desactiva los 4 LEDs de la placa) y asi ya no hubo problemas de interferencias.

y si alguien tiene el mismo problema que yo....que busque el jumper J6 en la "PICDEM 2 Plus User's Guide"
ahi vera lo que tiene que hacer, que me costo darme cuenta de lo que se referia con "remove jumper J6" jeje

Gracias de nuevo compañeros ;)
 
Atrás
Arriba