#include #include #include #include #include /*############################################## # Kleines Programm, was mit einem Microcontroller # (hier einem ATMega32) eine Stopp-Uhr realisiert. # Zur genauen Zeitgenerierung wird ein interner # Timer benutzt. Die Auflösung beträgt 1/10000 s # oder 100 µs. Die Ausgabe findet auf einem # 6-stelligen Display aus 7-Segment-Anzeigen statt. # # "anzwert[0-9]" enthalten die HEX-Codes für die # anzuzeigenden Zahlen, "adresse[0-5]" enthalten # HEX-Codes für die sechs verschiedenen Adressen # der einzelnen Anzeigen. # # PORTB ist der Adressport, PORTC der Datenport. ##############################################*/ volatile unsigned char lauf; volatile unsigned char a; volatile unsigned char adresse[6]; volatile unsigned char anzwert[10]; volatile unsigned char zeiger[6]; //######Routine zur Timer-Initialisierung##### int interrupt_init(void){ //Timer2-Konfiguration TCNT2 = 0; OCR2 = 49; // Obergrenze für den Timer TIMSK |= (1< 9) { zeiger[0]=0; zeiger[1]++; } if(zeiger[1] > 9) { zeiger[1]=0; zeiger[2]++; } if(zeiger[2] > 9) { zeiger[2]=0; zeiger[3]++; } if(zeiger[3] > 9) { zeiger[3]=0; zeiger[4]++; } if(zeiger[4] > 9) { zeiger[4]=0; zeiger[5]++; } if(zeiger[5] > 9) { zeiger[0]=0; zeiger[1]=0; zeiger[2]=0; zeiger[3]=0; zeiger[4]=0; zeiger[5]=0; } } //---------------------------------------- //###### ISR für "Start/Stop"-Knopf ###### ISR(INT0_vect) { if(lauf == 0) { TCCR2 = 0x0B; //CTC-Mode, Prescaler = 32 lauf = 1; //Indikator für "läuft" } else { TCCR2 = 0x00; //Timer2 aus lauf = 0; //Indikator für "läuft nicht" } } //---------------------------------------- //##### ISR für "Zurücksetzen"-Knopf ##### ISR(INT1_vect) { TCCR2 = 0x00; //Timer2 aus lauf = 0; //Indikator für "läuft nicht" //Alle Zeiger zurücksetzen (auf 0) zeiger[0]=0; zeiger[1]=0; zeiger[2]=0; zeiger[3]=0; zeiger[4]=0; zeiger[5]=0; } //----------------------------------------