ATmega32 Timer0 Normal Mode
Dies ist ein lauffähiges Programm um den Timer des ATmega32 im Normal Mode mit Interrupt zu betreiben.
Beschreibung Timer 0 wird im Normal Mode mit Prescaler 1024 betrieben und generiert zwei Rechtecksignale an PA0 und PA1. Der Timer zählt von 0 bis 255. Dann tritt ein Overflow ein und er beginnt von vorne. Der Overflow löst den Overflow Interrupt aus. In der Interruptroutine wird PA0 jedes mal und PA1 jedes zehnte Mal getoggelt. Die Zehn durchläufe werden mit einem Zähler und einem Switch Block innerhalb der Interruptroutine abgezählt. |
Please visit: the four |
C Sourcecode
#include <avr/io.h>
#include <avr/interrupt.h>
volatile unsigned int overflowCounter = 0; // Counts the overflows
int main(void)
{
DDRA = 0x03; // Setup PA0 and PA1 as output
TIMSK |= (1<<TOIE0); // Enable Timer 0 Overflow interrupt
TCCR0 |= (1<<CS00)|(1<<CS02); // Start timer0 with prescaler 1024
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 timer 0 overflow
ISR(TIMER0_OVF_vect)
{
overflowCounter++; // Increment overflowcounter
PORTA ^= 0x01; // Toggle PA0
switch (overflowCounter) // Switch overflowcounter
{
case 10: // Is the overflowcounter = 10?
PORTA ^= 0x02; // Toggle PA1
overflowCounter = 0; // Reset overflowcounter
break; // Leave the switch block
default: // If the overflowcounter is not 10
break; // Just leave the switch block
}
} // End of the timer 0 overflow
// interrupt subroutine
Download lauffähiges C-File mit ASCII-Schema: Downloadlink
Signalplot
Gelb: PA0 Rechteck Signal |