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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.