Forum: Mikrocontroller und Digitale Elektronik msp430, 8 bit bus aufteilen


von Dete K. (dete)


Lesenswert?

Guten Abend zusammen,

an einem msp430 ist ein 8 bit breiter Bus angeschloßen.
Im µC gibt es eine Funktion die den Bus mit Daten versorgen soll.
die Funktion gibt ein Char zurück.


der Bus ist an den ports:

d7    d6    d5    d4    d3    d2    d1    do
P1.7  P1.6  P1.5  P1.4  P1.3  P3.1  P3.3  P3.2

angeschloßen.

jetzt zum Problem:

Wäre der Bus z.B. an den Ports: P1.7 ... P1.0 angeschloßen, könnte ich 
den Char mittels:

char C
P1OUT=C;

so an den bus (und die Ports) übergeben.

Aber wie "splitte" ich den Char auf, um die richtigen Ports (siehe oben) 
anzusteuern?
wahlweise kann ich die Funktion auch ein Int zurückgeben.

vielen Dank im voraus

von Tobias K. (kurzschluss81)


Lesenswert?

über eine extra Funktion in der du rein schreibst welche pins er 
ansprechen soll wenn du ihm deine Daten übergibtst.
Ein fertige Funktion gibt es für sowas nich das must du schon selber 
machen

von Dete K. (dete)


Lesenswert?

bei dem 8 bit breiten bus habe ich 256 versionen

du meinst sowas?

switch (x)
{
case 0:
...
....hier ports setzen
...
break;
case 0:
...
....hier ports setzen
...
break;
case 0:
...
....hier ports setzen
...
break;

..
..
.

case 255:
...
....hier ports setzen
...
break;
}


nicht wirklich oder?

von Markus E. (engelmarkus)


Lesenswert?

Du prüfst einfach für jedes Bit in dem char, ob es gesetzt ist, und 
setzt dann die Leitungen auf die entsprechenden Werte.
1
char C = 0b0011010;
2
3
if (C & (1 << 0)) {
4
  // Bit 0 gesetzt...
5
}
6
7
if (C & (1 << 1)) {
8
  // Bit 1 gesetzt...
9
}

Nur mal so als Denkansatz...

von Dete K. (dete)


Lesenswert?

aha, vielen Dank

und das mache ich dann so weiter?

char C = 0b0011010;

if (C & (1 << 0)) {
  // Bit 0 gesetzt...
}

if (C & (1 << 1)) {
  // Bit 1 gesetzt...
}

if (C & (1 << 2)) {
  // Bit 2 gesetzt...
}

if (C & (1 << 3)) {
  // Bit 3 gesetzt...
}
..
..
if (C & (1 << 7)) {
  // Bit 7 gesetzt...
}

von Jörg S. (joerg-s)


Lesenswert?

>und das mache ich dann so weiter?
Ja

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.