EMBEDDED FOR US
Would you like to react to this message? Create an account in a few clicks or log in to continue.

8051 : 8 bit Timer0 overflow using Interrupt

Go down

8051 : 8 bit Timer0 overflow using Interrupt Empty 8051 : 8 bit Timer0 overflow using Interrupt

Post  Admin Wed Jul 31, 2013 1:46 am

This example program shows how to configure timer/counter 1 as an
8-bit timer.  An interrupt service routine (ISR) is invoked each
time the timer overflows (goes from 0xFF to 0x00).  Inside the
ISR, a variable called overflow_count is incremented by one.

To test this program...

1. Start the debugger.
2. Set a breakpoint on the 'overflow_count++' line in the ISR.
3. Run the program.

Each time the interrupt routine is invoked, the debugger will stop
running the program.  Position the cursor over 'overflow_count' to
see its current value.







#include <reg52.h>    /* 8051 specific header file */


/*------------------------------------------------
Timer 1 Interrupt Service Routine.

Set a breakpoint on 'overflow_count++' and run the
program in the debugger.  You will see this line
executes every 100 clock cycles (or 10,000 Hz).

So, overflow_count is actually a 1/10,000 sec
timer.
------------------------------------------------*/
static unsigned long overflow_count = 0;

void timer1_ISR (void) interrupt 3
{
overflow_count++;   /* Increment the overflow count */
}

/*------------------------------------------------
MAIN C function
------------------------------------------------*/
void main (void)
{
/*--------------------------------------
Set Timer1 for 8-bit timer with reload
(mode 2). The timer counts to 255,
overflows, is reloaded with 156, and
generates an interrupt.

Set the Timer1 Run control bit.
--------------------------------------*/
TMOD = (TMOD & 0x0F) | 0x20;  /* Set Mode (8-bit timer with reload) */
TH1 = 256 - 100;              /* Reload TL1 to count 100 clocks */
TL1 = TH1;
ET1 = 1;                      /* Enable Timer 1 Interrupts */
TR1 = 1;                      /* Start Timer 1 Running */
EA = 1;                       /* Global Interrupt Enable */

/*--------------------------------------
Do Nothing.  Actually, the timer 1
interrupt will occur every 100 clocks.
Since the oscillator runs at 12 MHz,
the interrupt will happen every 10 KHz.
--------------------------------------*/
while (1)
 {
 }
}









Admin
Admin
Admin

Posts : 49
Join date : 2012-08-15
Location : Mumbai,INDIA

http://embeddedforus.com

Back to top Go down

Back to top

- Similar topics

 
Permissions in this forum:
You cannot reply to topics in this forum