Forum: Mikrocontroller und Digitale Elektronik 8 Bit über eine Datenleitung senden -> C-Code


von Dollar (Gast)


Lesenswert?

Servus,

simples Problem:
ich würde gerne 8 Bit über eine Datenleitung in einer Funktion void 
senden (unsigned char komentar) senden. Weitere Leitungen sind die 
ChipselectLeitung und die Clockleitung.

Der Code sieht in etwa wie folgt aus (keine richtige Syntax):
1
void senden (unsigned char komentar)
2
{
3
for(int i = 8; i > 0; i--)
4
{
5
Clockleitung = 1;
6
if (LSB von Komentar == 0)
7
Datenleitung = 0 else Datenleitung = 1;
8
komentar = (komentar >> 1);
9
Clockleitung = 0;
10
}
11
12
13
}

Idee, wir übertragen auf fallender Taktflanke. Der Funktion senden 
werden 8 bit übergeben. Meine Frage ist nun wie ich sequentiell auf das 
LSB des 8-Bit Wortes zugreifen kann. Ich will also prüfen: Letztes Bit = 
? -> dieses Bit auf Datenleitung. Vorletztes Bit = ? -> dieses Bit auf 
Datenleitung...

Wie kann ich nur auf das LSB zugreifen? In Assmebler wird dies über RRC 
realisiert und dann einfach das Carry Bit abgefragt. Wie sähe der Code 
in etwa in C aus?
Ich hoffe das Problem verständlich geschildert zu haben.

Vielen Dank für den input

von Peter II (Gast)


Lesenswert?

Dollar schrieb:
> Wie kann ich nur auf das LSB zugreifen? In Assmebler wird dies über RRC
> realisiert und dann einfach das Carry Bit abgefragt. Wie sähe der Code
> in etwa in C aus?
1
if (Komentar & 1)

von Eric B. (beric)


Lesenswert?

1
   Datenleitung = Komentar & 1;
2
   Komentar >>= 1;

von Dollar (Gast)


Lesenswert?

simpel und logisch, also:
1
void senden (unsigned char Komentar)
2
{
3
for(int i = 8; i > 0; i--)
4
{
5
Clockleitung = 1;
6
Datenleitung = Komentar & 0b00000001;
7
Komentar >>= 1;
8
Clockleitung = 0;
9
}
10
Clockleitung = 1;
11
}

Was genau ist der Unterschied zwischen ">>" und ">>=" ?

Schönen Dank schon einmal für die schnelle Hilfe!

von Karl H. (kbuchegg)


Lesenswert?

Dollar schrieb:

> Was genau ist der Unterschied zwischen ">>" und ">>=" ?

Das ist jetzt aber nicht wirklich dein Ernst, oder?

Das gibts doch gar nicht, dass in einer C Ausbildung es nicht Thema 
einer der ersten Stunden ist, das es in C spezielle 
'Zuweisungs-Operatoren' gibt, die schreibweise vereinfachend eingeführt 
wurden.
1
    a op= b;

ist eine Kurzschreibweise für
1
    a = a op (b);

wobei für op alles mögliche geht. Da gibt es += oder -=, es gibt *= und 
/=, aber auch <<= bzw. >>=


ABgesehen davon, wäre ein
1
   Komentar >> 1;
reichlich sinnlos, wenn man mit dem Ergebnis der Verschiebeaktion nichts 
macht, wie zb in einer Variablen zu speichern (und wenn es nur dieselbe 
Variable ist, deren Wert man um 1 Stelle nach rechts verschoben hat).

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.