Forum: Mikrocontroller und Digitale Elektronik #define ports


von jossen (Gast)


Lesenswert?

Hallo zusammen,

Ich brauche einen kleinen Lehrgang.

#define LCD_DATA_PIN   PINC
#define LCD_DATA_PORT  PORTC
#define LCD_DATA_DDR   DDRC

#define CD   0x07
#define RW   0x06
#define EN   0x02
#define CS1  0x05
#define CS2  0x04
#define RES  0x03

CD, RW, EN,... hat einen Pin. Quasi 0x01 = 0b00000001 = PC0
Was stelle ich mir da jetzt unter   0x07 = 0b00000111 = PC???
vor.?

Kann mir das einer erklären.? :)


Danke
MfG

von troll (Gast)


Lesenswert?

Wo kommt der Kram den her?

von jossen (Gast)


Lesenswert?

0x01 PC0
0x02 PC1
0x03 PC2
0x04 PC3
0x05 PC4
0x06 PC5
0x07 PC6


oder wie

von jossen (Gast)


Lesenswert?

pin defines von einer ks0108 ansteuerung

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Das sieht nach den Definition für Schiebeoperationen aus, wie z.B.
1
LCD_CONTROL_PORT = (1 << CD) | (1 << EN);

von Karl H. (kbuchegg)


Lesenswert?

jossen schrieb:
> pin defines von einer ks0108 ansteuerung

Du musst dir ansehen, wie diese Makros verwendet werden.
Das bestimmt, 'was du dir darunter vorstellen musst'.

#defines sind wie Textersetzungen in deinem Editor. Nur automatisiert. 
Wenn im Suchen&Ersetzen Dialog der Text 'der' gegen den Text 'das' 
ausgetauscht wird, dann hängt es vom Text ab, auf den du die Ersetzung 
loslässt, was da der tiefere Sinn dahinter ist.

von alex (Gast)


Lesenswert?

Liest sich manchmal auch jemand die gestellte Frage richtig durch???

#define CD   0x07
#define RW   0x06
#define EN   0x02
#define CS1  0x05
#define CS2  0x04
#define RES  0x03

sind die Zuweisungen zu den PINs am µC.

würd ich persönlich so machen:

#define CD   PC0 bwz. 0
#define RW   PC1 bzw. 1
#define EN   PC2 ...
#define CS1  PC3 ...
#define CS2  PC4 ...
#define RES  PC5 bzw. 5

lg

von alex (Gast)


Lesenswert?

@troll

aus der codesammlung...

von Rafael S. (rafi)


Lesenswert?

Hallo,
ich habe auch eine Frage zu der #define "Geschichte".... :)

Folgendes:
..ich gebe den Ausgängen des Ports C Namen =>

#define LED0_ON PORTC |= (1<<PC0);
#define LED0_OFF PORTC &= ~(1<<PC0);
#define LED1_ON PORTC |= (1<<PC1);
#define LED1_OFF PORTC &= ~(1<<PC1);
#define LED2_ON PORTC |= (1<<PC2);
#define LED2_OFF PORTC &= ~(1<<PC2);
#define LED3_ON PORTC |= (1<<PC3);
#define LED3_OFF PORTC &= ~(1<<PC3);
#define LED4_ON PORTC |= (1<<PC4);
#define LED4_OFF PORTC &= ~(1<<PC4);

Somit verwende ich im Programm nur das LED1_ON zB.

Frage : wie mache ich es mit den Eingängen, an den Taster sind.

Habs so versucht, bekomme jedoch den Fehler "expected ")" before ";" 
token.

#define taster1 PIND & (1<<PD2);
#define taster2 PIND & (1<<PD3);


Gruß
Rafael

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Rafael S. schrieb:
> #define taster1 PIND & (1<<PD2);
> #define taster2 PIND & (1<<PD3);

Das Semikolon ist dann Teil des #define - sicher nicht das, was du 
beabsichtigst. Es wäre vermutlich auch sinnvoll, den 'PIND & (1<<PD2)' 
Teil noch in Klammern zu schreiben.

: Bearbeitet durch User
von Rafael S. (rafi)


Lesenswert?

Hallo,
das habe ich soeben ausprobiert...
Was ich festgestellt habe ist, dass dieses Problem mit der Abfrage des 
Tasgers1 in der If Anweisung zu tun hat. Denn wenn ich die Abfrage in 
der If- Anweisung weg lasse bzw mit if (!(PIND&(1<<PD2))) mache dann 
kommt die Fehlermeldung nicht.

Wie müsste ich den Taster1 abfragen??

....wenn "taster1" betätigt, dann....

if ( !taster1)
{....}

oder

if (!(taster1))
{...}


Habe beides ausprobiert.. leider kommt dann immer die Fehlermeldung 
"expected ")" before ";"

Gruß
Rafael

von Klaus (Gast)


Lesenswert?

Das ist Dir bereits von Matze beantwortet worden.

Alles nähere findest Du in einem C-Buch erklärt.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Rafael S. schrieb:
> Denn wenn ich die Abfrage in
> der If- Anweisung weg lasse bzw mit if (!(PIND&(1<<PD2))) mache dann
> kommt die Fehlermeldung nicht.

Ja, da steht eben auch kein Semikolon drin. Stell dir einfach vor, das 
das #define dir im jetzigen Zustand folgendes in den Code schreibt:
1
#define taster1 PIND & (1<<PD2);
2
3
// aus if ( !taster1) wird dann:
4
if (!PIND & (1<<PD2););
und das ist eben Blödsinn. Funktionieren wird also eher
1
#define taster1 (PIND & (1<<PD2))
2
// so wird aus if ( !taster1)
3
if (!(PIND & (1<<PD2)) {
4
// do stuff 
5
}
Jetzt klarer?

von Rafael S. (rafi)


Lesenswert?

Hallo Matthias,

jetzt ist es super klar!! :)


Matthias S. schrieb:

> Das Semikolon ist dann Teil des #define

Diese Aussage hat mich ein wenig auf den falschen Gedankenpfad 
geschickt! Ich dachte mir, na klar ist das Semikolon ein Teil des 
"#define". Steht doch am Ende jeder Zeile.. aber dass das Semikolon ein 
Teil des "Namen", hier "taster1" ist, habe ich ausgeblendet! :(

Sorry!!

Das Erlernen des C- programmierens ist nicht einfach... gebe mir Mühe 
:-)

Und tausend Dank für die ausführliche Erläuterung!! :)

Gruß

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.