Syntaxfehler bei Bitoperationen

Gast #633059
Lesenswert?

Hallo Leute,

bin neu hier und werde in Zukunft regelmäßig lesen und auch beitragen.

Habe grad ein Problem. Nutze AVR Studio 4.12 und Gcc 1.004
bei folgendem Code kommt Sytax error von token "=" in der Zeile mit 
PORTB &= ....
Weiß nicht weiter! Hat jemand nen Tip?
1
int main(void)
2
{
3
  //Port D initialisieren
4
  DDRD=0b01001111;  //Pins 4-7 sind Ausgänge für LCD
5
            //PINS 2-3 sind Taster mit INT0, INT1
6
            //Pins 0-1 sind UART RX und TX
7
  //PORT B initialisieren
8
  DDRB=0b00000111;  //Pins 0-2 sind Ausgäne LED , LCD_EN, LCD_RS
9

10
  //Status LED on
11
    PORTB &= ~(1<<LED);
12

13
    
14

15
  while (1)      //never stop doing this
16
    {
17
    }
18
  return 1;
19
}

Danke
Gast #633070
Lesenswert?

hallo,
der syntax-error besteht vermutlich darin, dass der scanner/der 
gcc/niemand_ausser_dir weiß, was 'LED' bedeutet. die syntax ist sonst in 
ordnung. voraussetzen tue ich noch, dass du avr/io.h includieren tust.
bye kosmo
Gast #633071
Lesenswert?

Wenn das das vollständige Programm ist, fehlen da ein paar wichtige 
includes, und LED kennt er auch nicht.
Daher, besser vollständige Programme posten oder anhängen. Ausserdem, 
gcc 1.004 muß schon verdammt alt sein :-)
Oliver
Gast #633115
Lesenswert?

1
#define __AVR_ATmega8__
2
#ifndef F_CPU //wenn nicht schon definiert im AVR Studio
3
  #define F_CPU 16000000L    // Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden!
4
#endif
5
//Libraries
6
#include <avr\io.h> //Ports und Register
7
#include <stdint.h> //Data Types Standart Integer  
8
/*  
9
* int8_t   - 8-Bit Integer mit einem Wertebereich -127 bis 128.
10
* uint8_t  - 8-Bit Integer ohne Vorzeichen (unsigned int) mit einem Wertebereich von 0 bis 255 
11
* int16_t  - 16-Bit Integer mit einem Wertebereich -32767 bis 32768.
12
* uint16_t - 16-Bit Integer ohne Vorzeichen (unsigned int) mit einem Wertebereich von 0 bis 65536. 
13
*/
14
#include <avr/interrupt.h>  //Interupts
15
#include <util/delay.h>    //Delay Routines
16

17

18
//Definitionen
19

20
//Makros und Gedankenstützen
21

22
//Bit Toggeln PORTB ^= (1<<PB0);    /* Ex-OR */
23
//PORTA |= (1 << MEINBIT);    /* setzt Bit 2 an PortA auf 1 */
24
//PORTA &= ~(1 << MEINBIT);   /* loescht Bit 2 an PortA */
25
//PORTB |= ((1 << MEINBIT0) | (1 << MEINBIT2)); // setzt Bit 0 und 2 in PORTB auf "1" 
26
//PORTB &= ~((1 << MEINBIT0) | (1 << MEINBIT2)); // löscht Bit 0 und 2 in PORTB 
27

28

29
//USART Baudrate 
30
#define BAUD 9600L          // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden!
31
 
32
// Berechnungen
33
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
34
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
35
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille 
36
 
37
#if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))
38
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
39
#endif
40

41
//LCD
42
#define LCD_DATA_PORT = PORTD       //LCD Data Pins are PORTD 4-7 in 4 bite mode
43
#define LCD_CONTROL_PORT= PORTB      // Controlled by RS-PB2 und EN-PB1
44
#define LCD_RS=PINB2
45
#define LCD_EN=PINB1
46
//Status and Test LED
47
#define LED=PINB0
48

49

50

51
//Variablen
52

53
//Funtionsprototypen
54
//void LCD__init(void);
55

56
//Main Programm
57
int main(void)
58
{
59
  //Port D initialisieren
60
  DDRD=0b01001111;  //Pins 4-7 sind Ausgänge für LCD
61
            //PINS 2-3 sind Taster mit INT0, INT1
62
            //Pins 0-1 sind UART RX und TX
63
  //PORT B initialisieren
64
  DDRB=0b00000111;  //Pins 0-2 sind Ausgäne LED , LCD_EN, LCD_RS
65

66
  //Status LED on
67
    PORTB &= ~(1<<LED);
68

69
    
70

71
  while (1)      //never stop doing this
72
    {
73
    }
74
  return 1;
75
}

Die defines sind nicht schuld daran. Weiß echt nicht mehr weiter. 
Irgendwie kennt der das &= ~(1<<BIT) nicht?!?
Gast #633121
Lesenswert?

1
//LCD
2
#define LCD_DATA_PORT = PORTD       //LCD Data Pins are PORTD 4-7 in 4 bite mode
3
#define LCD_CONTROL_PORT= PORTB      // Controlled by RS-PB2 und EN-PB1
4
#define LCD_RS=PINB2
5
#define LCD_EN=PINB1
6
//Status and Test LED
7
#define LED=PINB0

Lass das "=" weg !!!

Es muss eher so aussehen:
1
//LCD
2
#define LCD_DATA_PORT     PORTD      //LCD Data Pins are PORTD 4-7 in 4 bite mode
3
#define LCD_CONTROL_PORT  PORTB      // Controlled by RS-PB2 und EN-PB1
4
#define LCD_RS            PINB2
5
#define LCD_EN            PINB1
6
//Status and Test LED
7
#define LED               PINB0

Gruß,
Magnetus
Gast #633122
Lesenswert?

hallo,
du hast da anscheinend vor lauter verzweiflung alles zusammengehauen, 
was so geht.
1
#define __AVR_ATmega8__

niemals. das legt der compiler fest.
abgesehen von einer ausnahme, brauchst du die sämtliche andere includes 
zunächst nicht. also warum zusätzliche fehlerquellen einbauen?

dein programm in kurzform:
1
#include <avr/io.h> //Ports und Register
2

3
//Status and Test LED
4
#define LED PINB0
5

6
//Main Programm
7
int main(void)
8
{
9
  //Port D initialisieren
10
  DDRD=0x4F;
11
  //PORT B initialisieren
12
  DDRB=0x07;
13

14
  //Status LED on
15
  PORTB &= ~(1<<LED);
16

17
    
18

19
  while (1){
20
    //never stop doing this
21
  }
22
  return 1;
23
}
hab mich über die slahses/backslashes gewundert. wenn überhaupt, dann 
sicherlich einheitlich. da ich kein windows verwende, kann ich dir aber 
nicht sagen, welches von beiden nun richtig ist. aber mit backslash habe 
ich zumindest noch nicht gesehen.

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