CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何使用windows API函数对串口编程

楼主zm_stone(不再犹豫)2000-02-15 19:50:00 在 VC/MFC / 基础类 提问

如何使用windows   API函数如:CreateFile(),ReadFile(),WriteFile(),WaitCommEvent()等进行编程.在单机的情况下如何能进行测试吗? 问题点数:50、回复次数:12Top

1 楼rober()回复于 2000-02-15 20:32:00 得分 5

题目太大了。我提几个建议:  
  测试我倒有个法子:用串口线连接Com1,Com2。用两个程序,一个接受,一个发送。不就可以了。  
  编程的话,请参考《Windows95   通信编程》,里面有详细的例子。你可以发邮件给我,  
  有些问题我还是能回答的。  
  可以给我分吗?Top

2 楼tonyhan()回复于 2000-02-16 08:46:00 得分 30

我这里到有一点关于串口API的中文资料,如需要可以发给你。  
  另外你可以看看MSDN中关于串口的经典程序TTY的例子,  
  相信会对你有所帮助。Top

3 楼meijg(星星之火)回复于 2000-02-16 09:23:00 得分 0

hComm=CreateFile(port,   GENERIC_READ   and   GENERIC_WRITE,0,   NULL,         OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL   and   FILE_FLAG_OVERLAPPED,NULL);  
  hComm是串行口的句柄,PORT可以直接设置成"COM1"或者COM2等  
  其他的参数可以参照MSDN里的说明  
  WRITEFILE()的用法是一样的  
  Top

4 楼zm_stone(不再犹豫)回复于 2000-02-22 09:17:00 得分 0

谢谢你们的回答,tonyhan,如果能得到你的资料我将万分感激。Top

5 楼prolead()回复于 2000-02-22 10:29:00 得分 0

我有一个串口类,需要着可与我联系,E_mail   :prolead@126.com   ,有一个条件,你用后要有反馈信息,如果修改过请把修改过的代码给我Top

6 楼upstream(upstream)回复于 2000-02-22 10:32:00 得分 0

我可以给你一个例子.Top

7 楼SoftDIY()回复于 2000-02-22 18:17:00 得分 0

www.codetools.com   have   serial   communication   class   Top

8 楼tonyhan()回复于 2000-02-23 19:02:00 得分 0

资料我以发出请查收。Top

9 楼zjy()回复于 2000-02-23 19:38:00 得分 5

....HANDLE   hModem;  
  ....DCBdcb;  
  COMMTIMEOUTS timeouts;  
  char szComName[32];  
   
  sprintf(szComName,"COM%1d",nComNo);  
  hModem   =   CreateFile(szComName,GENERIC_READ   and   GENERIC_WRITE,  
  0,   0,   OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,   0);  
   
  if(hModem   !=   INVALID_HANDLE_VALUE){  
  if(!GetCommState(hModem,   &dcb))goto   _open_err;  
  dcb.BaudRate   =   38400;//115200;//38400;  
  dcb.ByteSize   =   8;  
  dcb.Parity   =   NOPARITY;  
  dcb.StopBits   =   ONESTOPBIT;  
   
  //   Apply   the   new   comm   port   settings  
  if   (!SetCommState(hModem,&dcb))goto   _open_err;  
   
  //   Change   the   ReadIntervalTimeout   so   that  
  //   ReadFile   will   return   immediately.   See   help   file  
  timeouts.ReadIntervalTimeout   =   MAXDWORD;    
  timeouts.ReadTotalTimeoutMultiplier   =   0;  
  timeouts.ReadTotalTimeoutConstant   =   0;  
  timeouts.WriteTotalTimeoutMultiplier   =   0;  
  timeouts.WriteTotalTimeoutConstant   =   0;  
  SetCommTimeouts(hModem,   &timeouts   );  
   
  //   Set   the   Data   Terminal   Ready   line  
  EscapeCommFunction(hModem,   SETDTR);  
  //   Send   an   "at"   command   to   the   modem  
  //   Be   sure   to   use   \r   rather   than   \n  
  ResetModem(hModem);  
  }  
  return   hModem;  
  _open_err:  
  CloseModem(hModem);  
  hModem   =   INVALID_HANDLE_VALUE;  
  return   hModem;  
  }  
  void   CloseModem(HANDLE   hModem)  
  {  
  if(hModem   !=   INVALID_HANDLE_VALUE){  
  CloseHandle(hModem);  
  }  
  Top

10 楼zjy()回复于 2000-02-23 19:44:00 得分 0

soory:  
  ******************************************************  
  HANDLE   hModem;  
  DCBdcb;  
  COMMTIMEOUTS   timeouts;  
  hModem   =   CreateFile("COM1",GENERIC_READ   and   GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,   0);  
  GetCommState(hModem,   &dcb)  
  dcb.BaudRate   =   38400;//115200;//38400;  
  dcb.ByteSize   =   8;  
  dcb.Parity   =   NOPARITY;  
  dcb.StopBits   =   ONESTOPBIT;  
  SetCommState(hModem,&dcb);  
  timeouts.ReadIntervalTimeout   =   MAXDWORD;    
  timeouts.ReadTotalTimeoutMultiplier   =   0;  
  timeouts.ReadTotalTimeoutConstant   =   0;  
  timeouts.WriteTotalTimeoutMultiplier   =   0;  
  timeouts.WriteTotalTimeoutConstant   =   0;  
  SetCommTimeouts(hModem,   &timeouts   );  
  EscapeCommFunction(hModem,   SETDTR);  
  WriteFile(hModem,&byte,1,&numWrite,   0);  
  ReadFile(hModem,&byte,1,&numRead,   0);  
  *********************************************Top

11 楼ybchen(我)(是)(菜)(鸟)(我)(怕)(谁)回复于 2000-02-23 20:10:00 得分 10

看我以前的贴子,完整的串口通讯类TComm32的代码:  
  http://www.midatech.com/csdn/expert/TopicView.asp?id=1673  
  单机调试:  
  (1)把COM1和COM2设成相同的参数,如波特率、停止位和寄偶校验等,用其中一个发,另一个收。  
  (2)只有一个串口,可以自己发,自己收:把串口的发和收接到一起,其他引角悬空,如果写到这个串口数据还能读出同样数据说明程序正确。Top

12 楼zm_stone(不再犹豫)回复于 2000-02-26 12:25:00 得分 0

能够得到这么多高手的指点,我实在受益非浅,非常感谢各位的鼎力相助。Top

相关问题

  • vc++中如何用API函数实现串口编程,谁有源代码???
  • 请问串口通信的最大速率是多少?使用API函数编程时所能承受的最大串口速率是多少?
  • API函数编写串口问题
  • 串口编程中怎样用函数:WaitCommEvent(...) ???
  • 串口编程
  • -----串口编程
  • 串口编程
  • 串口编程
  • 用API函数实现delphi串口问题,高分求源码
  • 怎样用API函数向串口写数据?(急)

关键词

  • 串口
  • hmodem
  • 编程
  • dcb
  • createfile
  • 程序
  • timeouts
  • generic
  • port
  • open

得分解答快速导航

  • 帖主:zm_stone
  • rober
  • tonyhan
  • zjy
  • ybchen

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo