#define ports

Gast #2973749
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
#2973773
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.
Gast #2973802
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
#4372868
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
#4372904
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
(Firma: matzetronics) #4372983
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?
#4373070
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ß

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