串口通讯问题,请教各位高手

singlewolf81 2005-12-17 11:23:09
小弟在编写串口通讯时,遇见一个问题,百思不得其解,希望各位高手指点:

我在向串口发送break讯号时,出现一个很奇怪的现象;
if(m_strSend=="break") //break的控制字符
{
m_Com.SetBreak(true);
delay();
m_Com.SetBreak(false);
}

void CMfcCommDlg::delay()//延时
{
for(int i=0;i<1000000;)
i++;
}

中间延时的i不一样,接受到的信号也不一样.如果是1000000,接收到的是break信号.如果是100,1000,10000,99999,什么的 接收到的不一样,有fc,fe ,c0//16进制.这是为什么?
...全文
129 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
singlewolf81 2005-12-23
  • 打赏
  • 举报
回复
应该是没有设置错.
我试了一下,和延时采用的方式也没关系.我仔细分析了一下数据.不管是fc,fe,还是c0都有一个特点.fc的二进制是11111100,fe二进制是11111110,c0二进制是11000000也就是说无论什么数据,前后都可以用一串1和一串0分开.而且延时越长,0的个数越多.我在想:是不是m_Com.SetBreak(true);将引脚置为低电平,所以先发一定数量的0,而SetBreak(false)重新将引脚置高,所以发一定数量的高电平.中间的延时不一样就导致发出的0,1 个数不一样.
我只是这么想的,大家看看觉得有问题吗?或者还 有什么别的解释?又怎么样才可以精确控制发送一个break呢?
Mr-Chen 2005-12-21
  • 打赏
  • 举报
回复
void CMfcCommDlg::delay(long time)//延时
{
DWORD strat;
strat=GetTickCoutnt();
do
{
}
while(GetTickCoutnt()-strat<time);
}
DISCIP_1 2005-12-19
  • 打赏
  • 举报
回复
mscomm有几个属性,你是不是选择乱了。你好好看看默认的是什么/

2,643

社区成员

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

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