// PIC18 in C - Versione 0.1 - Luglio 2014 // Copyright (c) 2014, Vincenzo Villa // Creative Commons | Attribuzione-Condividi allo stesso modo 3.0 Unported. // Creative Commons | Attribution-Share Alike 3.0 Unported // https://www.vincenzov.net/tutorial/PIC18/timer1.htm // Reference: PIC18F14K50 data sheet #include "configurationsbits.h" #include #define _XTAL_FREQ 1000000 // Default PIC18F14K50 clock #define TIMER1_VALUE 49999 // T1 count from 0 to 49999 (50000 count) void interrupt __high_priority my_isr_high(void) { if (PIR1bits.CCP1IF == 1) // Interrupt from ECCP ? { LATCbits.LC0 = ~LATCbits.LC0; // Change RC0 pin status PIR1bits.CCP1IF = 0; // Clear interrupt status } } void main(void) { TRISC = 0x00; // Set PORTC as output RCONbits.IPEN = 1; // Enable priority levels on interrupts OpenTimer1(TIMER_INT_OFF & T1_16BIT_RW & T1_SOURCE_INT & T1_PS_1_1); // Enable Timer1: internal clock, no prescaler, no interrupt OpenCompare1(COM_INT_ON & COM_TRIG_SEVNT, TIMER1_VALUE); // Enable CCP as compare: at trigger interrupt + Timer1 clear T3CONbits.T3CCP1 = 0; // Timer1 is the clock source for compare IPR1bits.CCP1IP = 1; // CCP1 Interrupt Priority set to high INTCONbits.GIEH = 1; // Enables all interrupts while (1); // Do nothing, forever }