Forum: Mikrocontroller und Digitale Elektronik Port zuweisen in C


von Jürgen (Gast)


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

von Fritz Sonnhuber (Gast)


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

von Dietmar (Gast)


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

von johnny.m (Gast)


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.

von Jürgen (Gast)


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

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.