Forum: Compiler & IDEs Fehlermeldung TIMSK und interrupt.h


von Andreas L. (andreasl)


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.

von Stefan E. (sternst)


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.

von Andreas L. (andreasl)


Lesenswert?

Danke, da werd ich wohl einiges dazu im Datenblatt zum Mega88 finden.

von Oliver (Gast)


Lesenswert?

Extra für dich hat Atmel auch was dazu geschrieben:

http://www.atmel.com/dyn/resources/prod_documents/doc2553.pdf

Oliver

von Andreas L. (andreasl)


Lesenswert?

das kauf ich dir ab!!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.