¿Cómo definir una interrupción en PIC18F?

1

Supongo que la familia PIC18F tiene rutinas de servicio de interrupción de alta y baja prioridad, no solo un ISR. La primera vez que trato con esto, parece que el compilador (XC8) no puede reconocer las dos interrupciones de diferencia de un código heredado. Básicamente, no sé dónde mirar cuando espero averiguar qué decirle al compilador que marque estas dos funciones como interrupciones.

#include <xc8.h>
...
__interrupt(high_priority) void MyHighPriorityIsr(void)
{
// stuff
}

__interrupt(low_priority) void MyLowPriorityIsr(void)
{
// stuff
}

Me estoy poniendo:

error: (285) no identifier in declaration
error: (1275) only functions may be qualified "interrupt"

La página 34 de la guía del usuario del compilador hace que parezca bien, pero estoy recibiendo errores y no puedo compilar: enlace

    
pregunta tarabyte

2 respuestas

3
void low_priority interrupt Low_Priority_Interrupt(void) {
    if (TMR1IE && TMR1IF) {
        TMR1H = 0xFE;//Pre load for 125 ms
        Timer1_Isr();
        TMR1IF = 0;
        return;
    }
}

void high_priority interrupt High_Priority_Interrupt(void) {
    if (TX2IE && TX2IF) {
        SerialTx_Isr();
        TX2IF = 0;
        return;
    }
    if (RC2IE && RC2IF) {
        SerialRx_Isr();
        RC2IF = 0;
        return;
    }
}
    
respondido por el Erik Friesen
0

¿Es posible que no esté declarando sus funciones correctamente?

Más arriba en tu código, debes tener las declaraciones:

void __interrupt(high_priority) MyHighPriorityIsr(void);
void __interrupt(low_priority) MyLowPriorityIsr(void);

Luego, más adelante, tus definiciones de función:

void __interrupt(high_priority) MyHighPriorityIsr(void)
{
// stuff
}

void __interrupt(low_priority) MyLowPriorityIsr(void)
{
// stuff
}

También, observe que "void" aparece antes __interrupt()

¡Buena suerte!

    
respondido por el bitsmack

Lea otras preguntas en las etiquetas