definieren von Portpins mit #define

Gast #2990995
Lesenswert?

Es geht darum später in der while schleife mit diesen  neuen Ausdrücken 
anstatt PINA0 PINA1 PINA2.. zu arbeiten

#define LaserA_Input PINA0
#define Messergebnis PORTB0


Also
statt
...
while
{
if (PINA0 ==1)
PORTB0 ==1;
}


will ich schreiben

while
{
if (LaserA_Input== 1)
Messergebnis ==1;
}
#2991056
Lesenswert?

Definiere Dir lieber Inline-Funktionen mit klaren Namen, das ist 
lesbarer und auf jeden Mikrocontroller portabel:
1
static inline bool laser_is_on(void) {
2
  return PINB & (1 << PINB0);
3
}
4

5
static inline void set_result_pin(void) {
6
  PORTA |= (1 << PA0);
7
}
8

9
static inline void clear_result_pin(void) {
10
  PORTA &= ~(1 << PA0);
11
}
12

13
[...]
14

15
if (laser_is_on()) {
16
  set_result_pin();
17
}
#2991281
Lesenswert?

Man kann es auch mit einem einfachen #define machen, etwa so
1
#define LASER_ON (PIND & (1<<PD4))    // #defines immer GROSS
2
#define RELAY_ON (PORTD |= (1<<PD3));
3
#define RELAY_OFF (PORTD &= ~(1<<PD3));
4

5
if (LASER_ON) {
6
  RELAY_ON
7
} else {
8
  RELAY_OFF
9
}

Einfach lesbar und selbsterklärend. Und wenn sich mal die Pinzuordung 
ändert, muss man nur EINMAL die defines ändern, der Rest vom Quelltext 
bleibt wie er ist.
Gast #2991296
Lesenswert?

Ich kann Falk Brunner nur zustimmen!

Irgendwann steigt man auf einen anderen Controller um.
Dann kann man den Code problemlos übernehmen und muss nur ein paar 
#defines ändern.

Ich hatte es so gemacht, der Umzug einer GLCD Ansteuerung dauerte nur 2 
Stunden.

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