Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.40 KB | None | 0 0
  1. /*
  2.  * GccApplication3.c
  3.  *
  4.  * Created: 12/6/2019 5:05:54 PM
  5.  * Author : CJ
  6.  */
  7.  
  8. // Konstantendeklaration fuer prozessorabhaengige Register
  9. #include <avr/io.h>
  10.  
  11. // Datei fuer die Interruptverarbeitung
  12. #include <avr/interrupt.h>
  13.  
  14. // 16 Mhz Taktfrequenz
  15. #define F_CPU 16000000UL
  16.  
  17. // Bibliothek fur _delay_ms()
  18. // brauchen wir noch fuer Entprellen des Tasters
  19. #include <util/delay.h>
  20.  
  21. // muessen global deklariert werden, so dass sie in der ISR Funktion
  22. // sichtbar sind globale Variablen, di in der ISR-Funktion veraendert
  23. // werden, muessen als veraenderlich (volatile) gekennzeichnet werden
  24.  
  25.  
  26. uint8_t test = 19;
  27. int const startwert = 3036;           // Startwert des Zaehlers, nicht veraenderlich
  28.  
  29. int main(void)
  30. {  
  31.     DDRB |= (1<<DDB0);
  32.     PORTB &= ~(1<<PORTB0);
  33.    
  34.     EICRA &= ~(1 << ISC01);     // IRQ bei irgendeiner Aenderung an Int0 ausloesen
  35.     EICRA |= (1 << ISC00);
  36.  
  37.     EIMSK |= (1 << INT0);       // Interrupt Int0 aktivieren
  38.    
  39.     EICRA &= ~(1 << ISC11);     // IRQ bei irgendeiner Aenderung an Int0 ausloesen
  40.     EICRA |= (1 << ISC10);
  41.  
  42.     EIMSK |= (1 << INT1);       // Interrupt Int1 aktivieren
  43.    
  44.     // Vorteiler fuer Counter: 256
  45.     TCCR1B |= (1 << CS02);
  46.     TCCR1B &= ~((1 << CS01) | (1 << CS00));
  47.    
  48.     // Vorteiler fuer Counter: 64
  49.     // Startwert fuer Timer => 65536 - 62500 = 3036
  50.     // bis zum Ueberlauf vergeht immer genau 1/4 Sekunde
  51.     TCCR1B |= ((1 << CS11) | (1 << CS10)); // Vorteiler 64
  52.     TCCR1B &= ~(1 << CS12);
  53.    
  54.     TIMSK0 &= ~(1 << TOIE0);            // Schalte Interrupt fuer Ueberlauf ausloesen Timer 0
  55.    
  56.     TIMSK1 &= ~(1 << TOIE0);            // Schalte Interrupt fuer Ueberlauf ausloesen Timer 1
  57.    
  58.     TCNT0 = test;
  59.    
  60.     TCNT1 = startwert;
  61.    
  62.     sei();
  63.    
  64.     while (1)
  65.     {
  66.         TIMSK0 |= (1 << TOIE0);         // Schalte Interrupt fuer Ueberlauf ein
  67.         TIMSK1 |= (1 << TOIE1);         // Schalte Interrupt fuer Ueberlauf ein
  68.         TIMSK0 &= ~(1 << TOIE0);        // Schalte Interrupt fuer Ueberlauf ausloesen
  69.         TIMSK1 &= ~(1 << TOIE1);        // Schalte Interrupt fuer Ueberlauf ausloesen
  70.     }
  71. }
  72.  
  73. // Funktion fuer die Bearbeitung des externen Interrupts INT0
  74. ISR(INT0_vect){
  75.     cli();
  76.  
  77.  
  78.  
  79.     sei();
  80. }
  81.  
  82. // Funktion fuer die Bearbeitung des externen Interrupts INT1
  83. ISR(INT1_vect){
  84.     cli();
  85.  
  86.  
  87.  
  88.     sei();
  89. }
  90.  
  91. ISR(TIMER0_OVF_vect){
  92.     cli();
  93.        
  94.         TCNT0 = test;
  95.        
  96.     sei();
  97. }
  98.  
  99. ISR(TIMER1_OVF_vect){
  100.     cli();
  101.        
  102.         PORTB ^= (1<<PORTB0);
  103.  
  104.         TCNT1 = startwert;                      // Erneute Initialisierung des Timers mit Startwert
  105.  
  106.     sei();
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement