Interrupcion PIC18 RB0. No funciona

#1
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;
    }
}
 
#2
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í.
 
#3
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
 
#4
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
 
#5
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 ;)
 

Temas similares

Arriba