_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.


Anmelden zum Antworten