#include //librería del micro void _ISR _T1Interrupt() //subrutina de interrupción { IFS0bits.T1IF=0; // Borra Interrupt Flag PORTDbits.RD4= ! PORTDbits.RD4; // cambia bit 4 de puerto D //generando asi la onda cuadrada } main() { // Modo operación PORTD TRISDbits.TRISD4=0; // Puerto D, bit 4 es entrada PORTDbits.RD4=0; // Bit 4 puerto D = 0 // Modo operación TIMER1 T1CON=0x0000; // Modo operación TIMER1: reloj interno, // no acumula gate, cuenta cuando IDLE, no arrancar TMR1=0; // Empieza cuenta en 0 PR1=500; // Cuenta 500 ciclos // Interrupciones TIMER1 IFS0bits.T1IF=0; // Borra Interrupt Flag IEC0bits.T1IE=1; // Habilita Interrupción T1CONbits.TON=1; // Arranca TIMER1 while (1) Idle(); // Permanece estado IDLE, vuelve si se sale }