高分:串口控件在win98和win2000下有什么不同?

chaojie2003 2004-04-12 05:39:06
在win2000下用串口控件写的软件通讯正常
在win98下用串口控件写的软件,通讯就经常出错
这主要是什么问题?
...全文
40 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangnanonnet 2004-04-15
  • 打赏
  • 举报
回复
对了,你还可以把串口的超时设的大一些。。这样读写数据都比较稳定,但是速度会受影响,你可以测试一下,找到最优化的值
COMMTIMEOUTS timeouts;

GetCommTimeouts(idComDev,&timeouts);
timeouts.ReadIntervalTimeout=ReadIntervalTimeout;
timeouts.ReadTotalTimeoutMultiplier=ReadTotalTimeoutMultiplier;
timeouts.ReadTotalTimeoutConstant=ReadTotalTimeoutConstant;
return SetCommTimeouts(idComDev,&timeouts);
shanhqk 2004-04-15
  • 打赏
  • 举报
回复
我也是刚开始学习,我想提出我的一点看法:
tempbyte = (para2>>8) & 0xff;位移本身就有一定的问题,存在一定的副面的影响,如果想用的话,我想最好还是改成tempbyte = (para2%256) & 0xff这样的话会好一点,还有就是在初始化串口的时候,在设置延时时,如果设置不好的话,也有一定的问题.我在做的时候出现了类似的问题,主要是因为延时设置的问题.
chaojie2003 2004-04-15
  • 打赏
  • 举报
回复
我用的是vc串口控件和单片机通讯,相互传输数据

void CCOMDlg::OnComm()
{
long len,k;
COleVariant myVar;
COleSafeArray safearray_inp;
BYTE rxdata[5]; //设置BYTE数组

switch(m_msComm.GetCommEvent())
{
case 2://事件值为2表示接收缓冲区内有字符

myVar.Attach (m_msComm.GetInput());

safearray_inp = myVar; //COleVariant型变量转换为ColeSafeArray型变量

len=safearray_inp.GetOneDimSize(); //验证得到有效数据长度
assert(len == 5);

for(k=0;k<len;k++) //len is 5 in normal case
safearray_inp.GetElement(&k,rxdata+k); //转换为BYTE型数组

HandleCommand(rxdata); //这是接收数据处理函数

break;
}
}

//发送

void CCOMDlg::SendCommand(unsigned char commandID,int para1,int para2)
{
BYTE strBuf[5],tempbyte;
CByteArray OutBuf;
COleVariant varOutput;

//命令字
strBuf[0] = commandID;

//地址高位
tempbyte = (para1>>8) & 0xff;
strBuf[1] = tempbyte;

//地址低位
tempbyte = para1 & 0xff;
strBuf[2] = tempbyte;

//数据高位
tempbyte = (para2>>8) & 0xff;
strBuf[3] = tempbyte;

//数据低位
tempbyte = para2 & 0xff;
strBuf[4] = tempbyte;

OutBuf.SetSize(5);
for(int i=0;i<5;i++)
OutBuf[i] = strBuf[i];
varOutput = OutBuf;
m_msComm.SetOutput(varOutput);
}

也不是完全不能通讯,就是通讯数据错误很多,我怀疑是98和2000对字节最高位的处理不一样

zhangnanonnet 2004-04-14
  • 打赏
  • 举报
回复
没什么影响应该
red-fly 2004-04-14
  • 打赏
  • 举报
回复
我在一个按钮的click里边,通过com1发送数据,然后在一个函数里边接收,试了好多次,只有第一次的时候,收到了正确的字符,后来再怎么试都是乱字符
不知道为什么

还有就是说,串口的接口有9,15,24针的,书上只说了9和24针的,而我买了一个游戏手柄,是15针的,没什么影响吧?
还有,如果我按手柄上边的按钮,通过com口是否可以接收到有关的消息?
(我在游戏手柄的设置里边,有方向钮和1,2,3,4钮可用)
zhangnanonnet 2004-04-14
  • 打赏
  • 举报
回复
还有就是看你的串口设备是什么了,是否支持低速传输
zhangnanonnet 2004-04-14
  • 打赏
  • 举报
回复
是的,但是我用9600通讯没有什么问题,你再检查一下
zhangnanonnet 2004-04-13
  • 打赏
  • 举报
回复
把波特率调低就可以了
itmaster 2004-04-13
  • 打赏
  • 举报
回复
具体出现哪些问题呢?
chaojie2003 2004-04-13
  • 打赏
  • 举报
回复
波特率调低也不行,好象是win98的稳定性没有win2000好吧
chaojie2003 2004-04-12
  • 打赏
  • 举报
回复
有谁遇过这种问题吗?

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧