关于串口编程

regine_jing 2000-05-18 09:16:00
亲爱的各位网友们:
目前我急做GPS信号接受程序,很简单,只是用串口接受一些字符串
用VC4.0编程,不用C++,由于本人对串口通讯的程序编制没有丝毫经验,
所以肯请各位网友帮兄弟一把,告诉我如何用VC4.0编写只接收串口数据的
程序。多谢!多谢!
...全文
483 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
regine_jing 2000-06-21
  • 打赏
  • 举报
回复
各位亲爱的网友:

这部分程序我已编写完成,谢谢大家的支持,如果有人也需要同样的程序,请告知我,我一定无偿奉送,再次谢谢大家的帮助。

regine_jing 2000.6.20
gxli 2000-06-19
  • 打赏
  • 举报
回复
让俺给你作罢?10元钱。
Robin_Hood_POT 2000-06-13
  • 打赏
  • 举报
回复
如果还有朋友需要我的串行通信程序,请email通知我。
我的email是:Robin_Hood_POT@263.net
务必请给我你的email,很多朋友来email向我要程序,但是没有回信地址
slf 2000-06-12
  • 打赏
  • 举报
回复
Robin_Hood_POT,我收到了,谢谢!
Robin_Hood_POT 2000-06-11
  • 打赏
  • 举报
回复
xhcai:
给你Email了。
xhcai 2000-06-11
  • 打赏
  • 举报
回复
Robin_Hood_POT,我也想要一份,可以吗?
xhcai@cmmail.com
非常感谢

ecai 2000-06-10
  • 打赏
  • 举报
回复
小弟现在使用一个非常好的串口开发DLL进行串口编程,相比API提供的函数,
简便的多,有兴趣可以发EMAIL向我索取。ecai@263.net

BTW:欢迎交流串口编程经验

char buffer [1024];

sio_open(port); // open the port

// set options of port
// baud-rate 9600bps, 8 data-bit, 1 stop-bit, no parity verification
sio_ioctl(port,B9600,BIT_8 and STOP_1 and P_NONE);

sio_read(port,buffer,ReadCount); // read from port
sio_write(port,buffer,WriteCount); // write to port

sio_close(port); // close the port
Robin_Hood_POT 2000-06-10
  • 打赏
  • 举报
回复
to slf:
我已经Email给你了
slf 2000-06-09
  • 打赏
  • 举报
回复
Robin_Hood_POT,我也想要一份,可以吗?
suliangfeng@etang.com
谢了
frankday 2000-05-27
  • 打赏
  • 举报
回复
我在c++builder下,用mscomm.ocx 实现串行通信,不知谁能帮帮我??!
email:springlin@263.net
Robin_Hood_POT 2000-05-26
  • 打赏
  • 举报
回复
同病相怜啊,我找到一个好程序,应该对你有用,马上email给你。
好好努力啊。
aguang_liu 2000-05-26
  • 打赏
  • 举报
回复
这个网站的VC部分的源代码中有串口通信的例子,你可直接用其中的SerialPort类,很好用。
wpkiller 2000-05-25
  • 打赏
  • 举报
回复
不要用控件,太慢,而且出错也不知道为什么,直接用 api 就可以了。

CreateFile() 用 “comn”(n为串口号)作为文件名就可以打开串口。
ReadFile() 读串口和读文件差不多。
WriteFile() 写串口
CloseHandle() 关闭串口句柄。

有关函数详细参数请察看帮助,可能你还会用到初始化串口的函数如 SetCommConfig 等。

其实主要是分析通讯规约。 GPS 的很简单,好像就只有十几个字节接收。
tong_tyh 2000-05-25
  • 打赏
  • 举报
回复
回复人tong_tyh:EMail :tong-tyh@263.net
用VC++6.0 API实现,源码如下:

DCB ComDcb;
HANDLE hCom; //global handle

hCom = CreateFile("COM1",GENERIC_READ and GENERIC_WRITE,0,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if(hCom==INVALID_HANDLE_VALUE)
{
AfxMessageBox("无法打开串行口");
}
else
{
COMMTIMEOUTS CommTimeOuts ;
SetCommMask(hCom, EV_RXCHAR ) ;
SetupComm(hCom, 4096, 4096 ) ;
PurgeComm(hCom, PURGE_TXABORT and PURGE_RXABORT and
PURGE_TXCLEAR and PURGE_RXCLEAR ) ;

CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0 ;
CommTimeOuts.ReadTotalTimeoutConstant = 4000 ;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 4000 ;
SetCommTimeouts(hCom, &CommTimeOuts );

ComDcb.DCBlength = sizeof( DCB ) ;
GetCommState( hCom, &ComDcb ) ;
ComDcb.BaudRate =9600;//波特率
ComDcb.ByteSize = 8;//数据位
ComDcb.Parity = 0; //校验 0-4=no,odd,even,mark,space

//ComDcb.fRtsControl=0;//流控制
//ComDcb.fDtrControl=0; //流控制
//ComDcb.fOutX=1; //流控制
//ComDcb.fInX=1; //流控制
ComDcb.StopBits = 0;//停止位
SetCommState(hCom, &ComDcb ) ;
}
接收可用定时器或线程等
DWORD dRead,dReadNum;
unsigned char buff[200];
dRead=ReadFile(hCom,buff,100,&dReadNum,NULL);//接收100个字符,
//dReadNum为实际接受各数
plijin 2000-05-24
  • 打赏
  • 举报
回复
我有一good wrapped serial port communication class,if u want,i can email it to u,my email address: lijin#sy163.net
zuoqiang 2000-05-22
  • 打赏
  • 举报
回复
在vc的例子中有一个简单的例子程序,利用MSCOMM32控件实现了串口通讯,例子名称VCTERM
octaprodiqy 2000-05-22
  • 打赏
  • 举报
回复
1.我用vc6.0。用Active控件实现。先在应用程序中插入Active控件Microsoft comm contronl(MSComm)。
MSComm控件的属性
MSComm控件的属性
CommPort:设置串口号,类型 short :1-comm1 2-comm2.
Settings:设置串口通讯参数,类型 CString :B-波特率 P-奇偶性(N-无校验,E-偶校验,O-奇验) D-字节有效位数S-停止位。
PortOpen:设置或返回串口状态,类型 BOOL:TURE-打开 FALSE-关闭。
InputMode:设置从接收缓冲区读取数据的格式,类型 long: 0-Text 1-Bin.
Input:从接收缓冲区读取数据 类型 VARIANT。
InBufferCount:接收缓冲区中的字节数,类型:short.
InBufferSize:接收缓冲区的大小,类型:short.
Output:向发送缓冲区写入数据,类型:VARIANT.
OutBufferCount:发送缓冲区中的字节数,类型:short.
OutBufferSize:发送缓冲区的大小,类型:short.
InputLen:设置或返回Input读出的字节数,类型:short.
CommEvent:串口事件,类型:short.
程序示例
串口初始化
if(!m_comm.GetPortOpen())
m_comm.SetPortOpen(TURE); /*打开串口
m_comm.SetSettings("4800,n,8,1"); /*串口参数设置
m_comm.SetInputMode(0); /*设置TEXT缓冲区输入方式
m_comm.SetRthresHold(1); /*每接收一个字符则激发OnComm()事件
接收数据
m_comm.SetInputLen(1); /*每次读取一个字符
VARINAT V1=m_comm.GetInput(); /*读入字符
m_V1=V1.bstrval;
发送字符
m_comm.SetOutput(COlevariant("Hello");/*发送“Hello"
很好用!
2.用API:inport,outport,很简单;


gz_zhu 2000-05-22
  • 打赏
  • 举报
回复
VC本身带有一个例子TTY,是用SDK来写的,写得很全面,只需作少量的
修改就可以当成你的程序了。
taoqx 2000-05-19
  • 打赏
  • 举报
回复
你可以到http://www.r2m.com/windev/中去看一看,在其中的Source Code Examples一栏中的Communications and WinSock这一组源代码中含有关于串口通信的一个叫做COMMTTY的例子,很详细,我想对你一定很合适。

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧