怎样用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()等函数,但不知怎么用该函数具体设置波特率,停止位,数据位等




