Porta Parallela in C++

di il
3 risposte

Porta Parallela in C++

Devo scrivere un programma in c++ che invia 8 bit sulla porta parallela, ma non so come fare! Qualcuno può aiutarmi?
Premetto che come compilatore uso Borland C++ Builder 6 e le funzioni che questo mette a disposizione (CreateFile, WriteFile ecc.)le ho già provate, ma non sono sicuro di averle impostate nella maniera giusta.
Se qualcono sa come vanno usate correttamente e magari ha anche degli esempi sarebbe così gentile da aiutarmi? grazie

f-ramaf

3 Risposte

  • Re: Porta Parallela in C++

    <pre id=code><font face=courier size= id=code>
    To access the LPT or any COM port from C++ Builder, you need to use MFC functions.

    DWORD
    Errors,
    dwdBytesSent,
    dwdBytesRead;

    COMSTAT
    Status;

    COMMTIMEOUTS
    time_outs;

    DCB
    dcb;

    char
    chrSomeByte,
    ptrSomeMultiBytePointer[400];

    HANDLE PortHandle = CreateFile("LPT1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

    GetCommState(PortHandle, &dcb);
    SetupComm(PortHandle, 200, 200);

    dcb.xxxx = xxxx;
    /* Set dcb variables such as baud rate, stop bits, etc */

    SetCommState(PortHandle, &dcb);
    GetCommTimeouts(PortHandle, &time_outs);

    time_outs.xxxx = xxxx;
    /* Set comm timeouts for receive and transmit */

    SetCommTimeouts(PortHandle, &time_outs);
    PurgeComm(PortHandle, PURGE_TXCLEAR | PURGE_RXCLEAR | PURGE_TXABORT | PURGE_RXABORT);
    ClearCommError(PortHandle, &Errors, &Status);
    ClearCommBreak(PortHandle);

    /* Run a separte thread that writes to the port when it's not being read from if you need asynchronous (easy way to do it) */
    WriteFile(PortHandle, &chrSomeByte, 1, &dwdBytesSent, NULL);

    /* Run a separate thread that reads from the port when it's not being written to (easy way) */
    ReadFile(PortHandle, ptrSomeMultiBytePointer, 200, &dwdBytesRead, NULL);
    </font id=code></pre id=code>


    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
  • Re: Porta Parallela in C++

    Grazie mille, ma perchè quando arrivo a fare il WriteFile(...) pur non riscontrando errori, non riesco a ottenere sui pin della porta parallela il byte inviato?

    Il progetto che devo realizzare consiste nel trasmettere un byte
    (i caratteri da 0-255)sulla porta parallela e le 8 uscite mi devono controllare un driver per motori passo passo, però come ho gia detto al WriteFile non riesco a ottenere i valori logici sui pin.
    Pui aiutarmi per favore?

    f-ramaf
  • Re: Porta Parallela in C++

    Beh' per controllare motori stepper non è il massimo. Dovresti avere un driver o una DLL che ti permette accedere direttamente alla porta.

    Hai provato vedere cose succede quando fai CloseHandle? Eventualmente c'è un buffer che memorizza un solo byte, finché non arrivano altri... Un'altra possibilità (ma molto macchinosa) è inviare una "stampa" allo spooler a una stampante ad aghi. Ma è solo per vedere se fisicamente esce qualcosa, non si ha alcun controllo.

    L'unico collegamento per NT/2000/XP che ho trovato è su:

    http://www.vcomsoft.com/infopage/NTIOACCESS.htm

    Per win95 si può accedere direttamente alle porte con la funzione _outp(), ed _inp() per la lettura. Inoltre esistono numerosi driver freeware. Non tanto per NT/2000/XP, dove tutto è molto più complicato.

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
Devi accedere o registrarti per scrivere nel forum
3 risposte