Necesito ayuda con las interrupciones y el 16f887.
Estoy usando MPLAB y escribiendo mi código en C. Estoy usando la placa de demostración de 44 pines de Microchip. Hay un botón pulsador conectado a RBO / INTO que normalmente es alto y se baja cuando se presiona el botón.
Ya verifiqué que la entrada y el botón pulsador están funcionando, pero no creo que esté configurando la interrupción correctamente. Cuando se presiona el botón, intento activar PORTD, y cuando vuelve la interrupción, PORTD se desactiva.
Sin embargo, cuando ejecuto el código, PORTD se enciende de inmediato. ¿Alguna idea?
#include <pic16f887.h>
#include <htc.h>
__CONFIG (DEBUG_ON, LVP_OFF, FCMEN_OFF, IESO_OFF, BOREN_OFF,
CPD_OFF, CP_OFF, MCLRE_ON, WDTE_ON, FOSC_INTRC_NOCLKOUT, BOR4V_BOR21V);
void intMain() {
PORTD=0xff;
INTF=0;
GIE=1;
}
void main(void){
TRISB = 0xff; //set PORTB as inputs
TRISD = 0x00; // Set PORTD as an Output
ANSEL = 0x00;
ANSELH = 0x00;
GIE=1;
INTE=1;
PORTD=0x00;
while(1)
{
PORTD=0x00;
}
}
EDIT
He actualizado mi código basado en algunas sugerencias a continuación. Aquí está el código actual. Lo escribí para que, cuando se llame el ISR, el puerto D cuente de 0 a 256, luego borre y salga del ISR. He escrito en una trampa para evitar que el ISR salga y mantenerlo en un bucle sin fin. Cuando inicio el controlador, el puerto cuenta hasta 256, se borra y se reinicia repetidamente.
#include <pic16f887.h>
#include <htc.h>
__CONFIG (DEBUG_ON, LVP_OFF, FCMEN_OFF, IESO_OFF, BOREN_OFF,
CPD_OFF, CP_OFF, MCLRE_ON, WDTE_ON, FOSC_INTRC_NOCLKOUT, BOR4V_BOR21V);
void interrupt intMain() {
int i,k;
i=0;
k=0;
while(i<256)
{
while(k<3000) //delay
k++;
i++;
k=0;
PORTD=i;
}
while(1){} //trap
//INTF=0;
}
void main(void){
TRISB = 0xff; //set PORTB as inputs
TRISD = 0x00; // Set PORTD as an Output
ANSEL = 0x00;
ANSELH = 0x00;
INTE=1;
GIE=1;
INTEDG=0;
nRBPU=0;
WPUB0=1;
PORTD=0x00;
while(1)
{
PORTD=0x00;
}
}