Code entziffern
-
Hallo habe folgenden Code aus nem Tutorial.
Das Problem ist nur, dass ich den Code etwas abgeändert für c++ brauche und nicht so ganz durchsteige weil es schon wieder ewig her ist das ich was geschrieben habe.Hier also der Code:
unsigned int TLC549(void) { unsigned int bit,analog,lpt; lpt = 0x378; // Adresse vom 1. Parallelport analog = 0; // Rueckgabewert loeschen outp(lpt,inp(lpt)&0xfe); // CS-Signal aktivieren delay(2); // und Setup-Time abwarten for (bit=0;bit<8;bit++) // Jetzt die 8 Bits abholen { analog=analog<<1; // Alte Bits weiterschieben if ((inp(lpt+0x01)&0x20)!=0) analog|=0x01; // und neues Bit ggf. setzen outp(lpt,inp(lpt)|0x02); // Clock auf '1' delay(1); // etwas warten outp(lpt,inp(lpt)&0xfd); // Clock wieder auf '0' delay(1); } outp(lpt,inp(lpt)|0x01); // CS wieder deaktivieren delay(18); // und sicherstellen, dass return(analog); // Wandlung ausgefuehrt wird }
Also der Code ist füer einen ad (Analog Digital Wandler) der mist die Stromstärke und gibt sie als Digitale Zahl an den LPT.
Außer das ich gerne wüsste was ich für c++ ändern muss wüsste ich noch gerne an welcher Stelle im Code das Programm den Wert ausgibt weil das nix von wegen printf() steht.
Danke
Michael
-
was hat das jetzt mit c# zu tun?
-
Original erstellt von Hecker.Michael:
Also der Code ist füer einen ad (Analog Digital Wandler) der mist die Stromstärke und gibt sie als Digitale Zahl an den LPT.Also soweit ich weiß misst der TLC549 aber die Spannung, welche er allerdings nicht in Volt zurückschickt...
Original erstellt von Hecker.Michael:
**Außer das ich gerne wüsste was ich für c++ ändern muss wüsste ich noch gerne an welcher Stelle im Code das Programm den Wert ausgibt weil das nix von wegen printf() steht.
**Also abändern musst du nicht viel, da der Code ja C ist... Der Code gibt aber nix aus. Du bekommst beim Aufruf ein UINT mit dem Wert zurück. Programm != Funktion Ich würde jetzt noch _inp anstatt inp und _outp anstatt outp schreiben und die variablen erst dann erstellen wenn du sie benutzt. Zum Schluss machst du noch ein Prefix-Increment in die Schleife anstatt das sinnlose Postfix-Increment und es ist ok... Hab sowas ähnliches auch mal gemacht...
const int LPT1 = 888; int TLC549(bool bAverage, unsigned int loops = 10) { if(loops == 0) return 0; if(!bAverage) loops = 1; int average = 0; for(int av = 0; av < loops; ++av) { _outp(LPT1,0); _outp(LPT1,1); _outp(LPT1, 0); int value, a, result=0; for(int i = 0; i < 8; ++i) { value = _inp(LPT1+1); if(value & 128) a = 0; else a = 1; result <<= 1; result += a; _outp(LPT1,2); _outp(LPT1,0); } average += result; } average /= loops; return average; }
Das läuft aber nicht auf NT basierenden Systemen...
EDIT: aber mit C**#** hat das nicht wirklich was zu tun...
@Mod: Bitte verschieben[ Dieser Beitrag wurde am 06.04.2003 um 18:36 Uhr von MaSTaH editiert. ]
-
Dazu sollte man noch sagen, dass ich den Code auch vor ner Ewigkeit gemacht habe und ein paar kleine Mängel auf die Schnelle behoben habe... Wenns nicht kompiliert waren dabei wohl wieder die Fehlerzwerge am Werk
-
welchen Wert liefer der TLC 549 denn dann zurück ? Aber irgendeinen Wert wird er schon geben der in Abhängigkeit zur Spannung steht.
Wenn ihr euch auch schon daran probiert habt und Fehler gefunden habt,
könnte mir dann jemand den richtigen Code zuschicken oder hier sagen was falsch ist ?Danke Michael
(Hecker.Michael@gmx.de)P.S.: Es hat soviel mit C zu tun als das es ein C Prog ist
-
ach noch ne Kleinigkeit welche Header Files brauche ich für das Programm ?
-
hier ist das C Sharp kurz C# Forum!!!
-
Original erstellt von Hecker.Michael:
ach noch ne Kleinigkeit welche Header Files brauche ich für das Programm ?#include <conio.h>
@<ps>
Hast du ja toll rausgefunden. . Es verschiebt ihn aber trotzdem kleiner... Mod im Urlaub? Da wär ich jetzt auch gerne