// 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/timer0.htm // Reference: PIC18F14K50 data sheet (note: page as DS41350C printed edition) #include "configurationsbits.h" #include #define _XTAL_FREQ 1000000 #define TIMER0_VALUE 3036 // See text - 0,5 Hz blink void interrupt __low_priority my_isr_l(void) { if (INTCONbits.TMR0IF == 1) // Interrupt from Timer0? { WriteTimer0(TIMER0_VALUE); // Write a value into the Timer0 registers TMR0L & TMR0H LATCbits.LC1 = ~LATCbits.LC1; // Change LEDs status INTCONbits.TMR0IF = 0; // Clear interrupt status } } void main(void) { TRISC = 0x00; // Set PORTC as output PORTC = 0; // Turn off all LED RCONbits.IPEN = 1; // Enable priority levels on interrupts OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_EDGE_FALL & T0_PS_1_4); WriteTimer0(TIMER0_VALUE); // Write a value into the Timer0 registers TMR0L & TMR0H INTCON2bits.TMR0IP = 0; // Set low priority interrupt INTCONbits.GIEL = 1; // Enables all low priority interrupts ei(); // Global enable interrupt while (1) { // 5 Hz LED blink, forever LATCbits.LC0 = ~LATCbits.LC0; __delay_ms(100); } }