View Full Version : [C] comunicazione seriale rs232
Ciao a tutti. Sono nuovo del forum, quindi scusatemi se non posto nella sezione giusta.
allora mi spiego: io dovrei creare un programma in c o c++ che mi invii un carattere ascii o un numero binario da 8 bit tramite la porta seriale, senza bit di parità, senza handshake e se possibile anche senza bit di stop, quindi 8 bit puliti. La velocità di trasmissione mi servirebbe la più bassa possibile. Ho cercato su google se esiste qualche libreria o qualche guida ma senza successo. Uso windows 7, come compilatore invece Dev C++.
Marinelli
10-03-2010, 23:28
Benvenuto sul forum. :)
Ti sposto nella sezione dedicata alla programmazione.
Ciao!
butta Dev-C++ e usa Visual C++ 2008 Express, oppure la RC della versione 2010.
per comunicare con la seriale devi usare le Communications Resources: http://msdn.microsoft.com/en-us/library/aa363196(VS.85).aspx
C e C++ non forniscono librerie standard per comunicare con la seriale.
PS: grazie per aver specificato sistema operativo e compilatore, anche se il compilatore era farlocco :D
é una cosa piuttosto rara da queste parti.
altra cosa, sei obbligato ad usare C o C++? in Visual C# sarebbe molto piu semplice.
Mi ricordo che alle superiori mi fecero fare un programma del genere inglobando una parte di listato in assembler. Mi pare si dovesse iniziare con qualcosa del tipo _asm e poi una serie di interrupt.. eheh alla fine riuscivamo a fare il DIR su un'altra macchina della rete.. A quei tempi sembrava una cosa da fantascenza.. :sofico: Se lo trovo te lo posto però non so se Dev-C++ farà problemi.. a quei tempi girava il QC..
intanto grazie per le risposte!!!!!
butta Dev-C++ e usa Visual C++ 2008 Express, oppure la RC della versione 2010.
per comunicare con la seriale devi usare le Communications Resources: http://msdn.microsoft.com/en-us/library/aa363196(VS.85).aspx
C e C++ non forniscono librerie standard per comunicare con la seriale.
PS: grazie per aver specificato sistema operativo e compilatore, anche se il compilatore era farlocco :D
é una cosa piuttosto rara da queste parti.
.....ho specificato perchè mi sembrava importante...:D
altra cosa, sei obbligato ad usare C o C++? in Visual C# sarebbe molto piu semplice.
il problema è che Visual C# non lo so utilizzare....:D
Non è che qualcuno sarebbe cosi gentile da postare un pezzo di codice con una minima spiegazione???:p
ti avverto, in Visual C# sarebbe di un semplicitá imbarazzante!!
si tratta di usare la classe SerialPort nel namespace System.IO.Ports. to', c'é anche l'esempio giá pronto :asd:
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx
se sei assolutamente determinato col C++ tanto per cominciare auguri :asd:, poi dovresti aprire un HANDLE che identifica la porta passando certi parametri alla CreateFile, trovi tutti i dettagli al paragrafo "Communications Resources" della documentazione di CreateFile: http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx
poi per settare le impostazioni di comunicazione devi usare SetCommState e SetupComm: http://msdn.microsoft.com/en-us/library/aa363436(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa363439(VS.85).aspx
poi trasmetti i dati chiamando WriteFile, ed infine chiudi l'HANDLE con CloseHandle.
Grazie! Appena ho 2 minuti provo.
madonna ooooo:D ....hai ragione!!!!!.....figata sto visual C#!!!!
ancora una domanda....in rete ho trovato questo codice. Volevo chiedere il baud rate minimo che posso impostare qual'è????
void Button1Click(object sender, EventArgs e)
{
//configuring the serial port
serialPort1.PortName="COM1";
serialPort1.BaudRate=9600;
serialPort1.DataBits=8;
serialPort1.Parity=Parity.None;
serialPort1.StopBits= StopBits.One;
//opening the serial port
serialPort1.Open();
//write data to serial port
serialPort1.Write("ABC");
//close the port
serialPort1.Close();
}
banryu79
12-03-2010, 09:28
Volevo chiedere il baud rate minimo che posso impostare qual'è????
Il baud rate (bits per secondo) minimo che puoi impostare è il baud rate minimo supportato dalla porta seriale E dalla periferica/device dall'altra parte, che riceve i dati.
Per scoprire quali baud rate siano supportati dalla porta, basta che vai (in Windows) in Gestione Periferiche a vedere le proprietà della porta (vedi link (http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_external/f63744.html#f84557)). Immagino tu possa anche scoprirlo programmaticamente, ovvero ci sarà una qualche classe/metodo nella libreria di C# che ti permette di ottenere queste informazioni.
L'importante è che usi un baud rate che sia supportato da entrambi i "capi" della comunicazione.
un altra cosa, spero l'ultima:D , per la trasmissione con il codice sopra riportato si utilizza solo il pin 3(transmit data), oltre alla masa. Giusto o mi sbaglio?
banryu79
12-03-2010, 17:54
un altra cosa, spero l'ultima:D , per la trasmissione con il codice sopra riportato si utilizza solo il pin 3(transmit data), oltre alla masa. Giusto o mi sbaglio?
Il codice sopra riportato non c'entra assolutamente niente con i meccanismi fisici con cui è implementata la comunicazione...
Non conosco i dettagli di funzionamento e le funzioni dei singoli pin di una porta seriale, quindi io non ti so rispondere, ma se hai dei dubbi prova a cercare qualche info specifica con Google.
nessuno sa che pin vengono utilizzati?
s0nnyd3marco
14-03-2010, 11:08
nessuno sa che pin vengono utilizzati?
Qua hai tutte le info necessarie (più molte superflue):
http://it.wikipedia.org/wiki/EIA_RS-232
Nella mia esperienza ti posso dire che la maggior parte dei DCE (modem 56k esclusi) utilizzano solamente 3 pin, che sul connettore db-9 sono il 2(Rx) il 3(Tx) e il 5(Gnd).
PS: occhio a quando saldi il conettore: controlla che i pin lato DTE riportati sul manuale indichino se Rx e Tx siano riferiti al DTE o DCE.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.