Member Login
member
passwd
remember me on
this computer.

- join now -
- forgot username or password? -

Jump to a Date

Sponsored Communities
Cool stuff
Select a topic of interest:
...and press:
Neat Stuff
Control.com Stuff

Visit our shop for nerds in control lifestyle products.

Fortune
Excellent day for putting Slinkies on an escalator.
RSS Feed
RSS feed Use this link to get an RSS feed of the Control.com article flow, for private, non-commercial use only:
www.control.com/rss/
To get a personalized feed, become a member at no cost.
Select a Page Style
Select one of the following styles:
- BluFu
- Classic
(cookies required)
advertisement
from the serious department...
serial port in visual c++
Communications systems and equipment. topic
Posted by saeed vahabi on 14 December, 2005 - 9:51 pm
I have an AVR Microcontroller which send data to pc from serial port (rs-232) and get data from serial port (rs-232). also i should say that our AVR Microcontroller is in touch with pc just with 2 pins, [pin 3 (TD=Transmit data) and pin 2 (RD=Receive data)]. for example, Microcontroller send two number (A=1,B=2) to pc from serial port (rs-232) and visual c++ get it and add those number (A+B=3) then sends it to Microcontroller from serial port (rs-232). please give me an example which do this.


Posted by wk on 6 January, 2006 - 1:04 am

Sealevel Systems (http://www.sealevel.com) includes code samples on the software CD that ships with all serial products. This C++ code sample shows you how to open a COM port, and send & receive data. In this example, data is sent and read at 460K bps, but standard windows ports are limited to 115K bps.

----- Begin Code Sample -----


#include "stdafx.h"
#include
#include
#include
int main(int argc, char* argv[])
{
char INBUFFER[500];
char OUTBUFFER[20];
DWORD bytes_read = 0; // Number of bytes read from port
DWORD bytes_written = 0; // Number of bytes written to the port
HANDLE comport = NULL; // Handle COM port
int bStatus;
DCB comSettings; // Contains various port settings
COMMTIMEOUTS CommTimeouts;
strcpy(&OUTBUFFER[0], "The quick brown fox jumped over the lazy dog. \n\r\0");
// Open COM port
if ((comport =
CreateFile("\\\\.\\COM5", // open com5:
GENERIC_READ | GENERIC_WRITE, // for reading and writing
0, // exclusive access
NULL, // no security attributes
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL)) == INVALID_HANDLE_VALUE)
{
// error processing code goes here
}
// Set timeouts in milliseconds
CommTimeouts.ReadIntervalTimeout = 0;
CommTimeouts.ReadTotalTimeoutMultiplier = 0;
CommTimeouts.ReadTotalTimeoutConstant = 100;
CommTimeouts.WriteTotalTimeoutMultiplier = 0;
CommTimeouts.WriteTotalTimeoutConstant = 100;
bStatus = SetCommTimeouts(comport,&CommTimeouts);
if (bStatus != 0)
{
// error processing code goes here
}
// Set Port parameters.
// Make a call to GetCommState() first in order to fill
// the comSettings structure with all the necessary values.
// Then change the ones you want and call SetCommState().
GetCommState(comport, &comSettings);
comSettings.BaudRate = 460800;
comSettings.StopBits = ONESTOPBIT;
comSettings.ByteSize = 8;
comSettings.Parity = NOPARITY;
comSettings.fParity = FALSE;
bStatus = SetCommState(comport, &comSettings);
if (bStatus == 0)
{
// error processing code goes here
}
while(!kbhit())
{
bStatus = WriteFile(comport, // Handle
&OUTBUFFER, // Outgoing data
48, // Number of bytes to write
&bytes_written, // Number of bytes written
NULL);
if (bStatus != 0)
{
// error processing code here
}
bStatus = ReadFile(comport, // Handle
&INBUFFER, // Incoming data
500, // Number of bytes to read
&bytes_read, // Number of bytes read
NULL);
if (bStatus != 0)
{
// error processing code goes here
}
// code to do something with the data goes here
}
CloseHandle(comport);
return 0;
}


Posted by Ilyas on 8 January, 2006 - 11:43 am
It is easy to use MSComm control as compared to API.


Posted by Kashif on 8 February, 2006 - 12:26 am
Thanks for commenting.

If it is possible through the MSComm control then how?

Please guide me coz i am doing the same thing.

Kashif

affirmativeus@yahoo.com


Posted by Shrividya on 26 June, 2009 - 3:11 am
Hello,

i tried ur code but using WINAPI. when i execute the application, i am getting read file status = 1 which is fine but when i try to read the INBUFFER data i am not able to get proper data. i written a for loop to read the INBUFFER data

can you please guide me where i am going wrong

Reagrds
Ms. Shrividya
(shri.88vidya [at] rediffmail.com, rnd [at] eecindia.com)

From Control Engineering magazine...
Related articles from Control Engineering magazine
Above articles copyright 2009 Reed Business Information. Subject to its Terms of Use.
Your use of this site is subject to the terms and conditions set forth under Legal Notices and the Privacy Policy. Please read those terms and conditions carefully. Subject to the rights expressly reserved to others under Legal Notices, the content of this site and the compilation thereof is © 1999-2009 Nerds in Control, LLC. All rights reserved.

Users of this site are benefiting from open source technologies, including PHP, MySQL and Apache. Be happy.

Control Engineering magazine subscription
Advertisement
Our Advertisers
Help keep our servers running...
Patronize our advertisers!