www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik port bit weise einlesen


Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo


jetzt habe ich noch den umgekehrten fall.

ich möchte über den port pin P2_B3 bitweise einlesen "16bit"
und das ganze in einer int variable int res; speichern.
(das ganze wieder in c)

könnt ihr mir vieleicht hier auch noch einen typ geben?

meine idee:

hilf = B2_B3; //1bit
res = hilf;
res <<=1;
hilf =B2_B3;  //2bit
res=res+hilf;
res <<=1;
usw.

könnte das so funktionieren?
gruss tobias

Autor: Dieter Brüggemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Das ganze jetzt also umgedreht.

 for (j=0;j<=7;j++)  //Schleife zum einlesen der 8 Bits
  {
     daten<<=1;         // Variable einmal schieben
     if ( bit_is_set(PIND,2)   // Prüfen ob Bit = 1
  { daten++;}   //wenn Bit = 1 dann Daten + 1. LSB wird dann 1
  }

Hoffe das hilft

MFG
Dieter

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo dieter
danke für deine prompte hilfe.
super!!!

gruss
tobias

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

mir stellt sich nun folgendes problem. wie gesagt ich möchte die 
seriellen daten eines ds18s20 lesen.

der ds1820 überträgt jetzt aber das lsb zuerst.
so wie ich das obige programm verstanden habe schreibe ich zuerst das 
empfangene msb bit in meine variable.-> shifte die ganze variable nach 
links.dann zweites bit usw.

wie kann ich das nun programmieren wenn ich das lsb zuerst empfange?
ich müsste das 8bit meiner variable zuerst beschreiben und dann nach 
rechts shiften usw.

nun weiss ich aber nicht wie ich das programieren soll?

kann mir hier vieleicht jemand weiterhelfen?

gruss tobias

Autor: Dieter Brüggemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Hallo

Das ganze jetzt mit LSB first .

 for (j=0;j<=7;j++) //Schleife zum einlesen der 8 Bits
  {
     daten>>=1; // Variable einmal schieben
     if ( bit_is_set(PIND,2) // Prüfen ob Bit = 1
  { daten= Daten + 128;} //wenn Bit = 1 dann Daten + 128 . MSB wird dann 
1
  }

Man schiebt die Daten also jetzt von links nach rechts.

MFG
Dieter

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo dieter

besten dank nochmal, mein programm (dank deiner hilfe) scheint langsam 
zu laufen.

gruss
tobias

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.