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:
MfG MarkCode:#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 }







Zitieren

Lesezeichen