• AVR Freaks

Hot!PIC18F45Q10 timer interrupt blinking led.

Author
henbez_72
New Member
  • Total Posts : 21
  • Reward points : 0
  • Joined: 2020/10/20 11:27:10
  • Location: 0
  • Status: offline
2020/10/21 08:45:20 (permalink)
0

PIC18F45Q10 timer interrupt blinking led.

Trying to blink LED using timer and interrupt routine.See code below.

LED on pin RD0 blink with delay function no problem

LED on pin RD1 no response.

Program compile no warnings all good.

Thanks for help

/***********************************************
* Microcontroller used is the PIC18F45Q10
* Compiler used is XC8 VERSION v2.1
* This program blinks an LED using interrupt
****************************/


// CONFIG1L
#pragma config FEXTOSC = ECH // External Oscillator mode Selection bits (EC (external clock) above 8 MHz; PFM set to high power)
#pragma config RSTOSC = EXTOSC // Power-up default value for COSC bits (EXTOSC operating per FEXTOSC bits (device manufacturing default))

// CONFIG1L
#pragma config FEXTOSC = ECH // External Oscillator mode Selection bits (EC (external clock) above 8 MHz; PFM set to high power)
#pragma config RSTOSC = EXTOSC // Power-up default value for COSC bits (EXTOSC operating per FEXTOSC bits (device manufacturing default))

// CONFIG1H
#pragma config CLKOUTEN = ON // Clock Out Enable bit (CLKOUT function is disabled)
#pragma config CSWEN = ON // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)

// CONFIG2L
#pragma config MCLRE = EXTMCLR // Master Clear Enable bit (MCLR pin (RE3) is MCLR)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (Power up timer disabled)
#pragma config LPBOREN = OFF // Low-power BOR enable bit (Low power BOR is disabled)
#pragma config BOREN = SBORDIS // Brown-out Reset Enable bits (Brown-out Reset enabled , SBOREN bit is ignored)

// CONFIG2H
#pragma config BORV = VBOR_190 // Brown Out Reset Voltage selection bits (Brown-out Reset Voltage (VBOR) set to 1.90V)
#pragma config ZCD = OFF // ZCD Disable bit (ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON)
#pragma config PPS1WAY = ON // PPSLOCK bit One-Way Set Enable bit (PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
#pragma config STVREN = ON // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config XINST = OFF // Extended Instruction Set Enable bit (Extended Instruction Set and Indexed Addressing Mode disabled)

// CONFIG3L
#pragma config WDTCPS = WDTCPS_31// WDT Period Select bits (Divider ratio 1:65536; software control of WDTPS)
#pragma config WDTE = ON // WDT operating mode (WDT always enabled)

// CONFIG3H
#pragma config WDTCWS = WDTCWS_7// WDT Window Select bits (window always open (100%); software control; keyed access not required)
#pragma config WDTCCS = SC // WDT input clock selector (Software Control)

// CONFIG4L
#pragma config WRT0 = OFF // Write Protection Block 0 (Block 0 (000800-001FFFh) not write-protected)
#pragma config WRT1 = OFF // Write Protection Block 1 (Block 1 (002000-003FFFh) not write-protected)
#pragma config WRT2 = OFF // Write Protection Block 2 (Block 2 (004000-005FFFh) not write-protected)
#pragma config WRT3 = OFF // Write Protection Block 3 (Block 3 (006000-007FFFh) not write-protected)

// CONFIG4H
#pragma config WRTC = OFF // Configuration Register Write Protection bit (Configuration registers (300000-30000Bh) not write-protected)
#pragma config WRTB = OFF // Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
#pragma config WRTD = OFF // Data EEPROM Write Protection bit (Data EEPROM not write-protected)
#pragma config SCANE = ON // Scanner Enable bit (Scanner module is available for use, SCANMD bit can control the module)
#pragma config LVP = ON // Low Voltage Programming Enable bit (Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored)

// CONFIG5L
#pragma config CP = OFF // UserNVM Program Memory Code Protection bit (UserNVM code protection disabled)
#pragma config CPD = OFF // DataNVM Memory Code Protection bit (DataNVM code protection disabled)

// CONFIG5H

// CONFIG6L
#pragma config EBTR0 = OFF // Table Read Protection Block 0 (Block 0 (000800-001FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF // Table Read Protection Block 1 (Block 1 (002000-003FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR2 = OFF // Table Read Protection Block 2 (Block 2 (004000-005FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR3 = OFF // Table Read Protection Block 3 (Block 3 (006000-007FFFh) not protected from table reads executed in other blocks)

// CONFIG6H
#pragma config EBTRB = OFF // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)


#include <xc.h>
#define _XTAL_FREQ 20000000 // 20MHz crystal

//Variables
#define LED1 PORTDbits.RD1 //ISR
#define LED0 PORTDbits.RD0 //delay

volatile int count = 0; //volatile means value may be changed externally without program doing anything
volatile int num_overflows = 19;

// interrupt service routine
void __interrupt() ISR(void) {
// has the interrupt been fired by timer 1?
if(PIR0bits.TMR0IF == 1) {
// increase the number of times interrupt has been fired
count++;
// count till 19 interrupts have been fired (about 1 second has elapsed)using 20 MHZ clock

if(count == num_overflows) {
// toggle RD1 pin
LATDbits.LATD1 ^= 1;
//PORTDbits.RD1 = ~PORTDbits.RD1; //flip the bit
// reset counter
count = 0;
}
// reset the overflow interrupt flag
PIR0bits.TMR0IF = 0;
}
}
//Timer_0
void timer_init(){
//T0CON0 reg
T0CON0bits.T0EN =1; //enable timer0
T0CON0bits.T016BIT =1; //enable 16bit timer

T0CON0bits.T0OUTPS0=0; //postcaler =1
T0CON0bits.T0OUTPS1=0;
T0CON0bits.T0OUTPS2=0;
T0CON0bits.T0OUTPS3=0;

//T0CON1 reg
T0CON1bits.T0CS0=0; //clock source FOSC/4 for timer0
T0CON1bits.T0CS1=1;
T0CON1bits.T0CS2=0;

T0CON1bits.T0ASYNC=0; //sync to fosc/4

T0CON1bits.T0CKPS0=0; //prescaler =4
T0CON1bits.T0CKPS1=1;
T0CON1bits.T0CKPS2=0;
T0CON1bits.T0CKPS3=0;

// clear timer1 high and low holding registers
TMR0H = 0;
TMR0L = 0;
// enable global interrupts
INTCONbits.GIE = 1; // enable global interrupts
// enable peripheral interrupts
INTCONbits.PEIE = 1;
// interupt priority
INTCONbits.IPEN = 1;
// enable interrupt flag for timer 1
PIE0bits.TMR0IE = 1;
// TMR0 priority high
IPR0bits.TMR0IP = 1;
// reset the overflow interrupt flag
PIR0bits.TMR0IF = 0;
}
void init_port()
{
ANSELD = 0b00000000; //Configure PORTD as digital
TRISD = 0b00000000; //Configure PORTD as output
//LED1 = 0;

}

int main()
{
init_port();
timer_init();//timer0 init


while(1)//infinite loop or use while(1)
{
LED0 = 1; //LED0 ON
__delay_ms(10);
LED0 = 0; //LED0 OFF
__delay_ms(100);



}
}
#1

13 Replies Related Threads

    hexreader
    Super Member
    • Total Posts : 1107
    • Reward points : 0
    • Joined: 2008/05/04 03:06:55
    • Location: England
    • Status: online
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 10:42:54 (permalink)
    0
    A lot of mistakes - here are the ones I can see after a quick view
     
    1) Please use code tags to make your code readable.
    2) CONFIG1L is listed twice. Harmless, but confusing
    3) Turn off watchdog timer
    4) Possibly Turn off LVP    (EDIT: unless your programmer only supports LVP) - see later posts 
    5) comment does not match setting "#pragma config CLKOUTEN = ON // Clock Out Enable bit (CLKOUT function is disabled)"
    6) change:
    #define LED1 PORTDbits.RD1 //ISR
    #define LED0 PORTDbits.RD0 //delay
    to:
    #define LED1 LATDbits.LATD1 //ISR
    #define LED0 LATDbits.LATD0 //delay

     
    Maybe that is enough. Try it and report on how it goes...
     
    /***********************************************
    * Microcontroller used is the PIC18F45Q10
    * Compiler used is XC8 VERSION v2.1
    * This program blinks an LED using interrupt
    ****************************/


    // CONFIG1L
    #pragma config FEXTOSC = ECH // External Oscillator mode Selection bits (EC (external clock) above 8 MHz; PFM set to high power)
    #pragma config RSTOSC = EXTOSC // Power-up default value for COSC bits (EXTOSC operating per FEXTOSC bits (device manufacturing default))

    // CONFIG1L
    #pragma config FEXTOSC = ECH // External Oscillator mode Selection bits (EC (external clock) above 8 MHz; PFM set to high power)
    #pragma config RSTOSC = EXTOSC // Power-up default value for COSC bits (EXTOSC operating per FEXTOSC bits (device manufacturing default))

    // CONFIG1H
    #pragma config CLKOUTEN = ON // Clock Out Enable bit (CLKOUT function is disabled)
    #pragma config CSWEN = ON // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
    #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)

    // CONFIG2L
    #pragma config MCLRE = EXTMCLR // Master Clear Enable bit (MCLR pin (RE3) is MCLR)
    #pragma config PWRTE = OFF // Power-up Timer Enable bit (Power up timer disabled)
    #pragma config LPBOREN = OFF // Low-power BOR enable bit (Low power BOR is disabled)
    #pragma config BOREN = SBORDIS // Brown-out Reset Enable bits (Brown-out Reset enabled , SBOREN bit is ignored)

    // CONFIG2H
    #pragma config BORV = VBOR_190 // Brown Out Reset Voltage selection bits (Brown-out Reset Voltage (VBOR) set to 1.90V)
    #pragma config ZCD = OFF // ZCD Disable bit (ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON)
    #pragma config PPS1WAY = ON // PPSLOCK bit One-Way Set Enable bit (PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
    #pragma config STVREN = ON // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
    #pragma config XINST = OFF // Extended Instruction Set Enable bit (Extended Instruction Set and Indexed Addressing Mode disabled)

    // CONFIG3L
    #pragma config WDTCPS = WDTCPS_31// WDT Period Select bits (Divider ratio 1:65536; software control of WDTPS)
    #pragma config WDTE = OFF // WDT operating mode (WDT always enabled)

    // CONFIG3H
    #pragma config WDTCWS = WDTCWS_7// WDT Window Select bits (window always open (100%); software control; keyed access not required)
    #pragma config WDTCCS = SC // WDT input clock selector (Software Control)

    // CONFIG4L
    #pragma config WRT0 = OFF // Write Protection Block 0 (Block 0 (000800-001FFFh) not write-protected)
    #pragma config WRT1 = OFF // Write Protection Block 1 (Block 1 (002000-003FFFh) not write-protected)
    #pragma config WRT2 = OFF // Write Protection Block 2 (Block 2 (004000-005FFFh) not write-protected)
    #pragma config WRT3 = OFF // Write Protection Block 3 (Block 3 (006000-007FFFh) not write-protected)

    // CONFIG4H
    #pragma config WRTC = OFF // Configuration Register Write Protection bit (Configuration registers (300000-30000Bh) not write-protected)
    #pragma config WRTB = OFF // Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
    #pragma config WRTD = OFF // Data EEPROM Write Protection bit (Data EEPROM not write-protected)
    #pragma config SCANE = ON // Scanner Enable bit (Scanner module is available for use, SCANMD bit can control the module)
    #pragma config LVP = ON // Low Voltage Programming Enable bit (Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored)

    // CONFIG5L
    #pragma config CP = OFF // UserNVM Program Memory Code Protection bit (UserNVM code protection disabled)
    #pragma config CPD = OFF // DataNVM Memory Code Protection bit (DataNVM code protection disabled)

    // CONFIG5H

    // CONFIG6L
    #pragma config EBTR0 = OFF // Table Read Protection Block 0 (Block 0 (000800-001FFFh) not protected from table reads executed in other blocks)
    #pragma config EBTR1 = OFF // Table Read Protection Block 1 (Block 1 (002000-003FFFh) not protected from table reads executed in other blocks)
    #pragma config EBTR2 = OFF // Table Read Protection Block 2 (Block 2 (004000-005FFFh) not protected from table reads executed in other blocks)
    #pragma config EBTR3 = OFF // Table Read Protection Block 3 (Block 3 (006000-007FFFh) not protected from table reads executed in other blocks)

    // CONFIG6H
    #pragma config EBTRB = OFF // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)


    #include <xc.h>
    #define _XTAL_FREQ 20000000 // 20MHz crystal

    //Variables
    #define LED1 LATDbits.LATD1 //ISR
    #define LED0 LATDbits.LATD0 //delay

    volatile int count = 0; //volatile means value may be changed externally without program doing anything
    volatile int num_overflows = 19;

    // interrupt service routine
    void __interrupt() ISR(void) {
        // has the interrupt been fired by timer 1?
        if(PIR0bits.TMR0IF == 1) {
        // increase the number of times interrupt has been fired
        count++;
        // count till 19 interrupts have been fired (about 1 second has elapsed)using 20 MHZ clock

        if(count == num_overflows) {
        // toggle RD1 pin
        LATDbits.LATD1 ^= 1;
        //PORTDbits.RD1 = ~PORTDbits.RD1; //flip the bit
        // reset counter
        count = 0;
        }
        // reset the overflow interrupt flag
        PIR0bits.TMR0IF = 0;
        }
    }
    //Timer_0
    void timer_init(){
        //T0CON0 reg
        T0CON0bits.T0EN =1; //enable timer0
        T0CON0bits.T016BIT =1; //enable 16bit timer

        T0CON0bits.T0OUTPS0=0; //postcaler =1
        T0CON0bits.T0OUTPS1=0;
        T0CON0bits.T0OUTPS2=0;
        T0CON0bits.T0OUTPS3=0;

        //T0CON1 reg
        T0CON1bits.T0CS0=0; //clock source FOSC/4 for timer0
        T0CON1bits.T0CS1=1;
        T0CON1bits.T0CS2=0;

        T0CON1bits.T0ASYNC=0; //sync to fosc/4

        T0CON1bits.T0CKPS0=0; //prescaler =4
        T0CON1bits.T0CKPS1=1;
        T0CON1bits.T0CKPS2=0;
        T0CON1bits.T0CKPS3=0;

        // clear timer1 high and low holding registers
        TMR0H = 0;
        TMR0L = 0;
        // enable global interrupts
        INTCONbits.GIE = 1; // enable global interrupts
        // enable peripheral interrupts
        INTCONbits.PEIE = 1;
        // interupt priority
        INTCONbits.IPEN = 1;
        // enable interrupt flag for timer 1
        PIE0bits.TMR0IE = 1;
        // TMR0 priority high
        IPR0bits.TMR0IP = 1;
        // reset the overflow interrupt flag
        PIR0bits.TMR0IF = 0;
    }

    void init_port()
    {
        ANSELD = 0b00000000; //Configure PORTD as digital
        TRISD = 0b00000000; //Configure PORTD as output
        //LED1 = 0;

    }

    int main()
    {
        init_port();
        timer_init(); //timer0 init


        while(1) //infinite loop or use while(1)
        {
            LED0 = 1; //LED0 ON
            __delay_ms(10);
            LED0 = 0; //LED0 OFF
            __delay_ms(100);
        }
    }

    post edited by hexreader - 2020/10/21 11:36:21

    Experienced Hobbyist
    #2
    mbrowning
    USNA79
    • Total Posts : 1824
    • Reward points : 0
    • Joined: 2005/03/16 14:32:56
    • Location: Melbourne, FL
    • Status: online
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 10:53:44 (permalink)
    0
    hexreader
    4) Turn off LVP
    Why do you recommend this? I consider HVP to be the archaic method and only use LVP. Certainly Microchip does too as the Snap doesn't support HVP. I believe NSDSP also only uses LVP (unless extra hardware is added).
     
    edited
    post edited by mbrowning - 2020/10/21 10:55:25
    #3
    hexreader
    Super Member
    • Total Posts : 1107
    • Reward points : 0
    • Joined: 2008/05/04 03:06:55
    • Location: England
    • Status: online
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 11:18:33 (permalink)
    +2 (2)
    Habit from history maybe - but for older PICs
    1) Saves a pin
    2) No need for pull-down resistor to prevent going into program mode during operation or on first programming
    3) Have never used a programmer that did not have HVP available - If I had a LVP-only programmer, then I might change habit
     
    Maybe I am out of date...  happy to be corrected.
     
    Have edited earlier post with LVP clarification and LVP enabled just in case
    post edited by hexreader - 2020/10/21 11:27:04

    Experienced Hobbyist
    #4
    henbez_72
    New Member
    • Total Posts : 21
    • Reward points : 0
    • Joined: 2020/10/20 11:27:10
    • Location: 0
    • Status: offline
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 11:56:46 (permalink)
    0
    Disabling the watchdog timer solved the issue.
    Thanks
    Smile: Smile
    #5
    henbez_72
    New Member
    • Total Posts : 21
    • Reward points : 0
    • Joined: 2020/10/20 11:27:10
    • Location: 0
    • Status: offline
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 12:03:17 (permalink)
    0
    With the oscillator frequency , prescale value of  and its resolution is RES=2^16 bits. Therefore, using the equation ,I get that the output frequency is , therefore the period of setting interrupt flag is . Since I want the LED to blink in 1/2Hz period, the time the LED is on or off is equal to 1s = 1000ms and so the number of overflows causing the interrupt flag to be set needs to be .
     
    Using this number I dont see the LED blinking as it should it is on 3sec and off for 3 sec.Something wrong with the clock?
     
     
    #6
    ric
    Super Member
    • Total Posts : 28975
    • Reward points : 0
    • Joined: 2003/11/07 12:41:26
    • Location: Australia, Melbourne
    • Status: offline
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 12:32:49 (permalink)
    0
    (Deleted, incorrect comment)
    post edited by ric - 2020/10/21 12:34:23

    I also post at: PicForum
    Links to useful PIC information: http://picforum.ric323.co...opic.php?f=59&t=15
    NEW USERS: Posting images, links and code - workaround for restrictions.
    To get a useful answer, always state which PIC you are using!
    #7
    henbez_72
    New Member
    • Total Posts : 21
    • Reward points : 0
    • Joined: 2020/10/20 11:27:10
    • Location: 0
    • Status: offline
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 12:38:25 (permalink)
    0
    Yes it does.
    The ISR execute 19 times then the LED toggle.But timing seem to be off.I wonder if it is the clock source I selected?
    [image]data:image/png;base64,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[/image]
    #8
    ric
    Super Member
    • Total Posts : 28975
    • Reward points : 0
    • Joined: 2003/11/07 12:41:26
    • Location: Australia, Melbourne
    • Status: offline
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 12:40:01 (permalink)
    0
    I immediately realised I'd missed your ISR, and deleted the comment within 60 seconds.
    You can't drag an image into a post, you have to "Open Full Version" and use the "Attach" button.
     

    I also post at: PicForum
    Links to useful PIC information: http://picforum.ric323.co...opic.php?f=59&t=15
    NEW USERS: Posting images, links and code - workaround for restrictions.
    To get a useful answer, always state which PIC you are using!
    #9
    1and0
    Access is Denied
    • Total Posts : 11506
    • Reward points : 0
    • Joined: 2007/05/06 12:03:20
    • Location: Harry's Gray Matter
    • Status: offline
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 12:46:29 (permalink)
    0
    henbez_72
    // CONFIG1L
    #pragma config FEXTOSC = ECH // External Oscillator mode Selection bits (EC (external clock) above 8 MHz; PFM set to high power)
    #pragma config RSTOSC = EXTOSC // Power-up default value for COSC bits (EXTOSC operating per FEXTOSC bits

    #define _XTAL_FREQ 20000000 // 20MHz crystal

    Are you using a crystal or oscillator?
    #10
    hexreader
    Super Member
    • Total Posts : 1107
    • Reward points : 0
    • Joined: 2008/05/04 03:06:55
    • Location: England
    • Status: online
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 12:47:54 (permalink)
    +1 (1)
    I too had a problem with the clock frequency.
     
    Fail-safe clock appears to switch from external 20MHz 2-pin crystal (and 2x 22pF cap) to 4MHz internal oscillator.
     
    Disabling switch-over and FSCM in config forces external 20MHz crystal, but then everything dies.
     
    I made delay function accurate by changing to  
     
    "#define _XTAL_FREQ 4000000 // 20MHz crystal fails on my dev board so switch to internal clock 4MHz"
     
    I have NO IDEA why external oscillator is not working :(
     
    We will both have to wait for an expert to chip-in (pun intended)
     
    (In the interest of full disclosure - I have no PIC18F45Q10, so I use PIC18F47Q10 and ignore ID warnings when burning)
    post edited by hexreader - 2020/10/21 12:49:19

    Experienced Hobbyist
    #11
    hexreader
    Super Member
    • Total Posts : 1107
    • Reward points : 0
    • Joined: 2008/05/04 03:06:55
    • Location: England
    • Status: online
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 12:57:50 (permalink)
    +2 (2)
    DOH !!!!
     
    I am being an idiot.
     
    Oscillator mode needs to be HS !
     
    #pragma config FEXTOSC = HS // 

     
    So here is what I have after improving the formatting:
    /***********************************************
    * Microcontroller used is the PIC18F45Q10
    * Compiler used is XC8 VERSION v2.1
    * This program blinks an LED using interrupt
    ****************************/

    // CONFIG1L
    #pragma config FEXTOSC = HS //
    #pragma config RSTOSC = EXTOSC // Power-up default value for COSC bits (EXTOSC operating per FEXTOSC bits (device manufacturing default))

    // CONFIG1H
    #pragma config CLKOUTEN = OFF // Clock Out Enable bit (CLKOUT function is disabled)
    #pragma config CSWEN = ON // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
    #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)

    // CONFIG2L
    #pragma config MCLRE = EXTMCLR // Master Clear Enable bit (MCLR pin (RE3) is MCLR)
    #pragma config PWRTE = OFF // Power-up Timer Enable bit (Power up timer disabled)
    #pragma config LPBOREN = OFF // Low-power BOR enable bit (Low power BOR is disabled)
    #pragma config BOREN = SBORDIS // Brown-out Reset Enable bits (Brown-out Reset enabled , SBOREN bit is ignored)

    // CONFIG2H
    #pragma config BORV = VBOR_190 // Brown Out Reset Voltage selection bits (Brown-out Reset Voltage (VBOR) set to 1.90V)
    #pragma config ZCD = OFF // ZCD Disable bit (ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON)
    #pragma config PPS1WAY = ON // PPSLOCK bit One-Way Set Enable bit (PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
    #pragma config STVREN = ON // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
    #pragma config XINST = OFF // Extended Instruction Set Enable bit (Extended Instruction Set and Indexed Addressing Mode disabled)

    // CONFIG3L
    #pragma config WDTCPS = WDTCPS_31// WDT Period Select bits (Divider ratio 1:65536; software control of WDTPS)
    #pragma config WDTE = OFF // WDT operating mode (WDT always enabled)

    // CONFIG3H
    #pragma config WDTCWS = WDTCWS_7// WDT Window Select bits (window always open (100%); software control; keyed access not required)
    #pragma config WDTCCS = SC // WDT input clock selector (Software Control)

    // CONFIG4L
    #pragma config WRT0 = OFF // Write Protection Block 0 (Block 0 (000800-001FFFh) not write-protected)
    #pragma config WRT1 = OFF // Write Protection Block 1 (Block 1 (002000-003FFFh) not write-protected)
    #pragma config WRT2 = OFF // Write Protection Block 2 (Block 2 (004000-005FFFh) not write-protected)
    #pragma config WRT3 = OFF // Write Protection Block 3 (Block 3 (006000-007FFFh) not write-protected)

    // CONFIG4H
    #pragma config WRTC = OFF // Configuration Register Write Protection bit (Configuration registers (300000-30000Bh) not write-protected)
    #pragma config WRTB = OFF // Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
    #pragma config WRTD = OFF // Data EEPROM Write Protection bit (Data EEPROM not write-protected)
    #pragma config SCANE = ON // Scanner Enable bit (Scanner module is available for use, SCANMD bit can control the module)
    #pragma config LVP = ON // Low Voltage Programming Enable bit (Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored)

    // CONFIG5L
    #pragma config CP = OFF // UserNVM Program Memory Code Protection bit (UserNVM code protection disabled)
    #pragma config CPD = OFF // DataNVM Memory Code Protection bit (DataNVM code protection disabled)

    // CONFIG5H

    // CONFIG6L
    #pragma config EBTR0 = OFF // Table Read Protection Block 0 (Block 0 (000800-001FFFh) not protected from table reads executed in other blocks)
    #pragma config EBTR1 = OFF // Table Read Protection Block 1 (Block 1 (002000-003FFFh) not protected from table reads executed in other blocks)
    #pragma config EBTR2 = OFF // Table Read Protection Block 2 (Block 2 (004000-005FFFh) not protected from table reads executed in other blocks)
    #pragma config EBTR3 = OFF // Table Read Protection Block 3 (Block 3 (006000-007FFFh) not protected from table reads executed in other blocks)

    // CONFIG6H
    #pragma config EBTRB = OFF // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)

    #include <xc.h>
    #define _XTAL_FREQ 20000000 // 20MHz 2-pin crystal

    #define LED1 LATDbits.LATD1 //ISR
    #define LED0 LATDbits.LATD0 //delay

    // global Variables
    volatile int count = 0; //volatile means value may be changed externally without program doing anything
    volatile int num_overflows = 19;

    // interrupt service routine
    void __interrupt() ISR(void) {
        
        if(PIR0bits.TMR0IF == 1) { // has the interrupt been fired by timer 1?
            count++; // increase the number of times interrupt has been fired
            if(count == num_overflows) { // count till 19 interrupts have been fired (about 1 second has elapsed)using 20 MHZ clock
                LATDbits.LATD1 ^= 1; // toggle RD1 pin
                //PORTDbits.RD1 = ~PORTDbits.RD1; //flip the bit
                count = 0; // reset counter
            }
            PIR0bits.TMR0IF = 0; // reset the overflow interrupt flag
        }
    }

    // Timer_0 init
    void timer_init(){
        //T0CON0 reg
        T0CON0bits.T0EN = 1; // enable timer0
        T0CON0bits.T016BIT = 1; // enable 16bit timer

        T0CON0bits.T0OUTPS0 = 0; // post-scaler = 1
        T0CON0bits.T0OUTPS1 = 0;
        T0CON0bits.T0OUTPS2 = 0;
        T0CON0bits.T0OUTPS3 = 0;

        //T0CON1 reg
        T0CON1bits.T0CS0 = 0; // clock source FOSC/4 for timer0
        T0CON1bits.T0CS1 = 1;
        T0CON1bits.T0CS2 = 0;

        T0CON1bits.T0ASYNC = 0; // sync to fosc/4

        T0CON1bits.T0CKPS0 = 0; // pre-scaler = 4
        T0CON1bits.T0CKPS1 = 1;
        T0CON1bits.T0CKPS2 = 0;
        T0CON1bits.T0CKPS3 = 0;

        TMR0H = 0; // clear timer1 high and low holding registers
        TMR0L = 0;
        INTCONbits.GIE = 1; // enable global interrupts
        INTCONbits.PEIE = 1; // enable peripheral interrupts
        INTCONbits.IPEN = 1; // interrupt priority
        PIE0bits.TMR0IE = 1; // enable interrupt flag for timer 1
        IPR0bits.TMR0IP = 1; // TMR0 priority high
        PIR0bits.TMR0IF = 0; // reset the overflow interrupt flag
    }

    void init_port()
    {
        ANSELD = 0b00000000; // Configure PORTD as digital
        TRISD = 0b00000000; // Configure PORTD as output
        //LED1 = 0;
    }

    int main()
    {
        init_port();
        timer_init(); // timer0 init

        while(1) // infinite loop or use while(1)
        {
            LED0 = 1; // LED0 ON
            __delay_ms(500); // half second delay foe 1Hz flash rate
            LED0 = 0; // LED0 OFF
            __delay_ms(500); // half second delay foe 1Hz flash rate
        }
    }

    post edited by hexreader - 2020/10/21 13:15:00

    Experienced Hobbyist
    #12
    henbez_72
    New Member
    • Total Posts : 21
    • Reward points : 0
    • Joined: 2020/10/20 11:27:10
    • Location: 0
    • Status: offline
    Re: PIC18F45Q10 timer interrupt blinking led. 2020/10/21 13:48:20 (permalink)
    0
    Changing the Oscillator mode needs to  HS  FIXED it...Thank you very much..
    #13
    Jump to:
    © 2020 APG vNext Commercial Version 4.5