// 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/hellorealworld.htm // See PIC18F2431 Data Sheet! #include "configurationsbits.h" #include #define _XTAL_FREQ 1000000 // Must match the settings in OSCCONbits.IRCF #define MYDELAY 50 // 50 ms delay #define DABOUNCE_TIME 2 // Buttom debounce time - ms (1 -> 5) #define CLICK 10 // Main program stop after button was pressed CLICK times int volatile running; // If running = 0 -> Main program stop running void interrupt __low_priority my_isr_l(void) { static int time_out = CLICK; // Number of click left to the end of main program if (INTCONbits.RBIF) { // RB Port Change Interrupt? __delay_ms(DABOUNCE_TIME); // Debounce - 2 ms if (!PORTBbits.RB4) { // Buttun pressed? (also clean pin flag) time_out--; if (time_out < 0) // Time out! running = 0; // Stop running main program LATAbits.LA0 = !LATAbits.LA0; // Toggle RA0 pin } INTCONbits.RBIF = 0; // Clean RB Port Change Interrupt Flag bit } return; } void main(void) { OSCCONbits.IRCF = 4; // Set CPU clock: 1 MHz TRISC = 0; // Set PORTC pin as output TRISAbits.RA0 = 0; // Set RA0 as output PORTAbits.RA0 = 1; // Turn on LED D9 TRISBbits.RB4 = 1; // Set RB4 pin as input INTCON2bits.nRBPU = 0; // Enable all input PORTB pullup RCONbits.IPEN = 1; // Enable priority levels on interrupts INTCON2bits.RBIP = 0; // RB Port Change Interrupt Priority set to Low INTCONbits.RBIE = 1; // Enables the RB port change interrupt for PORTB pin INTCONbits.RBIF = 0; // Clean RB Port Change Interrupt Flag bit INTCONbits.GIEL = 1; // Enables all low priority interrupts ei(); // Global enable interrupt running = 1; while (running) { for (LATC = 0b00000001; LATC != 0; LATC <<= 1) __delay_ms(MYDELAY); // Shift left, eight times for (LATC = 0b10000000; LATC != 0; LATC >>= 1) __delay_ms(MYDELAY); // Shift right, eight times} } PORTC = 0xAA; while (1); }