Forum: Mikrocontroller und Digitale Elektronik Portbezeichnung umdefinieren in C


von pacer (Gast)


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:
1
 #define  LCD_DataDDR   = DDRB
2
 #define  LCD_SteuerDDR  = DDRC  
3
 #define  E  =  PC3
4
 #define  RW  =  PD6  
5
 #define  RS  =  PC2  
6
7
int main (void) 
8
{            
9
// Ports auf Ausgang 
10
   LCD_DataDDR   = 0x0f;  
11
   LCD_SteuerDDR = (1<<E)|(1<<RS);
12
13
   return 0;                 
14
}

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

kann mir jemand helfen?

Gruß, pacer

von guest (Gast)


Lesenswert?

lass mal die leerzeichen weg

von guest (Gast)


Lesenswert?

ähh ich meine natürlich die "=" zeichen....

von avr (Gast)


Lesenswert?

define ohne =
1
 #define  LCD_DataDDR     DDRB
2
 #define  LCD_SteuerDDR    DDRC  
3
 #define  E     PC3
4
 #define  RW     PD6  
5
 #define  RS     PC2

so sollte es laufen

avr

von pacer (Gast)


Lesenswert?

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

von pacer (Gast)


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.

1
#define F_CPU 8000000
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
7
//------------------------------------------------------
8
//   Definition der Steuerleitungen
9
//------------------------------------------------------
10
 #define  LCD_DataPort  PortB    // Datenleitungen - LCD beschreiben
11
 #define  LCD_DataDDR    DDRB      // Datenrichtungsregister für Datenleitung
12
 #define  LCD_DataPIN   PinB      // Datenleitungen - LCD lesen
13
14
 #define  LCD_SteuerPort PortC
15
 #define  LCD_SteuerDDR  DDRC    // Datenrichtungsregister für Datenleitung
16
17
18
 #define  E    PC3        // 1=Freigabe Befehl/Daten
19
 #define  RW    PD6        // 1=read          0=write
20
 #define  RS    PC2        // 1=Daten R/W       0=Befehl R/W
21
22
extern EnableHold()          // inline Assembler
23
{
24
    asm volatile ("nop");
25
    asm volatile ("nop");
26
    asm volatile ("nop");
27
  asm volatile ("nop");
28
}
29
30
int main (void) 
31
{            
32
// Ports auf Ausgang 
33
   LCD_DataDDR   = 0x0f;  
34
   LCD_SteuerDDR = (1<<E)|(1<<RS);
35
   
36
// Wait power up
37
   _delay_ms (12);
38
39
   LCD_SteuerPort &= ~(1 << RS);   // RS=0 --> Register Select auf Befehl  (defaultwert) 
40
   LCD_SteuerPort &= ~(1 << RW);   // RW=0 --> Schreiben          (defaultwert)
41
   LCD_SteuerPort &= ~(1 << E);   // E=0  --> Enable off          (defaultwert)
42
43
44
  for (;;) {}                  // loop forever 
45
   return 0;                 
46
}

Was ist noch falsch?

Gruß, pacer

von µC (Gast)


Lesenswert?

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

von Magnetus (Gast)


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.!

von pacer (Gast)


Lesenswert?

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

von pacer (Gast)


Lesenswert?

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

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.