mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik sbit als Variable in C


Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin neu in der MC C Programmierung.
Ich hätte eine generelle Frage in Bezug auf sbits.
Wie kann ich ein sbit dynamisch an eine Funktion übergeben.

Wenn man z.B. mehrere gleiche Sensoren an verschiedene PINS anschließt 
möchte ich immer die gleiche Treiberroutine benutzen.


sbit DQ  =  P3^3;  // sollte später in main programm durch P3^0 bis P3^5 
ersetzt werden

//----------------------------------------
// Reset DS1820
//----------------------------------------
bit ResetDS1820(sbit DQ)  <-- funktioniert nicht
{
  bit presence;
  DQ = 0;     //pull DQ line low
  DelayUs(29);   // leave it low for about 490us
  DQ = 1;     // allow line to return high
  DelayUs(3);   // wait for presence 55 uS
  presence = DQ;   // get presence signal
  DelayUs(25);   // wait for end of timeslot 316 uS
  return(presence); // presence signal returned
}   // 0=presence, 1 = no part

Könntet ihr mir bitte helfen wie ich das Problem lösen kann?

Vielen Dank im Voraus!

Grüße....

Autor: H.J.Seifert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C an sich kennt keine Bits, die kleinste Einheit ist ein char.
Ab und zu gehts doch, das sind dann aber compilerspezifische 
Erweiterungen. Ob man das dann auch noch als Funktionswert übergeben 
kann? Ich glaube nicht.
Zumindest wenn die einzelnen Sensoren an einem Port hängen, sollte es 
kein Problem sein, den Funktionswert als Maske zu übergeben.

#define Sensor1 0x01 //Port0.0
#define Sensor2 0x02 //Port0.1

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort.

Könntest du mir bitten ein kleines BSP geben. Da ich auf dem Schlauch 
stehe und nicht genau weiß was du meinst...

Vielen Dank...

Autor: H.J.Seifert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define Sensor1 0x01 //Port0.0
#define Sensor2 0x02 //Port0.1
.
.

//----------------------------------------
// Reset DS1820
//----------------------------------------
unsigned char ResetDS1820(unsigned char Sensor)
{unsigned char presence;

  Port0 = PORT0 & (~Sensor);     //pull DQ line low
  DelayUs(29);   // leave it low for about 490us
  Port0 = Port0 | Sensor1;     // allow line to return high
  DelayUs(3);   // wait for presence 55 uS
  presence = Port0 & Sensor;   // get presence signal
  DelayUs(25);   // wait for end of timeslot 316 uS
  return(presence); // presence signal returned
}   // 0=presence, nicht 0 = no part

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.