ATmega8 Timer0 Interrupt

Dieses C Codebeispiel lässt den Timer0 des ATmega8 laufen und löst bei jedem Overflow einen Interrupt aus. In der Interruptroutine wird ein Ausgang getoggelt.


Beschreibung

Der Timer0 des ATmega8 wird in diesem Beispiel mit Interrupt und einem 1MHz Mikrocontroller Clock betreiben. Dieser wird mit dem Prescaler 1024 auf 976Hz heruntergeteilt. Der Timer0 zählt im normal mode von 0 bis auf 255 und löst dann den Timer0 Overflow Interrupt aus. Dies geschieht mit einer Freuquenz von 976Hz / 256 = 3.81Hz. Die Interruptroutine toggelt den Ausgang PB0. Seine Frequenz ist somit 1.9Hz.

Buchtippp:


AVR Mikrocontroller
In C programmieren

C Sourcecode

#include <avr/io.h>
#include <avr/interrupt.h>

int main(void)
{

    DDRB = 0x01;                      // Setup PB0 as output

    
    TCCR0= (1<<CS02)|(1<<CS00);       // Start Timer 0 with prescaler 1024
    TIMSK= (1<<TOIE0);                // Enable Timer 0 overflow interrupt

    sei();                            // Set the I-bit in SREG

    for(;;);                          // Endless loop;
                                      // main() will never be left

    return 0;                         // This line will never be executed

}


// Interrupt subroutine for Timer0 Overflow interrupt
ISR(TIMER0_OVF_vect) 
{
    PORTB ^= 0x01;                    // Toggle PB0
                                      // f_PB0 = 1MHz/1042/256/2 = 1.9Hz
} 


Download C-Sourcefile mit ASCII-Schema: C-Sourcefile mit ACII-Schema

Signalplots

ATmega8 Timer0 Interrupt

Gelb: Digitaler Ausgang PB1