Eingangspegel ungleich Ausgang

Gast #2207985
Lesenswert?
• ▲
▼
Manfred W. schrieb:
> Finde ich irgendwie unhübsch. Hätte das gerne in einer Zeile gelöst.
Wenn man direkt auf die Pins zugreifen kann ist es einfach. Einige 
PIC-Compiler können das oder man nutzt eine kunstvolle Konstruktion mit 
struct/enum à la Dannegger. Ansonsten halt eine Zeile kunstvolles 
Kauderwelsch oder eine if-Abfrage, dann sinds halt zwei Zeilen und 
fertig.
Gast #2207992
Lesenswert?
• ▲
▼
Manfred W. schrieb:
> Man bräuchte ja nur den Zustand vom Eingang an den Ausgang übertragen.
Dann übertrag mal schön.

Sorry, was soll man auf solch einen Satz antworten? Zum driten Mal: Es 
geht, aber wenn es nur kosmetische Gründe hat ist das if deutlich 
besser. Packs halt in ein Präprozessormakro und verstecks irgendwo oder 
was weiß ich.
Persönliche Seite #2208400
Lesenswert?
• ▲
▼
Manfred W. schrieb:
> Also wenn Eingang PINC3 = 1 dann Ausgang PIND4 = 0 und umgekehrt. Also
> immer das Gegenteil.

Manfred W. schrieb:
> weil ich dann 2 Abfragen machen müßte. Für jeden Zustand eine. Finde ich
> irgendwie unhübsch. Hätte das gerne in einer Zeile gelöst.


(PINC & (1<<3)) ? (PORTD &= ~(1<<4)) : (PORTD |= (1<<4))


...sollte funktionieren (ist mein erster Versuch mit dem 
Bedingungsoperator "?")

Gruß,
Magnetus
Persönliche Seite #2210086
Lesenswert?
• ▲
▼
abc schrieb:
> Magnus Müller schrieb:
>> (PINC & (1<<3)) ? (PORTD &= ~(1<<4)) : (PORTD |= (1<<4))
>
> Interessant. Der ?-Operator fiel mir auch direkt ein, aber mit PORTD =
> ()?():() wird das nichts. Deine Methode hingegen dürfte funktionieren.

Von "PORTD =" hab ich ja auch nix geschrieben.

Ich meinte das so:
1
while (1)
2
{
3
  (PINC & (1<<3)) ? (PORTD &= ~(1<<4)) : (PORTD |= (1<<4));
4
}

Ist von mir mittlerweise getestet worden. Funzt einwandfrei.
Gast #2211020
Lesenswert?
• ▲
▼
Magnus Müller schrieb:
> Ist von mir mittlerweise getestet worden. Funzt einwandfrei.
Das Gegenteil habe ich auch nicht behauptet. :-) Hab mich oben etwas 
unklar ausgedrückt, "PORTD = ... ()?():()" war meine erste Idee.

H.joachim Seifert schrieb:
> PIND.4=!PINC.3;
>
> Finde ich persönlich am schönsten.
> Leider nicht C-konform, und die meisten Compiler unterstützen das nicht.
Man kann sich da wohl mit einem speziellen ähhh "Konstrukt" behelfen was 
sich irgendwo im Forum findet, ich meine es kommt vom Herrn Dannegger. 
Ist allerdings nicht unbedingt anfängerkompatibel weil nicht ganz 
einfach zu durchschauen (aber ein tolles Beispiel für fortgeschrittene 
C-Konstrukte)...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.