www.mikrocontroller.net

Forum: Compiler & IDEs Syntaxfehler bei Bitoperationen


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?
int main(void)
{
  //Port D initialisieren
  DDRD=0b01001111;  //Pins 4-7 sind Ausgänge für LCD
            //PINS 2-3 sind Taster mit INT0, INT1
            //Pins 0-1 sind UART RX und TX
  //PORT B initialisieren
  DDRB=0b00000111;  //Pins 0-2 sind Ausgäne LED , LCD_EN, LCD_RS

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

    

  while (1)      //never stop doing this
    {
    }
  return 1;
}

Danke

Autor: kosmonaut_pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian (Gast)
Datum:

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


//Definitionen

//Makros und Gedankenstützen

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


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

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



//Variablen

//Funtionsprototypen
//void LCD__init(void);

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

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

    

  while (1)      //never stop doing this
    {
    }
  return 1;
}


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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
//LCD
#define LCD_DATA_PORT = PORTD       //LCD Data Pins are PORTD 4-7 in 4 bite mode
#define LCD_CONTROL_PORT= PORTB      // Controlled by RS-PB2 und EN-PB1
#define LCD_RS=PINB2
#define LCD_EN=PINB1
//Status and Test LED
#define LED=PINB0

Lass das "=" weg !!!

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

Gruß,
Magnetus

Autor: kosmonaut_pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
du hast da anscheinend vor lauter verzweiflung alles zusammengehauen, 
was so geht.
#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:
#include <avr/io.h> //Ports und Register

//Status and Test LED
#define LED PINB0

//Main Programm
int main(void)
{
  //Port D initialisieren
  DDRD=0x4F;
  //PORT B initialisieren
  DDRB=0x07;

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

    

  while (1){
    //never stop doing this
  }
  return 1;
}
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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian wrote:
> Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden!

Wieso nicht UL?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> hab mich über die slahses/backslashes gewundert.

Alle unterstützten Betriebssysteme können Vorwärtsstriche benutzen,
damit ist man also portabel.

> Ausserdem,
> gcc 1.004 muß schon verdammt alt sein :-)

Stimmt, die älteste Versionsnummer, an die ich mich erinnern kann, war
die 1.37.  Das war ca. 1992.  Da gab's noch keine AVRs. ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.