Newsgroup: it.comp.lang.c++
Titolo: Programmare la seriale !!

Salve a tutti pare che sia giunto il momento di afrontare
questoproblema!!
Dovrei cimentarmi nella programmazione della seriale ma non so
assolutamente niente su questo argomento !!
Da dove comincio??
Qualche consiglio utile ??
Dove posso trovare Esempi di listati??
Grazie mille
Fabrizio

Per programmare la porta seriale non é troppo difficile. C'é solo qualche
punto da seguire.
Per prima cosa devi aprire la porta e lo fai con API CreateFile.
Poi configuri la porta... velocità, bits di stop, ecc.
A questo momento la porta é pronta per essere utilizzata. Per spedire dati
utilizza la funzione API WriteFile, et per leggere i dati utilizza ReadFile.
Per più informazioni guarda l'help di DCB.
Bye Bye
Matteo Ferrini
P.S. Eccoti dei pezzi di listato che ti potranno aiutare. Se ci sono
problemi non esitare a porre domande...
#define CommLinkTimeout 2000    // Timeout en [ms] pour Recv32() et
Send32().
#define CommPort2        "COM2"  // Port série utilisé (provvisoirement
figé).
#define CommPort1        "COM1"  // Port série utilisé (provvisoirement
figé).
   DCB MyDCB2;
   HANDLE hComm2;
  COMMTIMEOUTS MyCommTimeouts;
  OVERLAPPED SendOverlappedStruct;  // Pour utiliser le mode overlapped
  OVERLAPPED RecvOverlappedStruct;  // Pour utiliser le mode overlapped
  // Apertura della porta seriale
  hComm2 = CreateFile(
    CommPort2,                       // pointer to name of the file
    GENERIC_READ | GENERIC_WRITE,    // access mode
    NULL,                            // share mode
    NULL,                            // pointer to security attributes
    OPEN_EXISTING,                  // how to create
    FILE_FLAG_WRITE_THROUGH |
    FILE_FLAG_OVERLAPPED,          // file attributes
    NULL                            // handle to file with attributes to
copy
  );
  // Configurazione della porta seriale COM2
  GetCommState(hComm2, &MyDCB2);
  MyDCB2.BaudRate          = CBR_19200; // current baud rate
  MyDCB2.fBinary           = TRUE; // binary mode, no EOF check
  MyDCB2.fParity           = FALSE; // enable parity checking
  MyDCB2.fOutxCtsFlow      = TRUE; // CTS output flow control
  MyDCB2.fOutxDsrFlow      = FALSE; // DSR output flow control
  MyDCB2.fDtrControl       = DTR_CONTROL_ENABLE ; // DTR flow control type
  MyDCB2.fDsrSensitivity   = FALSE; // DSR sensitivity
  MyDCB2.fTXContinueOnXoff = FALSE; // XOFF continues Tx
  MyDCB2.fOutX             = FALSE; // XON/XOFF out flow control
  MyDCB2.fInX              = FALSE; // XON/XOFF in flow control
  MyDCB2.fErrorChar        = FALSE; // enable error replacement
  MyDCB2.fNull             = FALSE; // enable null stripping
  MyDCB2.fRtsControl       = RTS_CONTROL_HANDSHAKE; // RTS flow control
  MyDCB2.fAbortOnError     = FALSE; // abort reads/writes on error
  MyDCB2.XonLim            = 512; // transmit XON threshold
  MyDCB2.XoffLim           = 128; // transmit XOFF threshold
  MyDCB2.ByteSize          = 8; // number of bits/byte, 4-8
  MyDCB2.Parity            = NOPARITY  ; // 0-4=no,odd,even,mark,space
  MyDCB2.StopBits          = ONESTOPBIT  ; // 0,1,2 = 1, 1.5, 2
  MyDCB2.XonChar           = 17; // Tx and Rx XON character
  MyDCB2.XoffChar          = 19; // Tx and Rx XOFF character
  MyDCB2.ErrorChar         = 0; // error replacement character
  MyDCB2.EofChar           = 0; // end of input character
  MyDCB2.EvtChar           = 0; // received event character  if
(!SetCommState(hComm, &MyDCB2))
  SetCommState(hComm2, &MyDCB2);
  // Configure les timeouts du port série
  MyCommTimeouts.ReadIntervalTimeout = 0;
  MyCommTimeouts.ReadTotalTimeoutMultiplier = 0;
  MyCommTimeouts.ReadTotalTimeoutConstant = MAXDWORD;  // Attente infinie
  MyCommTimeouts.WriteTotalTimeoutMultiplier = 0;
  MyCommTimeouts.WriteTotalTimeoutConstant = 0; // Attente infinie
  // Initialise les opérations overlapped
  SendOverlapped = false;
  RecvOverlapped = false;
  RecvOverlappedStruct.Internal = 0;
  RecvOverlappedStruct.InternalHigh = 0;
  RecvOverlappedStruct.Offset = 0;
  RecvOverlappedStruct.OffsetHigh = 0;
   // Scrittura sulla porta seriale COM2
  WriteFile(hComm2, &SendBuffer, 1, &Sended, &SendOverlappedStruct);
     // Lettura sulla porta seriale COM2
  ReadFile(hComm2, &RecvBuffer,1, &Received, &RecvOverlappedStruct);

Ti ringrazio per l'aiuto ma se io volessi programmare la seriale senza
utilizare le api di Windows??


Impara l'assembly oltre al C/C++.
Così scrivi direttamente sugli indirizzi dei registri di I/O della seriale e
non vai ad incasinarti con Winbug.
Senza contare che in assembly il codice sarà più compatto e più veloce
rispetto ai corrispondenti in C/C++.
--
Firmato:L'Ammiraglio.
Comandante della USS "Defiant" NX74205.
Attualmente in missione al confine cardassiano.

 rispetto ai corrispondenti in C/C++.
Gia credo che seguiro il tuo consiglio !!
Tevo trovare solamente gli interupt di sistema !!