TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: anton en 04 de Enero de 2012, 22:43:06
-
Hola a todos, estoy programando un dsPIC30F4013 con C30, y tengo un problema: programo el Timer1 para que se active desde un boton fisico
(conectado a INT1), para que al presionar el boton, haga un toggle de un puerto de salida cada 0.5 segundos, el problema es que sólo hace el toggle una vez,
no continuamente. (NOTA: el boton tiene controlado el bounce mediante hardware).
El codigo es el siguiente:
int main(void)
{
// INITIALIZATION
//Init();
TRISB = 0;
IEC1bits.INT1IE = 1;
IEC1bits.INT2IE = 1;
// GENERAL LOOP
loop:
//vacio durante la prueba actual
goto loop;
} //main
void _INT1Interrupt(void) //BOTON VERDE
{
IFS1bits.INT1IF = 0; //clear interrupt flag
TMR1 = 0; //borra el timer
PR1 = 0xE4E2; //Pone el periodo de T1 a d58,594 que equivale a 0.5 segs
IEC0bits.T1IE = 1; //Habilita la interrupcion de T1
T1CON = 0x8030; //Activa el Timer con Preescaler a 1:256, con OSC interno
PORTBbits.RB2 = 1;
}
void _T1Interrupt(void) //TIMER 1
{
IFS0bits.T1IF = 0; //clear interrupt flag
PORTBbits.RB2 = - PORTBbits.RB2; //toggle bit
}
NOTA: la interrupcion del boton, si funciona cada vez que éste es presionado. Su ayuda sera muy apreciada.
-
Se te ha olvidado borrar el flag de interrupción. Mete esto dentro de la función _INT1Interrupt
IFS1bits.INT1IF=0;
y esto otro dentro de la del timer:
IFS0bits.T1IF=0;
-
Gracias por responder Nocturno.
Sin embargo, nota cómo si se borran los flags de ambas interrupciones, es la primera instruccion dentro de cada ISR. :(
Saludos
-
quizas sea una tonteria pero no veo que configures el puerto b como digital.
Hay un registro (ADPCFG) donde configuras los pines que se comparten con el ADC como digitales y generalmente el puerto b contiene pines analógicos. Cuando no haces esta configuracion el puerto se comporta de modo erratico. Asi que aun si estra al interrupción el toggle no funcionará bien.
-
Gracias por responder Nocturno.
Sin embargo, nota cómo si se borran los flags de ambas interrupciones, es la primera instruccion dentro de cada ISR. :(
Saludos
Joder, estoy ciego, no los vi a pesar de haberlo mirado. Disculpa