8 Bit über eine Datenleitung senden -> C-Code

Gast #3869874
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
Gast #3869924
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!
#3870029
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).

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