Gast
#4645562
Hallo, ich habe eine Frage bzgl. der Interrupt Service Rouine. Ich habe den foglenden Code aus dem AVR-GCC-tutorial (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR). Hierbei soll innerhalb einer Millisekunde ein Interrupt ausgelöst werden. Dazu wurde ein Prescler von 8 ausgewählt und mithilfe dieser Vorteiler wurde der Vergleichswert von 125-1 berrechnet. Jedoch verstehe ich nicht, was in der ISR Routine geschieht. Danke * uC: Attiny2313 */ #include <avr/io.h> #include <avr/interrupt.h> //Variablen für die Zeit volatile unsigned int millisekunden; volatile unsigned int sekunde; volatile unsigned int minute; volatile unsigned int stunde; int main(void) { // Timer 0 konfigurieren TCCR0A = (1<<WGM01); // CTC Modus TCCR0B |= (1<<CS01); // Prescaler 8 // ((1000000/8)/1000) = 125 OCR0A = 125-1; // Compare Interrupt erlauben TIMSK |= (1<<OCIE0A); // Global Interrupts aktivieren sei(); while(1) { /*Hier kann die aktuelle Zeit ausgeben werden*/ } } /* Der Compare Interrupt Handler wird aufgerufen, wenn TCNT0 = OCR0A = 125-1 ist (125 Schritte), d.h. genau alle 1 ms */ ISR (TIMER0_COMPA_vect) { millisekunden++; if(millisekunden == 1000) { sekunde++; millisekunden = 0; if(sekunde == 60) { minute++; sekunde = 0; } if(minute == 60) { stunde++; minute = 0; } if(stunde == 24) { stunde = 0; } } }