Hallo Geimel,
um den Output Compare Match Intrrupt zu aktivieren, muss man die Bits OCIE1A für Output Compare A Match bzw. OCIE1B für Output Compare B Match im TIMSK setzten. Nun wird beim erreichen der Werte, die in den Registern OCR1A bzw OCR1B stehen, der TIMER1_COMPA-/TIMER1_COMPB-Interrupt ausgelöst. Wenn der Timer zusätzlich automatisch zurückgesetzt werden soll, sobalt der COMPA-Int eintrifft, muss man die das Bit WGM12 im TCCR1B setzten. Kleines Beispielprogramm, welches eine LED an PORTD.7 mit 0.5 Herz blinken lässt:
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(TIMER1_COMPA_vect)
{
PORTD^=(1<<7);
}
int main()
{
DDRD|=(1<<7); //PD7 als Ausgang
TCCR1B=(1<<CS10)|(1<<CS12)|(1<<WGM12); //Prescale = 1024, CTC
OCR1A=F_CPU/1024; //Jede Sekunde ein IRQ
TIMSK|=(1<<OCIE1A); //Compare A Match Interrupt aktivieren
sei(); //Interrupts aktivieren
while(1); //Endlosschleife
}
MfG Mark
Lesezeichen