Forum: Mikrocontroller und Digitale Elektronik Einer Char-Variablen Ausgänge zuweisen


von ich (Gast)


Lesenswert?

Hallo zusammen.
Ich programmiere seit einer gewissen Zeit C für PICs. Jetzt hab ich an 
einem "Problem", wozu ich eine Frage hätte. Und zwar hab ich einen PIC, 
der 21 IOs hat (18F2550). Der PORTA hat 6 bit, PORTB hat 8bit und PORTC 
hat 7 bit. Ich bekomme über I²C eine 8bit-Zahl, die ich dann Ausgeben 
möchte. Idealerweise hätte ich die Zahl genommen und direkt auf PORTB 
geschrieben. Doch da 2 bits vom PORTB für das I²C-Modul gebraucht werden 
(RB0&RB1), habe ich somit keinen freien 8-bit-PORT. Jetzt hab ich mir 
überlegt, ich nehme RC6 statt RB0 und RC7 statt RB1, dann RB2-RB7 für 
den Rest. Wenn ich jetzt aber die 8bit Zahl in einem Buffer habe, müsste 
ich die ersten beiden Maskieren, verschieben und nach PORTC schreiben 
und dann nochmal die Zahl zu PORTB schreiben.
Da kam mir folgender gedanke: Kann man einer char-Variablen Ausgänge 
zuweisen? So dass ich zum Beispiel die Zahl in die Variable 
"port_ersatz" schreibe und der Compiler dann weiß, welche Pins/IOs er 
setzen bzw. löschen muss?
Zum Beispiel:
1
char port_ersatz;
2
// definiere port_ersatz.0 als PORTC.6
3
// definiere port_ersatz.1 als PORTC.7
4
// definiere port_ersatz.2 als PORTB.2
5
// definiere port_ersatz.3 als PORTB.3
6
// definiere port_ersatz.4 als PORTB.4
7
// definiere port_ersatz.5 als PORTB.5
8
// definiere port_ersatz.6 als PORTB.6
9
// definiere port_ersatz.7 als PORTB.7
10
11
port_ersatz = 0xAA;

Ich hoffe es ist klar geworden, was ich meine.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nein, so geht das nicht. Du musst schon getrennt den Ports die für sie 
relevanten Werte zuweisen, bei Deiner Bit-Anordnung also:

PORTC = (Wert & 0x03) << 6;
PORTB = (Wert & 0xFC);

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.