ATmega8 Timer0 Overflow

In diesem Codebeipsiel zeigt ein Digitalport das MSB des endlos laufenden Timer0 an.


Beschreibung

Der Timer 0 des ATmega8 wird in diesem Beispiel mit einem 1MHz Mikrocontroller Clock betreiben. Nach einem Overflow fängt der Timer jeweils wieder bi 0 mit zählen an. Der Prescaler teilt den Clock für den Timer0 durch 1024. Somit ist der Clock des Timer0 976Hz. Das Programm beobachtet das MSB des Timer0. Dieses ändert alle 128 Timer0 Clockzyklen. Seine Frequenz ist deshalb 976Hz / 256 = 3.81Hz. Der Zustand des MSB wird an PA0 ausgegeben.

C Sourcecode

#include <avr/io.h>

int main(void)
{
    DDRB = 0x01;                    // Set PB0 as output
    TCCR0= (1<<CS02)|(1<<CS00);     // Start Timer 0 with prescaler 1024

    for(;;)                         // Endless loop;
    {


        if(TCNT0&0x80)              // Is the MSB of Timer1 = 1?
            PORTB |=0x01;           // Set PB0
        else                        // Is the MSB of Timer1 = 0?
            PORTB &= ~0x01;         // Reset PB0

    }                               // main() will never be left

    return 0;                       // This line will never be executed
}

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

Signalplots

ATmega8 Timer0 Overflow Plot

Gelb: Digitalausgang PB0 zeigt das MSB des Timer0 an.