AVR Studio - Fehler bei Zuweisung von Registern

#3957738
Lesenswert?

Hallo,

ich habe gerade ein kleines Programm geschrieben, das den Timer von 
meinem ATtiny13 benutzt, um eine LED blinken zu lassen(wollte mal sehen 
ob ich den Timer verstanden habe).
Folgender Code initialisiert den Timer:
1
12: TCCR0A |= (1 << WGM01);
2
13: TCCR0B |= (1 << CS01);
3
14:
4
15: OCR0A = 149;
5
16:
6
17: TIMSK0 |= (1 << OCIE0A);

Beim kompilieren erhalte ich folgende Fehler jeweils in Zeile 12, 13, 15 
und 17:

  - expected identifier or '(' before 'volatile'
  - expected ')' before '(' token

Andere Schreibweisen wie z.B.
1
TCCR0A = TCCR0A | (1 << WGM01);
helfen auch nicht, genauso wenig wie überall Klammern zu setzen...
Sonst meldet gibt es keine Fehler. Ich benutze übrigens AVR Studio 6.
Irgendeine Idee was da los ist ?

Gruß
#3957748
Lesenswert?

also mit Atmel Studio 6.2 ( -mmcu=attiny13) kann man folgenden Code 
compilieren:
1
#include <avr/io.h>
2

3
int main (void)
4
{
5

6

7
 TCCR0A |= (1 << WGM01);
8
 TCCR0B |= (1 << CS01);
9

10
 OCR0A = 149;
11

12
 TIMSK0 |= (1 << OCIE0A);
13

14
}
Vermutlich verwendest du noch eine sehr alte Version von AVR Stdio bzw. 
einen veralteten Compiler, welcher den Tiny nicht unterstützt. Oder aber 
du hast die avr/io.h nicht included, oder du hast mmcu nicht richtig 
angegeben oder du enthältst uns code vor.
#3957758
Lesenswert?

Ich habe AVR Studio 6.0.1843, werd ich gleich mal updaten.
Zum vorenthaltenen Code:
1
#define F_CPU 1200000UL
2

3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5

6
uint_t16 z = 1;
7

8

9
TCCR0A |= (1 << WGM01);
10
TCCR0B |= (1 << CS01);
11

12
OCR0A = 149;
13

14
TIMSK0 |= (1 << OCIE0A);
15

16
ISR(TIM0_COMPA_vect)
17
{
18
  if(z == 1000)
19
  {
20
    DDRB ^= (1<<PB3);
21
    z = 1;
22
  }else{z++;}
23
  
24
}
25

26
int main(void)
27
{
28
  
29
  
30
  while(1)
31
  {
32
    
33
  }
34
}
Mal schauen obs mit der neuesten Version geht...
#3957765
Lesenswert?

Bruno W. schrieb:
> Ich habe AVR Studio 6.0.1843, werd ich gleich mal updaten.
> Zum vorenthaltenen Code:
>
1
> #define F_CPU 1200000UL
2
> 
3
> #include <avr/io.h>
4
> #include <avr/interrupt.h>
5
> 
6
> uint_t16 z = 1;
7
> 
8
> 
9
> TCCR0A |= (1 << WGM01);
10
> TCCR0B |= (1 << CS01);
11
> 
12
> OCR0A = 149;
13
> 
14
> TIMSK0 |= (1 << OCIE0A);
15
>


dacht ichs mir doch.

Davon, dass ausführbarer Code in C in einer Funktion stehen muss, hast 
du noch nie gehört?

Na ja. Jetzt weißt du wenigstens, dass dann seltsame und undurchsichtige 
Fehlermeldungen kommen, wenn der Compiler versucht, das Konglomerat als 
die Definition von Variablen aufzufassen und auf keinen grünen Zweig 
damit kommt.
1
#define F_CPU 1200000UL
2

3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5

6
uint16_t z = 1;
7

8
ISR(TIM0_COMPA_vect)
9
{
10
  if(z == 1000)
11
  {
12
    PORTB ^= (1<<PB3);
13
    z = 1;
14
  }
15
  else
16
  {
17
    z++;
18
  }
19
}
20

21
int main(void)
22
{
23
  DDRB |= (1<<PB3);
24
  
25
  TCCR0A |= (1 << WGM01);
26
  TCCR0B |= (1 << CS01);
27

28
  OCR0A = 149;
29

30
  TIMSK0 |= (1 << OCIE0A);
31
  
32
  sei();
33

34
  while(1)
35
  {
36
    
37
  }
38
}

PS: Die restlichen Fehler hab ich dir auch gleich noch korrigiert.
Lass erst mal Timer Timer sein und sieh zu, dass du die noch banaleren 
Grundlagen in den Griff kriegst. WIe zb. Portansteuerung.

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