Forum: Mikrocontroller und Digitale Elektronik zwei Pins vom Mikrocontroller im define


von Mark (Gast)


Lesenswert?

Hi,
ich habe einen dspic30f4011. ich möchte gerne, dass wenn ich eine 
Variable aufrufe, der entsprechende Pin auf High geht.

Für einen Pin habe ich es so gemacht
1
...
2
#define Power LATDbits.LATD3
3
...
4
...
5
Power = 1;
6
...
7
Power = 0;
8
...

Jetzt möchte ich beim Aufruf aber nicht nur einen Pin auf High/Low 
schalten, sondern zwei. Aber wie bekomme ich zwei Pins in einem define 
rein?

Oder gibt es da eine andere Methode zu?

von DirkF (Gast)


Lesenswert?

So


...
#define Power LATDbits.LATD3; LATDbits.LATD4
...
...
Power = 1;
...
Power = 0;
...

von DirkF (Gast)


Lesenswert?

Sorry, war falsch.
So sollte es gehen:


...
#define Power_on LATDbits.LATD3=1; LATDbits.LATD4=1;
#define Power_off LATDbits.LATD3=0; LATDbits.LATD4=0;
...
...
Power_on
...
Power_off
...

von Mark (Gast)


Lesenswert?

ah,
so hätte ich nicht gedacht. aber Perfekt.

Danke

von N. G. (newgeneration) Benutzerseite


Lesenswert?

DirkF schrieb:
> #define Power_on LATDbits.LATD3=1; LATDbits.LATD4=1;
> #define Power_off LATDbits.LATD3=0; LATDbits.LATD4=0;

schlecht, weil:
1
//...
2
if(x) 
3
   Power_on;
4
5
//wird umgesetzt zu:
6
7
if(x)
8
    LATDbits.LATD3=1;
9
LATDbits.LATD4=1;
ich habs extra so eingerückt dass man den Fehler sieht.

Besser:
1
#define Power_on do{LATDbits.LATD3=1; LATDbits.LATD4=1;}while(0)
2
#define Power_off do{LATDbits.LATD3=0; LATDbits.LATD4=0;}while(0)

von H.Joachim S. (crazyhorse)


Lesenswert?

#define Power_on {LATDbits.LATD3=1; LATDbits.LATD4=1;}

sollte reichen, oder?

von Karl H. (kbuchegg)


Lesenswert?

H.Joachim S. schrieb:
> #define Power_on {LATDbits.LATD3=1; LATDbits.LATD4=1;}
>
> sollte reichen, oder?

Nein.
1
  if( irgendwas )
2
    Power_on;
3
  else
4
    ...
1
unmatched else

der ; ist in diesem Fall dann im Weg.
Man könnte ihn natürlich weg machen
1
  if( irgendwas )
2
    Power_on
3
  else
4
    ...
aber das sieht dann reichlich seltsam aus.

von Thomas E. (thomase)


Lesenswert?

H.Joachim S. schrieb:
> sollte reichen, oder?
Nein.

Steht doch schon oben, wie es richtig ist:

N. G. schrieb:
> Besser:
1
#define Power_on do{LATDbits.LATD3=1; LATDbits.LATD4=1;}while(0)
2
#define Power_off do{LATDbits.LATD3=0; LATDbits.LATD4=0;}while(0)

mfg.

von Dirk F (Gast)


Lesenswert?

Noch besser ist es, das in eine Funktion zu packen.
Spart Programmspeicher bei häufigen Aufrufen.


void Power (unsigend char switch)
   {
   LATDbits.LATD3=switch;
   LATDbits.LATD4=switch;
   }


Power (1);  // zum Einschlten
Power (0);  // zum Ausschlten

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.