Port zuweisen in C

Gast #332925
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
Gast #332926
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
Gast #332927
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
Gast #332929
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

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