Defines für Port / Pins

Gast #2178645
Lesenswert?

Guten Morgen zusammen,

ich bin momentan meinen Code am durchwühlen - und da ist mir eine Stelle 
im Code aufgefallen der einfach nicht schön aussieht.

Kurz zum Aufbau ich habe einen Pin am Controller der einen Status 
einliesst, ist der Pin HIGH ist alles OK wenn er LOW ist liegt eine 
störung vor. Da zu gibt es eine DUO LED (grün/rot) an einem Ausgang für 
alles OK/Störung


in meinem Code sieht es dann so aus:
1
if(PIN_IN & (1<<Status_Temperatur))   {PORT_LED   |=   (1<<LED_Status);}
2
        else    {PORT_LED  &=  ~(1<<LED_Status);}


und die Header
1
#define Status_Temperatur      PF0    //
2
#define LED_Status      PE0    //LED /

so kann ich es nun elegant lösen das das PIN_IN und PORT_LED aus dem 
Code rausfliegt?

zb Beispiel das es einfach heisst
if(Status_Temperatur) LED_Status=1;
else LED_Status=0;

schematisch geschrieben.

wisst ihr was ich meine ? ansonsten muss ich es vieleicht noch anders 
erklären

gruß
x5
Gast #2178808
Lesenswert?

x5 schrieb:
> so kann ich es nun elegant lösen das das PIN_IN und PORT_LED aus dem
> Code rausfliegt?

Man kann Peters Lösung verwenden, oder einfach akzeptieren, daß 
Bitbehandlung in Standard-C diese Befehle braucht. Nach einer Weile sind 
die dann gar nicht mehr unelegant.

Oliver
#2179490
Lesenswert?

x5 schrieb:

> so kann ich es nun elegant lösen das das PIN_IN und PORT_LED aus dem
> Code rausfliegt?
>
> zb Beispiel das es einfach heisst
> if(Status_Temperatur) LED_Status=1;
> else LED_Status=0;
>

In C gibt es für soetwas ein höchst lesbares, flexibles und sehr gut 
wartbares Feature, nämlich Funktionen:
1
bool Status_Temperatur(void)
2
{
3
    return ! (PIN_IN & (1<<STATUS_TEMPERATUR));
4
}
5

6
void LED_Status(uint8_t on)
7
{
8
    if (on)
9
        PORT_LED  |=  (1<<LED_STATUS);
10
    else
11
        PORT_LED  &=  ~(1<<LED_STATUS);
12
}
13

14
if(Status_Temperatur())
15
    LED_Status(1);
16
else
17
    LED_Status(0);

Nachtrag: Abstrakte Business-Logik und Implementierungsdetails (wie 
Bitschubsen) gehören IMO nicht zusammen in eine Zeile.

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