串口通讯问题,为何DELPHI中的串口通讯不能输出128及以上Ascii码?谢谢!!!!!!
我用Mscomm和SPComm两个控件均做了通讯程序,
可是就是不能输出128以上的Ascii码,
用了二进制数组输出值还是不行,希望得到大家的帮助,谢谢!
问题点数:10、回复次数:6Top
1 楼dy2712(大头)回复于 2002-01-29 11:09:15 得分 0
可以用WINDOWS API来做,WriteFile和ReadFileTop
2 楼wwbjt(Owen[欧文])回复于 2002-01-29 11:15:17 得分 0
SPComm里用的就是API函数Top
3 楼dy2712(大头)回复于 2002-01-29 11:23:53 得分 10
我做过好多串口设备的通讯,都是这么做的,没问题啊,空间我没用过,不知道怎么样。
Function OpenCommPort(const CommStr:array of char): integer;
var
sDcb:TDCB;
cComBuf:array[0..10]of char;
begin
lstrcpy(cCombuf,CommStr);
gComID := CreateFile(cCombuf,
GENERIC_READ or GENERIC_WRITE,
0, // comm devices must be opened w/exclusive-access
nil, // no security attrs
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
0, // not overlapped I/O
0); // hTemplate must be NULL for comm devices
if gComID < 0 then begin
Result := ERROR_ICURS232OPEN;
exit;
end;
SetupComm(gComID,1024,1024);
GetCommState(gComID,sDcb);
sDcb.BaudRate := CBR_9600;
sDcb.ByteSize := 7;
sDcb.parity := EVENPARITY;
sDcb.stopbits := ONESTOPBIT;
SetCommState(gComID,sDcb);
SetRWTimeOut(COMM_CHARTO, COMM_MUTITO, COMM_CONSTTO_DEFAULT);
Result := gComID;
end;
procedure CloseCommPort;
begin
CloseHandle(gComId);
end;
Function Send232Data(const SendStr:array of char;const SendLen:integer):integer;
var
iSendNums: Cardinal;
begin
PurgeComm(gComID, PURGE_TXCLEAR or PURGE_RXCLEAR);
if not WriteFile(gComId,SendStr,SendLen,iSendNums,nil) then begin
Result := ERROR_ICURS232WRITE;
exit;
end;
if (int(iSendNums) <> SendLen) then begin
Result := ERROR_ICURS232WRITEBADDATA;
exit;
end;
Result := iSendNums;
end;
Top
4 楼wwbjt(Owen[欧文])回复于 2002-01-29 11:40:23 得分 0
能介绍一下接收过程的处理吗?
也就是怎么通知程序有数据需要接收,谢谢Top
5 楼youou(红麦子&猪格格)回复于 2002-01-29 12:04:57 得分 0
这两个控件我都用过了,不会有这种问题发生的!Top
6 楼wwbjt(Owen[欧文])回复于 2002-01-31 08:32:57 得分 0
现在我才发现是MODEN在处理128以上字节出了问题,给分!Top




