Buena iniciativa!. Aquí dejo como encender un led por interrupciones.
#include<p18F4550.h>
#define freq 8 // Frequencia de la CPU
void Delay_ms(unsigned int t)
{
unsigned long n,i;
n=t*freq;
n=n*25/2;
for(i=0;i<n;i++);
return;
}
void encender_led();
#pragma code high_vector = 0x08
void high_interrupt(void)
{
_asm
goto encender_led
_endasm
}
#pragma code
#pragma interrupt encender_led
void encender_led()
{
INTCON3bits.INT1IE = 0;
}
void main()
{
TRISA = 0xF0;
TRISB = 0x0F;
PORTA = 0x00;
RCONbits.IPEN = 1;
INTCON2bits.RBIP = 1;
INTCONbits.GIEH = 1;
INTCON3bits.INT1IP = 1;
INTCON3bits.INT1IE = 1;
while(1)
{
if(INTCON3bits.INT1IF){
INTCON3bits.INT1IF = 0;
if (LATA) PORTA = 0x00;
else PORTA = 0x01;
}
Delay_ms(10);
INTCON3bits.INT1IE = 1;
Delay_ms(10);
}
}
El microcontolador, como se puede ver en las librerias, es un P18F4550. Yo lo tengo sobre una EASYPIC.
Saludos!