Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * GccApplication3.c
- *
- * Created: 12/6/2019 5:05:54 PM
- * Author : CJ
- */
- // Konstantendeklaration fuer prozessorabhaengige Register
- #include <avr/io.h>
- // Datei fuer die Interruptverarbeitung
- #include <avr/interrupt.h>
- // 16 Mhz Taktfrequenz
- #define F_CPU 16000000UL
- // Bibliothek fur _delay_ms()
- // brauchen wir noch fuer Entprellen des Tasters
- #include <util/delay.h>
- // muessen global deklariert werden, so dass sie in der ISR Funktion
- // sichtbar sind globale Variablen, di in der ISR-Funktion veraendert
- // werden, muessen als veraenderlich (volatile) gekennzeichnet werden
- uint8_t test = 19;
- int const startwert = 3036; // Startwert des Zaehlers, nicht veraenderlich
- int main(void)
- {
- DDRB |= (1<<DDB0);
- PORTB &= ~(1<<PORTB0);
- EICRA &= ~(1 << ISC01); // IRQ bei irgendeiner Aenderung an Int0 ausloesen
- EICRA |= (1 << ISC00);
- EIMSK |= (1 << INT0); // Interrupt Int0 aktivieren
- EICRA &= ~(1 << ISC11); // IRQ bei irgendeiner Aenderung an Int0 ausloesen
- EICRA |= (1 << ISC10);
- EIMSK |= (1 << INT1); // Interrupt Int1 aktivieren
- // Vorteiler fuer Counter: 256
- TCCR1B |= (1 << CS02);
- TCCR1B &= ~((1 << CS01) | (1 << CS00));
- // Vorteiler fuer Counter: 64
- // Startwert fuer Timer => 65536 - 62500 = 3036
- // bis zum Ueberlauf vergeht immer genau 1/4 Sekunde
- TCCR1B |= ((1 << CS11) | (1 << CS10)); // Vorteiler 64
- TCCR1B &= ~(1 << CS12);
- TIMSK0 &= ~(1 << TOIE0); // Schalte Interrupt fuer Ueberlauf ausloesen Timer 0
- TIMSK1 &= ~(1 << TOIE0); // Schalte Interrupt fuer Ueberlauf ausloesen Timer 1
- TCNT0 = test;
- TCNT1 = startwert;
- sei();
- while (1)
- {
- TIMSK0 |= (1 << TOIE0); // Schalte Interrupt fuer Ueberlauf ein
- TIMSK1 |= (1 << TOIE1); // Schalte Interrupt fuer Ueberlauf ein
- TIMSK0 &= ~(1 << TOIE0); // Schalte Interrupt fuer Ueberlauf ausloesen
- TIMSK1 &= ~(1 << TOIE1); // Schalte Interrupt fuer Ueberlauf ausloesen
- }
- }
- // Funktion fuer die Bearbeitung des externen Interrupts INT0
- ISR(INT0_vect){
- cli();
- sei();
- }
- // Funktion fuer die Bearbeitung des externen Interrupts INT1
- ISR(INT1_vect){
- cli();
- sei();
- }
- ISR(TIMER0_OVF_vect){
- cli();
- TCNT0 = test;
- sei();
- }
- ISR(TIMER1_OVF_vect){
- cli();
- PORTB ^= (1<<PORTB0);
- TCNT1 = startwert; // Erneute Initialisierung des Timers mit Startwert
- sei();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement