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. |
Please visit: the four |
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
Gelb: Digitaler Ausgang PB1
|