Fehlermeldung TIMSK und interrupt.h

OP #896699
Lesenswert?

Hallo, ich bin ein Anfänger in Sachen AVR und GCC, und ich brauche einen 
Hinweis.
Ich habe eine Lauflicht Code im Netz gefunden und möchte den nun in 
einen Mega88 überspielen. Leider spielt mein AVR Studio/WINAVR nicht mit 
und erhalte eine Fehlermeldung: ../main.c:28: error: `TIMSK' undeclared 
(first use in this function)
Ich habe ein wenig nachgelesen und TIMSK soll in der interrupt.h 
declared sein. Wenn ich diese Datei mit einem Editor öffne finde ich 
keine Zeile mit TIMSK.

der Programm Code:
1
#define F_CPU 80000000
2

3
#include <avr/io.h>
4
//#include <util/delay.h>
5
#include <avr/interrupt.h>
6
#include <avr/signal.h>
7
#include <stdint.h>
8
#include <stdio.h>
9
//---------------------------------------------------------------------------
10
//Globale Variablen
11
//---------------------------------------------------------------------------
12

13
volatile unsigned int takt_1s = 0; //Wird alle 1s von Timer-ISR auf
14
                  //1 gesetzt und in main() bearbeitet.
15

16
volatile unsigned int schritt = 0; //aktueller Programmschritt
17

18
//---------------------------------------------------------------------------
19
//Hauptprogramm
20
//---------------------------------------------------------------------------
21

22

23

24
int main(void)
25
{
26
  DDRB=0b11111111;    //Port B alles Ausgaenge
27

28
  TIMSK=(1<<TOIE1) | (1<<=OCIE1A) | (1<<OCIE1B); //Timer 1 Overflow      und Compare
29
                        //Match Interrupts einschalten
30

31

32

33
  TCCR1B=(1<<CS12);  //Timer 1 mit Prescaler=256 von int. Clock (bei 16Mhz wird
34
            //Timer 1 alle 16us um 1 erhoeht)
35

36

37
  OCR1AH=0b00000010;  // Timer 1 Compare Match A bei 625
38
  OCR1AL=0b01110001;  // (erzeugt Takt von 10ms)
39

40
  sei();        // Globale Interrupts einschalten
41

42
  while(1);      // Beginn der Endlosschleife
43

44
    {
45
      if(takt_1s==1)
46
        {
47
          takt_1s=0;
48

49
          if(schritt==0)    PORTB=0b00000000;
50
            
51
            else if (schritt==1) PORTB=0b00000001;
52
            else if (schritt==2) PORTB=0b00000010;
53
            else if (schritt==3) PORTB=0b00000100;
54
            else if (schritt==4) PORTB=0b00001000;
55
            else if (schritt==5) PORTB=0b00010000;
56
            else if (schritt==6) PORTB=0b00100000;
57
            else if (schritt==7) PORTB=0b01000000;  
58
            else if (schritt==8) PORTB=0b10000000;
59

60
            schritt++;
61
            if (schritt>=9) schritt=0;
62
        }//if schleife
63
    }//while(1)
64

65
  return(0);
66
}//void main
67

68

69
//-------------------------------------------------------------------------
70
// Interrupt Subroutinen
71
//-------------------------------------------------------------------------
72

73

74
ISR (TIMER1_OVF_vect)          // Timer 1 Ueberlauf
75

76
{
77

78
}
79

80
ISR (TIMER1_COMPA_vect)          // Timer Compare Match A
81

82
  {
83
    static unsigned long int zaehler=0;
84
    TCNT1H=0;            // Timer 1 zurücksetzen
85
    TCNT1L=1;
86
    zaehler++;            // Zaehler alle 10ms erhoehen
87
    if (zaehler>=100)        // Zaehler >100 bedeutet 1s
88
    
89
    {
90
      zaehler=0;
91
      takt_1s=1;
92
    }
93
  
94
  }
95
  
96
  
97
ISR (TIMER1_COMPB_vect)          // Timer 1 Compare Match B
98

99
{
100

101
}

was mache ich falsch. Ich habe diesen Code von Hand eingegeben und zur 
Sicherheit den Code noch einmal fertig von der HP gezogen, aber es kommt 
die gleiche Fehlermeldung.
#896705
Lesenswert?

> Ich habe ein wenig nachgelesen und TIMSK soll in der interrupt.h
> declared sein.

Nein, es ist in der zum Controller gehörenden ioXXX.h definiert (wird 
von io.h eingebunden). Aber beim Mega88 gibt es kein TIMSK, sondern 
TIMSK0, TIMSK1 und TIMSK2.
Der Code ist nun mal nicht für einen Mega88, du musst ihn erst 
umschreiben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren