Comportamiento sin explicación pic puerto b en la interrupción de cambio

0

Estoy intentando configurar la interrupción del puerto b en las interrupciones de cambio para trabajar con un programa que estoy escribiendo con la versión de demostración del MC XC8. Estoy usando un PIC16F628A Estoy usando este código para inicializar la imagen para la lectura de interrupción. Sin embargo, parece que cuando arranco mi programa se llama una interrupción. No entiendo por qué sucede esto, ya que la hoja de datos dice que las interrupciones solo se generarán para los pines establecidos como entrada y he configurado todo el puerto B para que salga. ¿Podría alguien explicar este extraño comportamiento?

int main()
{
    TRISA2 = 0;
    TRISA3 = 0;
    PORTB = 0;
    TRISB = 0;
    CMCON = 0x07;
    initialise();
    writeCommand(0b00001111);
    writeCommand(0b00000110);
    writeString("Hello World ", 11);
    GIE = 1;
    RBIE = 1;
    PEIE = 0;
    while(1);
}

void interrupt interruptRoutine()
{
    if(RBIF)
    {
        writeString("Interrupt", 9);
        RBIF = 0;
    }
}
    
pregunta popgalop

1 respuesta

1

Supongo que se llama interruptRoutine entre RBIE = 1; y PEIE = 0; . Esa es una breve oportunidad entre instrucciones para una interrupción ya pendiente para disparar. (tenga en cuenta que la latencia de la interrupción puede hacer que parezca que sucedió una o dos instrucciones más tarde de lo que realmente sucedió) Por lo tanto, es posible que desee reorganizar las instrucciones de configuración de la interrupción para cerrar esa brecha.

Ahora la pregunta es: "¿Por qué recibes la interrupción, dado que son todas salidas y la hoja de datos dice que no generará una?" Sospecho que la interrupción realmente se generó cuando aún eran entradas, porque esa es la dirección predeterminada y es realmente difícil cambiar inmediatamente en el encendido. Por lo tanto, ya tiene una interrupción pendiente, esperando a ser habilitada.

Cuando configuro las interrupciones, siempre me aseguro de borrar las marcas justo antes de habilitarlas. Eso evita que ocurran interrupciones de basura.

    
respondido por el AaronD

Lea otras preguntas en las etiquetas