VC6.0 MFC编写串口通信使用MSComm控件编写最简单的收发程序

callous_tu 2012-06-11 08:43:49
各位大虾,我用MSComm控件编写了一个最简单的串口通信程序,主要是为了给单片机发命。我用串口线连接2台电脑,下了串口调试助手,两台机器可以通信。等我用程序的时候,用调试助手给程序发01010这样的代码,程序直接报错。

debug assertion failed!

我查了相关资料,说是程序中有野指针(问题是我没有定义指针),最后想到是可能是MSComm控件里有ASSERT()或VERIFY()语句,但是实在不知道如何解决。请大神指导
...全文
844 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
昨夜无风 2012-06-13
  • 打赏
  • 举报
回复
是接收不到还是你发的不对,改一下试试:

void kongzhixianlu::Onsend()
{
// TODO: Add your control notification handler code here
UpdateData();
m_mscomm.SetOutput(COleVariant(m_str_send));
}
callous_tu 2012-06-13
  • 打赏
  • 举报
回复
ths 楼上。程序已经改好了 但是我上面发的那个程序,不知道有什么问题。发送的数据,接收不到
tiger波波 2012-06-12
  • 打赏
  • 举报
回复
程序接收代码贴上来看看,用控件很简单啊
callous_tu 2012-06-12
  • 打赏
  • 举报
回复
thanks,我试试
tiger波波 2012-06-12
  • 打赏
  • 举报
回复
http://dev.yesky.com/231/2309731_2.shtml

这上边的例子先设置,再打开,你试试
callous_tu 2012-06-12
  • 打赏
  • 举报
回复
BOOL kongzhixianlu::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
// if(m_mscomm.GetPortOpen()) //如果串口已打开,则关闭串口
// m_mscomm.SetPortOpen(FALSE);
m_mscomm.SetCommPort(1);//xuan zhe com1
if(!m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(TRUE);
else
AfxMessageBox("SERIAL PORT OPEN ERROR");
m_mscomm.SetSettings("9600,n,8,1");////波特率9600,无校验,8位数据位,1停止位
m_mscomm.SetRThreshold(1);//串口接受缓冲区中有多或等于一个字符时,将产生接受数据的oncomm事件
m_mscomm.SetInputLen(0);//设置当前接收区数据长度为0
m_mscomm.GetInput();//预读缓冲区以清除残留数据

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

void kongzhixianlu::Onsend()
{
// TODO: Add your control notification handler code here
m_mscomm.SetOutput(COleVariant(m_str_send));
}


上面就是接收和发送

void kongzhixianlu::OnOnCommMscomm()
{
// TODO: Add your control notification handler code here
VARIANT variant_tmp; //jian li zhuan huan shuju yao de bianliang
COleSafeArray safearray_tmp;
long len,i;
BYTE buf[2048];
CString str_tmp;

if(m_mscomm.GetCommEvent()==2) //接受缓冲区有字符
{
variant_tmp=m_mscomm.GetInput(); //du huanchong qu
safearray_tmp=variant_tmp; //zhuan huawei ColeSafeArray
len=safearray_tmp.GetOneDimSize();
for (i=0;i<len;i++)
{
BYTE ch=*(char*)(buf+i);

str_tmp.Format("%c",ch);//jiang zifu yiASCII fang shi xian shi
m_str_recv+=str_tmp; // jia ru jie shou shu ju kuang duiying zi fu chuan
}
}
UpdateData(FALSE); //更新接受数据框内容
}
这个是转换字符数据

我把debug换成release了。现在是不报错了,但是用串口助手在两台机器上实验,还是不通信。请指教
kejie1235 2012-06-11
  • 打赏
  • 举报
回复
应该是断言失败 ,你可以把Debug换成Release 试试

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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