mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Port zuweisen in C


Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe eine kleine Schaltung mit einem PIC aufgebaut und ein Programm
mit C für mikroC geschrieben.

Ich weise gewisse Variablen über ein Define einen gewissen Port zu:

#define A1 PORTB.F3      /* Ausgang 1 */
#define A2 PORTB.F2      /* Ausgang 2 */
#define A3 PORTB.F1      /* Ausgang 3 */
#define A4 PORTB.F0      /* Ausgang 4 */

So jetzt zu meinem Problem:
Ich möchte gerne diese Zuweisung im Laufe des Programms in Abhängigkeit
von einem merker ändern
also z.B.:

if (merker == 1)
#define A1 PORTB.F3      /* Ausgang 1 */
#define A2 PORTB.F2      /* Ausgang 2 */
#define A3 PORTB.F1      /* Ausgang 3 */
#define A4 PORTB.F0      /* Ausgang 4 */

if (merker == 2)
#define A4 PORTB.F3      /* Ausgang 1 */
#define A3 PORTB.F2      /* Ausgang 2 */
#define A2 PORTB.F1      /* Ausgang 3 */
#define A1 PORTB.F0      /* Ausgang 4 */

dies muss natürlich immer wieder während des Programmes gehen.

Wisst Ihr wie ich soetwas hinbekomme?

MFG

Jürgen

Autor: Fritz Sonnhuber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Define sind doch Preprozessoranweisungen, die können ja doch nur am
Beginn stehen und nicht irgendwo im Programm AFAIK

"normale Variable" verwenden und diese dann im Programm umschalten
mit switch, die entsprechenden Ausgänge je nach Zustand der Variable
beschalten

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jürgen:

Die Defines sind Preprozessor-Definitionen und lenken nur den
Kompiliervorgang.

Während der Programmlaufzeit geht eine Auswertung nur per Software,
d.h. mit if-elseif-Blöcken oder switch-case, in dem du die Variable
"merker" auswertest und davon abhängig den gewünschten Port
ansteuerst.

Mir scheint dein Vorhaben etwas suspekt. Du versuchst doch nicht etwa,
Anweisungslisten für SPS mit Programmiersprachen zu vermischen?

Gruß :-)

Dietmar

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Fritz:
Nur zur Info: #define-Direktiven können im Prinzip überall im Programm
stehen. Man kann im Prinzip ein Makro direkt vor seiner Verwendung
deklarieren.

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für Eure Antworten,

habe das ganze über Merkvariablen realisiert.
Dass denke ich ist die sauberste und wohl auch die einzigste Lösung.

@Dietmar: Nein ich versuche nicht Anweisungslisten für SPS mit
Programmiersprache zu vermischen!

Vielen Dank für Eure Hilfe.

Jürgen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.