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

怎样用api函数开发串口通信程序?

楼主sknighty(柔剑飘凌)2005-08-01 18:11:36 在 Delphi / Windows SDK/API 提问

最好给个例子!!  
  ^_^谢谢!!!!! 问题点数:20、回复次数:8Top

1 楼tangyh521(蚕豆)回复于 2005-08-02 15:13:51 得分 0

var  
      hCommHandle   :   THandle;     //´®¿Ú¾ä±ú  
   
              //TCMLoger.WriteLog('UntTCM','TTCMClass.Create','¿ªÊ¼´ò¿ª¶Ë¿Ú');  
              HCommHandle   :=   CreateFile(PChar(Port),GENERIC_READ   Or   GENERIC_WRITE,0,nil,  
                                                                  OPEN_EXISTING,0,0);  
              //Èç¹ûͨÐŶ˿Úδ´ò¿ª  
              if   (HcommHandle   =   INVALID_HANDLE_VALUE   )   then  
              else  
                GetCommState(HcommHandle,cc.DCB);   //µÃ֪ĿǰͨÐŶ˿ڵÄ״̬  
              Case   BaudRate   of       //ÉèÖò¨ÌØÂÊ  
                    110   :     cc.dcb.BaudRate   :=   CBR_110;  
                    300   :     cc.dcb.BaudRate   :=   CBR_300;  
                    600   :     cc.dcb.BaudRate   :=   CBR_600;  
                  1200   :     cc.dcb.BaudRate   :=   CBR_1200;  
                  2400   :     cc.dcb.BaudRate   :=   CBR_2400;  
                  4800   :     cc.dcb.BaudRate   :=   CBR_4800;  
                  9600   :     cc.dcb.BaudRate   :=   CBR_9600;  
                14400   :     cc.dcb.BaudRate   :=   CBR_14400;  
                19200   :     cc.dcb.BaudRate   :=   CBR_19200;  
                38400   :     cc.dcb.BaudRate   :=   CBR_38400;  
                56000   :     cc.dcb.BaudRate   :=   CBR_56000;  
                57600   :     cc.dcb.BaudRate   :=   CBR_57600;  
              $1C200   :     cc.dcb.BaudRate   :=   CBR_115200;  
              $1F400   :     cc.dcb.BaudRate   :=   CBR_128000;  
              $3E800   :     cc.dcb.BaudRate   :=   CBR_256000;  
                  end;  
              cc.dcb.ByteSize   :=   ByteSize;//ÉèÖÃ×Ö½ÚÊý  
              if   Parity   =   'ÆæÐ£Ñé'   then       //ÆæÅ¼Ð£ÑéÅÐ¶Ï  
                  Par   :=   ODDPARITY  
              else   if   Parity   =   'żУÑé'   then  
                  Par   :=   EVENPARITY  
              else   if   parity   =   'ÎÞУÑé'   then  
                  Par   :=   NOPARITY  
              else   if   Parity   =   '±ê¼Ç'   then  
                  Par   :=   MARKPARITY  
              else   if   Parity   =   '¿Õ¸ñ'   then  
                  Par   :=   SPACEPARITY  
              else  
                  begin  
                      TCMLoger.WriteLog('UntTCM','Create','ÆæÅ¼Ð£ÑéÉèÖÃÎÞЧ');  
                      MessageBox(0,'ÆæÅ¼Ð£ÑéÑ¡ÔñÎÞЧ','',MB_OK);  
                      Closehandle(HCommhandle);  
                      exit;  
                  end;  
              cc.dcb.Parity   :=   Par;  
              if   StopSize   =   '1'   then       //ÉèÖÃֹͣλ  
                cc.dcb.StopBits   :=   ONESTOPBIT  
              else   if   StopSize   =   '1.5'   then  
                cc.dcb.StopBits   :=   ONE5STOPBITS  
              else   if   StopSize   =   '2'   then  
                cc.dcb.StopBits   :=   TWOSTOPBITS;  
              if   not   SetcommState(HCommhandle,cc.dcb)   then     //ÉèÖÃͨÐŶ˿ڵÄ״̬  
                  begin  
                      TCMLoger.WriteLog('UntTCM','Create','ͨÐŶ˿Ú״̬ÉèÖôíÎó£¡');  
                      MessageBox(0,'ͨÐŶ˿ڲÎÊýÉèÖôíÎó£¡','',MB_OK);  
                      CloseHandle(HCommhandle);  
                      exit;  
                  end  
              else  
                  TCMLoger.WriteLog('UntTCM','Create','ͨÐŶ˿Ú״̬ÉèÖóɹ¦');  
          ClearCommError(HcommHandle,dwError,@cs);   //È¡µÃ״̬  
      ReadFile(HcommHandle,inbuff,cs.cbInQue,nBytesRead,nil);  
      Result   :=   Copy(inbuff,1,cs.cbInQue);   //´Ó»º³åÇø¶ÁÈ¡Êý¾ÝTop

2 楼tangyh521(蚕豆)回复于 2005-08-02 15:15:44 得分 20

不好意思出乱码了  
   
  var  
      hCommHandle   :   THandle;     //串口句柄  
   
              //TCMLoger.WriteLog('UntTCM','TTCMClass.Create','开始打开端口');  
              HCommHandle   :=   CreateFile(PChar(Port),GENERIC_READ   Or   GENERIC_WRITE,0,nil,  
                                                                  OPEN_EXISTING,0,0);  
              //如果通信端口未打开  
              if   (HcommHandle   =   INVALID_HANDLE_VALUE   )   then  
              else  
                GetCommState(HcommHandle,cc.DCB);   //得知目前通信端口的状态  
              Case   BaudRate   of       //设置波特率  
                    110   :     cc.dcb.BaudRate   :=   CBR_110;  
                    300   :     cc.dcb.BaudRate   :=   CBR_300;  
                    600   :     cc.dcb.BaudRate   :=   CBR_600;  
                  1200   :     cc.dcb.BaudRate   :=   CBR_1200;  
                  2400   :     cc.dcb.BaudRate   :=   CBR_2400;  
                  4800   :     cc.dcb.BaudRate   :=   CBR_4800;  
                  9600   :     cc.dcb.BaudRate   :=   CBR_9600;  
                14400   :     cc.dcb.BaudRate   :=   CBR_14400;  
                19200   :     cc.dcb.BaudRate   :=   CBR_19200;  
                38400   :     cc.dcb.BaudRate   :=   CBR_38400;  
                56000   :     cc.dcb.BaudRate   :=   CBR_56000;  
                57600   :     cc.dcb.BaudRate   :=   CBR_57600;  
              $1C200   :     cc.dcb.BaudRate   :=   CBR_115200;  
              $1F400   :     cc.dcb.BaudRate   :=   CBR_128000;  
              $3E800   :     cc.dcb.BaudRate   :=   CBR_256000;  
                  end;  
              cc.dcb.ByteSize   :=   ByteSize;//设置字节数  
              if   Parity   =   '奇校验'   then       //奇偶校验判断  
                  Par   :=   ODDPARITY  
              else   if   Parity   =   '偶校验'   then  
                  Par   :=   EVENPARITY  
              else   if   parity   =   '无校验'   then  
                  Par   :=   NOPARITY  
              else   if   Parity   =   '标记'   then  
                  Par   :=   MARKPARITY  
              else   if   Parity   =   '空格'   then  
                  Par   :=   SPACEPARITY  
              else  
                  begin  
                      TCMLoger.WriteLog('UntTCM','Create','奇偶校验设置无效');  
                      MessageBox(0,'奇偶校验选择无效','',MB_OK);  
                      Closehandle(HCommhandle);  
                      exit;  
                  end;  
              cc.dcb.Parity   :=   Par;  
              if   StopSize   =   '1'   then       //设置停止位  
                cc.dcb.StopBits   :=   ONESTOPBIT  
              else   if   StopSize   =   '1.5'   then  
                cc.dcb.StopBits   :=   ONE5STOPBITS  
              else   if   StopSize   =   '2'   then  
                cc.dcb.StopBits   :=   TWOSTOPBITS;  
              if   not   SetcommState(HCommhandle,cc.dcb)   then     //设置通信端口的状态  
                  begin  
                      TCMLoger.WriteLog('UntTCM','Create','通信端口状态设置错误!');  
                      MessageBox(0,'通信端口参数设置错误!','',MB_OK);  
                      CloseHandle(HCommhandle);  
                      exit;  
                  end  
              else  
                  TCMLoger.WriteLog('UntTCM','Create','通信端口状态设置成功');  
          ClearCommError(HcommHandle,dwError,@cs);   //取得状态  
      ReadFile(HcommHandle,inbuff,cs.cbInQue,nBytesRead,nil);  
      Result   :=   Copy(inbuff,1,cs.cbInQue);   //从缓冲区读取数据  
  Top

3 楼qi7(与其临渊羡渔 不如退而结网)回复于 2005-08-05 17:37:52 得分 0

建议你研究一下SpcommTop

4 楼hongping(晨曦)回复于 2005-08-23 17:26:56 得分 0

看书《Delphi   与RS-232串行通信控制》的第三章   串行通信程序及组件建立,我就是看那里作出来的!Top

5 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2005-08-25 15:37:54 得分 0

呵呵,用SPCOmm啦  
   
  _____________________  
  http://lysoft.7u7.netTop

6 楼kychenwei(云淡风清)回复于 2005-08-26 17:19:56 得分 0

要不要我自己写的RS232串口通讯组件?Top

7 楼hzwmjl(永远)回复于 2005-08-26 17:29:38 得分 0

欢迎加入Borland   DELPHI程序员,参与群里技术讨论!欢迎女孩子,也欢迎男孩子参与技术讨论!群号15154361Top

8 楼tetsuya(小哲)回复于 2005-08-26 17:30:17 得分 0

Delphi   与RS-232串行通信控制     裏面有詳細的説明   ~~   裏面有一個组件     TCOMM   ~   可以用   .或者直接调   API  
  www.2ccc.com上面有   光盤原碼Top

相关问题

  • 高分求教:怎么样在vc++中用api函数实现串口通信?
  • 200分!求用API实现串口通信的程序及其源码!
  • 急需帮助,用BCB做串口通信,请大家帮帮忙!!!(提供一些API函数的资料)
  • vc入门问题:用API函数做串口通信时,如何向串口发送一个回车键,我的函数如下:
  • 串口通信程序问题
  • 大家来说说直接用API建立串口通信程序和使用控件各有什么利弊!
  • C# API 串口通信 代码
  • api方式操作串口通信
  • 请问串口通信的最大速率是多少?使用API函数编程时所能承受的最大串口速率是多少?
  • 用tc编个串口通信程序(com1口吧),要用到inportb(),outportb()等函数,但不知怎么用该函数具体设置波特率,停止位,数据位等

关键词

  • 组件
  • 通信
  • delphi
  • baudrate
  • hcommhandle
  • cbr
  • dcb
  • cc
  • 串行
  • 欢迎

得分解答快速导航

  • 帖主:sknighty
  • tangyh521

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

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