Ohhhh C18 ... ¡Cómo te amo! Aunque tampoco tengo quejas en xc8.
Es difícil encontrar una forma sencilla de instalar el compilador C18 en OSX, pero PUEDE hacerlo. Acabo de instalarlo en una máquina con Windows y transfirí los archivos a mi mac: P Sí, es una opción de mala calidad, ¡pero funcionó!
Bien, entonces sobre tu problema de interrupción. No tenemos sus mensajes de error, pero al mirar su código, creo que veo lo que está mal. Parece que te faltan algunas cosas, pero estoy haciendo suposiciones aquí.
Cuando desee agregar una interrupción a su foto, debe recordar que hay dos tipos de interrupciones: prioridad baja y prioridad alta. Depende de usted decidir a dónde pertenecen sus interrupciones periféricas (como los pines IO externos). Estoy seguro de que ya lo sabe, a juzgar por el hecho de que está utilizando una interrupción de baja prioridad. Solo quería reiterarlo.
Ahora, para el pic18f4550, el vector de baja prioridad se encuentra en la dirección 0x18 en la memoria. Por lo tanto, debe escribir una línea pragma que tenga este aspecto:
#pragma code low_vector=0x18
Ahora, necesita definir un prototipo de función que maneje sus solicitudes de interrupción. Llamémoslo "low_int_fcn ()"
void low_int_fcn();
A continuación, incluimos las instrucciones de ensamblaje que apuntan a la función de interrupción que realizó en el paso anterior:
void low_interrupt(){
_asm GOTO low_int_fcn _endasm
}
Luego escribimos
#pragma code
#pragma interruptlow low_int_fcn
Finalmente, en su función de interrupción, escriba el código que debe ejecutarse cuando se active la interrupción. Por ejemplo:
void low_int_fcn(){
if(INTCON3bits.INT2IF == 1){
//do stuff
INTCON3bits.INT2IF = 0; // Clear the interrupt flag
}
}
Recuerde habilitar las interrupciones en su configuración, es decir:
#pragma config IESO=ON
y deberías ser bueno para ir! Sé que esta fue una respuesta larga y probablemente ya sabías un montón de lo que dije, pero tuve muchos problemas con esto en el pasado y quería asegurarme de que al menos tuvieras un buen conocimiento de ello. p>
Por cierto, si aún no lo sabe, en MPLabX, vaya a Ayuda > Contenido de ayuda y podrá encontrar una gran cantidad de documentación sobre compiladores C18 / xc8 ... ¡e incluso ejemplos! Puede encontrar un ejemplo de interrupción en Herramientas del idioma > C18 Toolchain > MPLab C Compiler para PIC18 > Características del idioma > Pragmas > #pragma interruptlow.
¡Vale la pena leer la documentación! Espero que esto haya ayudado!