Estou com um programinha de interrupção pela mudança de estado do pino RB0 no 18F4520. Só que quando a interrupção ocorre, ela entra normalmente na rotina de interrupção, executa tudo numa boa e, às vezes (ou seja, não é sempre), quando termina a execução dessa rotina de interrupção o PIC repete essa rotina mais uma vez logo após o término da primeira passagem, isso sem nenhuma mudança de estado no pino RB0.
Vejam o código abaixo:
- Código: Selecionar todos
unsigned int i_setup;
void interrupt ( )
{
if (INTCON.INT0IF == 1) // se o flag de estouro da interrupção for igual a 1, então
{
INTCON.INT0IF = 0; // zera o flag IF
}
i_setup = 0;
while (i_setup < 2) // faz esse loop duas vezes
{
variável1 = 0; // atribuição de valores à variáveis
variável2 = 3;
variável3 = 10;
delay_ms(500);
i_setup++;
}
i_setup = 0;
while (i_setup <= 10000) // faz esse loop 10001 vezes
{
variável4 = 20;
variável5 = 15;
i_setup++;
}
} // fecha a interrupção
// --------- CONFIGURAÇÃO DA INTERRUPÇÃO ----------------------------
void main ( )
{
RCON.IPEN=1; // interrupcoes habilitadas para familia 18F
INTCON.GIEH = 1; // habilita chave geral de interrupções
INTCON.INT0IF = 0; // zera flag da interrupção externa (RBO)
INTCON.INT0IE = 1; // habilita a interrupção INT0
while (1);
}
Esse código está resumido, só para ilustrar como a interrução está estruturada.
Existe alguma coisa errada nesse código?
Valeu!