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

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