问一个串口编程很菜的问题!(100分)

  • 主题发起人 主题发起人 gamblegod
  • 开始时间 开始时间
G

gamblegod

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟最近在编一个串口与单片机通信的程序,用的OCX控件MSCOMM,
我设置的传输模式是二进制方式。我要将一个字节数组通过串口发送给
单片机,请各位高手指教怎么发送(主要是output属性是variant类型,
小弟感觉很难办)?我的处理如下:
BinStr:OleVariant;
SendBytes:Array[1..6] of Bytes;
....
BinStr:= VarArrayCreate([0,Max_CTLLen],varByte);
for i:=1 to 6 do
BinStr:=SendBytes;
Output:=BinStr;
我检查OutBufferCount总是为0,表示根本没有发送数据,是什么原因?

 
你可以用Spcomm,它可以直接用来发送字节数组
 
//agree ljfree
spcomm控件很棒的
你可以用spcomm为关键字搜索一下已答问题
spcoom控件可以从历险上当
 
主要原因是我对MSComm已经很熟了,我想,如果用MSComm实现更节约时间(因为
老板催来很紧,还有个问题,就是怎么查看数据怎么已从串口发送出去了?我用的
方法是在调试的时候查看outbufferCount的值,不知道可以吗?
 
你可以做一个接受的程序检查阿
你的机器上有两个串口吧?
可以一发一收,把发送调通后,再调单片机
 
下面是小弟写串口的部分程序,请各位高人给指点指点:
procedure TRWForm.WriteButtonClick(Sender: TObject);
var
BinStr:OleVariant;
pTempWA:pWriteArray;//三字节字符数组指针
i:integer;
begin
{初始化MSComm}
with MSComm1 do
begin
CommPort:=PortComboBox.ItemIndex+1; //指定通信端口
InBufferCount:=0;//清空接收缓冲区
InputLen:=0;//Input读取整个缓冲区的内容
RThreshold:=1;//1byte

PortOpen:=True;//打开串口
DTREnable:=True;//数据终端准备好
RTSEnable:=True;//请求发送
//开始发送控制帧数据
TempComm.CreateWriteIDFrame;//创建CRC编码控制帧

BinStr:= VarArrayCreate([1,UserAddrLen+1],varByte);
pTempWA:=VarArrayLock(BinStr);
try
for i:=1 to UserAddrLen do
pTempWA^:=TempComm.WriteIDFrame;//发送字节
finally
VarArrayUnlock(BinStr);
end;
Output:=BinStr;
PortOpen:=Fasle;
end;
我在调试的时候在执行完成output后,检查outbuffercount老是为0,哎,死定了!!!
 
哈哈,该分红了。
 
后退
顶部