mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Portbezeichnung umdefinieren in C


Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche gerade mein LCD-Programm von Assembler in C umzusetzen.
Nun weiß ich nicht genau wie man die Portnamen umdefiniert.
Ich habe es wie folgt probiert:
 #define  LCD_DataDDR   = DDRB
 #define  LCD_SteuerDDR  = DDRC  
 #define  E  =  PC3
 #define  RW  =  PD6  
 #define  RS  =  PC2  

int main (void) 
{            
// Ports auf Ausgang 
   LCD_DataDDR   = 0x0f;  
   LCD_SteuerDDR = (1<<E)|(1<<RS);

   return 0;                 
}

Leider bekomme ich folgende Fehlermeldung:
../Test.c:21: error: expected expression before '=' token

kann mir jemand helfen?

Gruß, pacer

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lass mal die leerzeichen weg

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ähh ich meine natürlich die "=" zeichen....

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
define ohne =
 #define  LCD_DataDDR     DDRB
 #define  LCD_SteuerDDR    DDRC  
 #define  E     PC3
 #define  RW     PD6  
 #define  RS     PC2  

so sollte es laufen

avr

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sieht etwas ungewöhnlich one '=' aus.
aber es funktioniert, vielen Dank

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich dachte eigentlich wäre alles okay, leider bekomme ich noch immer 
folgende Fehlermeldung:
../Test.c:55: error: 'PortC' undeclared (first use in this function)
In der avr/io.h müsste doch drinstehen was PortC ist? Zumal er ja PortC 
kennt.

#define F_CPU 8000000

#include <avr/io.h>
#include <util/delay.h>


//------------------------------------------------------
//   Definition der Steuerleitungen
//------------------------------------------------------
 #define  LCD_DataPort  PortB    // Datenleitungen - LCD beschreiben
 #define  LCD_DataDDR    DDRB      // Datenrichtungsregister für Datenleitung
 #define  LCD_DataPIN   PinB      // Datenleitungen - LCD lesen

 #define  LCD_SteuerPort PortC
 #define  LCD_SteuerDDR  DDRC    // Datenrichtungsregister für Datenleitung


 #define  E    PC3        // 1=Freigabe Befehl/Daten
 #define  RW    PD6        // 1=read          0=write
 #define  RS    PC2        // 1=Daten R/W       0=Befehl R/W

extern EnableHold()          // inline Assembler
{
    asm volatile ("nop");
    asm volatile ("nop");
    asm volatile ("nop");
  asm volatile ("nop");
}

int main (void) 
{            
// Ports auf Ausgang 
   LCD_DataDDR   = 0x0f;  
   LCD_SteuerDDR = (1<<E)|(1<<RS);
   
// Wait power up
   _delay_ms (12);

   LCD_SteuerPort &= ~(1 << RS);   // RS=0 --> Register Select auf Befehl  (defaultwert) 
   LCD_SteuerPort &= ~(1 << RW);   // RW=0 --> Schreiben          (defaultwert)
   LCD_SteuerPort &= ~(1 << E);   // E=0  --> Enable off          (defaultwert)


  for (;;) {}                  // loop forever 
   return 0;                 
}

Was ist noch falsch?

Gruß, pacer

Autor: µC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hast du denn für einen µC? Evtl. gibt es ja gar keinen PortC. Schau 
einfach mal ins Datenblatt

Autor: Magnetus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pacer schrieb:
> ../Test.c:55: error: 'PortC' undeclared (first use in this function)
> In der avr/io.h müsste doch drinstehen was PortC ist? Zumal er ja PortC
> kennt.

Der Compiler achtet auch auf Groß-/Kleinschreibung. Verwende PORTC usw.!

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mega88, der hat einen.
Zumal ich gerade ein funktionierendes Assemblerprogramm versuche in C 
umzusetzen. Anfänger halt :-(

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Anke, das wars.
In Assembler muss ich mir um sowas keine Gedanken machen.
Aber kein Vorteil ohne Nachteil.

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.