Ich hier noch einmal. Ich weiss nicht, ob es eindeutig ist, mit dem Borland C++ Builder. Es ist so ziemlich das gleiche wie MS Visual C++.. Hoffe, jemand kann mir helfen. =(
Ron
Hi, ich muss nur einen Pin der LPT-Schnittstelle abfragen, ob dieser Low oder High ist. Ich nutze den Borland C++ Builder und Windows 2k. Wie komme ich da nun ran? Vielleicht ginge auch die Serielle Schnittstelle, eigentlich egal.
Ron
Ich hier noch einmal. Ich weiss nicht, ob es eindeutig ist, mit dem Borland C++ Builder. Es ist so ziemlich das gleiche wie MS Visual C++.. Hoffe, jemand kann mir helfen. =(
Ron
Bin mir nicht ganz sicher aber ich glaub das geht so
unsigned char inportb (unsigned int portadr)
{
unsigned char value;
_asm move edx,portadr
_asm in al,dx
_asm move value,al
return (value);
}
gruß
xeus
Oder
x = _inp(0x379)
dazu must du aber den header conio.h laden
OK, jetzt ich!
Also, die codeschnipsel laufen afu dos - win98/winME, aber leider nicht auf Windows 2K/NT/XP, weil dieser keinen direkten zugriff auf das LPT-Port erlaubt.
Die Funktionen, die du verwenden könnest lauten:
CreateFile()
WriteFile()
SetCommState()
GetCommState()
...
also schaut der Beispiel ca. so aus:
Naja, wie immer, "dieser Code wurde nicht durch einen Compiler gejagt und ich übernehme keine Haftung für etwaige Fehlfunktionen", d.h. wenn ein Fehler drinn ist, bin ich nicht schuld...Code:void Create_LPT() { HANDLE hCom=CreateFile("LPT1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING, OPEN_EXISTING,0,NULL); if(hCom==INVALIDE_HANDLE) // Da ist was schief gelaufen DCB dbc; if(!GetCommState(hCom,&dbc)) // Da haben wir was versch.... //Ab hier kannst du alles machen, was du möchtest (natürlich mit den Einschränkungen, die dir Windoof auferlegt ;) einfach MSDN durchlesen... dbc. }
MfG
Mobius
P.S.: gehörte eher unter PC- Notebook, aber wurscht hat ja auch was mit elektronik zu tun
erst mal danke für das alles! =) Nun geht es los. Wenn ich jetzt das Signal auf PIN2 des LPT-Ports auslesen möchte, welcher auch als Data0 bezeichnet wurde in meinem Schaltbild muss was für ein Code eingefügt werden? Der erste Teil dient dazu, die Schnittstelle bereit zu stellen, oder? Und dann kommt DCB...... Wie ist diese Zeile zu verstehen und wie muss sie aussehen, wenn sie auslesen soll für D0 (Pin2)?
Nö, also die struktur DBC dient dazu, die Optionen des Ports zu erhalten und zu interpretieren. Wenn es nichts anderes ist, als den Buffer zu lesen, dann kannst du einfach den Befehl
benutzten. Danach musst du vielleicht noch ein Mask auf deinen Buffer legen (welche nur 1 char, also 8 bits, lang ist) legen.Code:ReadFile(HANDLE,BUFFER,BUFFER_LENGHT,BYTES_READ,OVERLAPPED);
Naja,ich hoff das hilft weiterCode:char buffer[1]; buffer=3; //0b.0000.0011 buffer=buffer & 0b.0000.0001; //buffer = 1
Mobius
Ich habe mal mich versucht, was aber ja noch nicht klappt:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i=0;
HANDLE hCom=CreateFile("LPT1",GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING,0,NULL);
ReadFile(hCom,i,1,0,0); //lese lpt1
Form1->Edit1->Text=i();
}
ich wollte also in i das Ergebniss schieben, was an LPT anliegt. Dann soll er einfach das Ergebnis im Editfenster anzeigen. Aber ich mache da etwas falsch.
Sehe gerade, hattest hier schon etwas geschrieben. Die Readfilezeile macht mir zu schaffen. Wie muss man die Zeilen verstehen und was muss dafür eingesetzt werden?
Also i darf schon mal kein int sein. Mist. Ok. Char setzen.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char buffer[1];
HANDLE hCom=CreateFile("LPT1",GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING,0,NULL);
buffer = ReadFile(hCom,"LPT1",1,0,0); //lese lpt1
Form1->Edit1->Text=buffer();
}
Habe da ein Problem mit der Interpretation von:
ReadFile(
HANDLE hFile, // handle of file to read
LPVOID lpBuffer, // address of buffer that receives data
DWORD nNumberOfBytesToRead, // number of bytes to read
LPDWORD lpNumberOfBytesRead, // address of number of bytes read
LPOVERLAPPED lpOverlapped // address of structure for data
);
Lesezeichen