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....
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
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...
#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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.