// ************************************************************************************************ // Absolute Beginner Projekt 03_1 // // Timerinterrupt 0 und 1 auslösen und LED an Port D0+D1 schalten // ************************************************************************************************ // Copyright keins // Version /* * Chip type : ATMEGA 88 * Clock frequency : Internal clock 1 Mhz (The device is shipped with this option selected.) * Fuse Bits einfach auf Auslieferungszustand lassen! Ein- und Ausgänge PORT B 0 (14) = PORT B 1 (15) = PORT B 2 (16) = PORT B 3 (17) = PORT B 4 (18) = PORT B 5 (19) = PORT B 6 ( 9) = PORT B 7 (10) = PORT C 0 (23) = PORT C 1 (24) = PORT C 2 (25) = PORT C 3 (26) = PORT C 4 (27) = PORT C 5 (28) = PORT D 0 ( 2) = LED 1 (von Portpin nach Masse geschaltet) PORT D 1 ( 3) = LED 2 (von Portpin nach VCC geschaltet) PORT D 2 ( 4) = PORT D 3 ( 5) = PORT D 4 ( 6) = PORT D 5 (11) = PORT D 6 (12) = PORT D 7 (13) = */ // ************************************************************************************************ // Include Dateien laden // ************************************************************************************************ #include //AVR Register und Konstantendefinitionen #include //AVR Interrupt Vektoren #include #include // ************************************************************************************************ // Globale Variablen // sind auch in allen Unterroutinen verwendbar. // ************************************************************************************************ volatile unsigned char blinkmerker = 0; //Globale Variable Blinktakt volatile unsigned char blinkmerker2 = 0; //Globale Variable Blinktakt mit Timer 0 // ******************************************************************* // Timerinterrupt 0 // // Zeit für den Aufruf dieser Routine: // Zeit = 1 / (1.000.000/(1024*256) = 0,26214sec // ******************************************************************* ISR (TIMER0_OVF_vect) // signal handler for tcnt0 overflow interrupt { if(blinkmerker2) blinkmerker2=0; else blinkmerker2=1; // Die Auswertung von "blinkmerker2" wird im Hauptprogramm vorgenommen! TCNT0 = 256-256; // Die 256 werden von 256 abgezogen, // da der Timerroutine bei einem Überlauf aufgerufen wird } // ******************************************************************* // Timerinterrupt 1 // // Zeit für den Aufruf dieser Routine: // Zeit = 1 / (1.000.000/(1024*488) = 0,499sec // ******************************************************************* ISR (TIMER1_OVF_vect) // signal handler for tcnt1 overflow interrupt { if(blinkmerker) blinkmerker=0; else blinkmerker=1; // Die Auswertung von "blinkmerker" wird im Hauptprogramm vorgenommen TCNT1 = 65536-488; // Die 488 werden von 65536 abgezogen, // da der Timerroutine bei einem Überlauf aufgerufen wird } // ************************************************************************************************ // Initialisierung // ************************************************************************************************ void initial(void) { // **** Einrichten von Timer 0 *************** TCCR0B = (1<