sbit als Variable in C

Gast #1430591
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....
Gast #1430599
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
Gast #1430754
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

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.