_outp() und _inp()
-
Hallöchen!
Also ich hab folgendes Problem:
Dank eines Treibers lässt sich die Serielle schnittstelle freischalten zur direkten ansteuerung - unter Windoof XP.Mein Problem ist nun, wie ich die einzelnen COM-Ports nun direkt ansteuer (pin für Pin).
Unter Pascal schaut das so aus:
Port[MyCOM+4] := 3; Port[MyCOM+3] := 64;
Allerings schein ich unter C was falsch zu machen. könntet ihr mir mal ein Beispiel + erklärung geben??
-
check mal http://www.beyondlogic.org/index.htm
da gibts jede menge info zu low-level programmierung und rs232-hardware (register)
-
Ja mei is des geil!
Besten Dank!!!!!!
-
Sodelle, hab mir dfie seite nun mal angesehen, aber irgendwie funzt des nit. Sacht mir mal bidde was ich da grundlegendes falsch mache *verzweifelt*
#include <iostream.h> // for using standart I/O #include <conio.h> #include <windows.h> // #define COM1 0x3F8 #define COM2 0x2F8 #define COM3 0x3E8 #define COM4 0x2E8 int giveio(void); int main() { int iPort=1; int i=0, intervall = 1000; int MyCom = COM1; char buffer = false; // Menü zur Auswahl des COM Anschluß cout << "Bitte auswaehlen:" << endl << "-----------------" << endl; cout << "(1)\tCOM 1" << endl << "(2)\tCOM 2" << endl << "(3)\tCOM 3" << endl << "(4)\tCOM 4" << endl << "-----------------" << endl << ">"; cin >> iPort; if ((iPort > 4) || (iPort < 1)) { cout << endl << "Falsche eingabe! Es wird automatisch COM1 verwendet!" << endl; iPort = 1; } else { // Zuweisung der Portadressen an "MyPort" switch (iPort) { case 1:{ MyCom = COM1; // COM1 3F8 break; } case 2:{ MyCom = COM2; // COM2 2F8 break; } case 3:{ MyCom = COM3; // COM3 3E8 break; } case 4:{ MyCom = COM4; // COM1 2E8 break; } default:{ cout << "FEHLER: ungültige COM-Port Daten!" << endl; return -1; } } } cout << endl << endl; cout << "COM" << iPort << " gewaehlt!" << endl; // COM-Ports unter Win_NT freischalten if (giveio()) { cout << "Ports erfolgreich freigeschaltet!" << endl << endl; _outp(MyCom+4, 0x01); // und hier muss irgendwo der wurm drinstecken } else { cout << "FEHLER: COM-Port konnten nicht freigeschaltet werden!" << endl; } cout << endl << endl; return 0; } // ***********************FUKTIONEN*********************** // Freischalten de´r Ports int giveio(void) { OSVERSIONINFO osvi; int ret = 1; osvi.dwOSVersionInfoSize = sizeof osvi; GetVersionEx(&osvi); if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) { HANDLE h; h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (h == INVALID_HANDLE_VALUE) ret = 0; else CloseHandle(h); } return ret; }
Die register bleiben ja die selben, aber die ansteuerung geht nit.