0% found this document useful (0 votes)
96 views

18f4550 Timer0 Example

This document describes using timer 0 and interrupts to toggle an LED (A0) on and off every 1 second on a PIC18F4550 microcontroller. It sets the timer 0 prescaler to 1/256 to generate interrupts at a frequency of 46875 Hz, or every 1 second. The timer 0 is initialized to a starting value of 0x48E4 so that an interrupt occurs every second. In the interrupt service routine, the LED state is toggled by changing the LATAbits.LATA0 value. This causes the LED to turn on for 1 second and off for the next 1 second, creating a 1 second on/off cycle.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
96 views

18f4550 Timer0 Example

This document describes using timer 0 and interrupts to toggle an LED (A0) on and off every 1 second on a PIC18F4550 microcontroller. It sets the timer 0 prescaler to 1/256 to generate interrupts at a frequency of 46875 Hz, or every 1 second. The timer 0 is initialized to a starting value of 0x48E4 so that an interrupt occurs every second. In the interrupt service routine, the LED state is toggled by changing the LATAbits.LATA0 value. This causes the LED to turn on for 1 second and off for the next 1 second, creating a 1 second on/off cycle.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

E:\Internship project PIC18F4550\standard library examples\Timers\Timer0\timer0.

c //Description: // // //This example is using timer 0 and interrupt to make LED (A0) on for 1 second and off for 1 second. //As we want every 1 second to have 1 interrupt, we need to choose proper starting value of timer0. //Choose prescaler: 1/256, to minimize the timer increment frequency. //Then the timer increment frequency = (Fosc/4)*(1/256)= (48MHz/4)*(1/256)= 46875 Hz. // //Because the period of the interupt is 1 second,then amount of the timer register value for 1 second is 46875*1second = 46875. //Timer0 starting value = 65535 - 46875 = 18660 = 0x48E4. // //When the interrupt is generated, then in the interrupt service routine we just need to toggle the state of the LED. //Finally, we can see the LED on for 1 second and off for other 1 second. // // #include <p18f4550.h> #include <timers.h>

// include the timer library

void timer0_isr(void); //Interrupt service routine prototype int state=1; //The state of A0. //Always include this code, its necessary when using a bootloader extern void _startup (void); #pragma code _RESET_INTERRUPT_VECTOR = 0x000800 void _reset (void) { _asm goto _startup _endasm } #pragma code #pragma code _HIGH_INTERRUPT_VECTOR = 0x000808 void high_ISR (void) { } #pragma code #pragma code _LOW_INTERRUPT_VECTOR = 0x000818 void low_ISR (void) { //Pre: The interrupt priority is defined as low and enabled.The low priority interrupt service routine is called //Post: Execute the timer0_isr function. _asm goto timer0_isr _endasm; //when the low priority interrupt is executed, go to timer0 service routine } #pragma code //End bootloader code

#pragma interrupt timer0_isr //Low priority interrupt service routine void timer0_isr(void) { //Pre: The low_ISR function is called.One integer for the A0 state is defined. //Post: LED (A0) can toggle the state each second.

INTCONbits.TMR0IF = 0; WriteTimer0(0x48E4); LATAbits.LATA0 =state; state= !state;

//Reset Timer0 interrupt flag //give new start value to the timer0 //give the state to A0. //Toggle the state of A0.

} void main(void) { //Pre: The timer library is included //Post: The timer0 overflow interrupt can be generated at every 1 second. TRISA = 0b11111110; LATA=0; ADCON1 = 0b00001111; RCONbits.IPEN = 1; RCONbits.SBOREN = 0; //Set channel A0 as output //Initialize Port A. //All ADC disabled //Enable priority levels on interrupts //Disable BOR

E:\Internship project PIC18F4550\standard library examples\Timers\Timer0\timer0.c OpenTimer0( TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256 ); WriteTimer0(0x48E4); //Interrupt enabled //Set timer0 as 16 bit mode. //choose Internal clock source (TOSC) //Prescale Value: 1:256

// set overflow interrupt at every 1 ms.

INTCON = 0b11000000 ; INTCON2bits.TMR0IP =0; INTCONbits.TMR0IE=1;

// enable high and low priority interrupts //Set interrupt priority as low //Enables the TMR0 overflow interrupt

while(1) { //add your codes ................ } }

You might also like