关于VC++串口通信问题 最近再做一个小的通信程序,我是用控件来做的,但是做完之后和单片机相连,不知道什

通信是什么状态。而且接收的数据无法显示,求高手解答,下面是我的程序://初始化部分串口功能//设置输入方式为1二进制,0为文本方式,此项决定了后面数据转换的类型m_ctr... 通信是什么状态。而且接收的数据无法显示,求高手解答,下面是我的程序://初始化部分串口功能//设置输入方式为1二进制,0为文本方式,此项决定了后面数据转换的类型
m_ctrlCMSComm.SetInputMode(1);//设置输入输出缓冲区大小,都是默认值
m_ctrlCMSComm.SetInBufferSize(1024);
m_ctrlCMSComm.SetOutBufferSize(512);
return TRUE; // return TRUE unless you set the focus to a control
}这是对话框部分,主要是确定串口和波特率,这里有个问题是,建立连接后,就不显示所选项了。
void CMy3Dlg::OnSelendokCombo1()
{
// TODO: Add your control notification handler code here
int value1;
value1=((CComboBox*)GetDlgItem(IDC_COMBO1))->GetCurSel();
switch(value1)
{
case 0: m_ctrlCMSComm.SetCommPort(1);break;
case 1: m_ctrlCMSComm.SetCommPort(2);break;
case 2: m_ctrlCMSComm.SetCommPort(3);break;
case 3: m_ctrlCMSComm.SetCommPort(4);break;
case 4: m_ctrlCMSComm.SetCommPort(5);break;
default : AfxMessageBox("信息错误");
}
}第二个对话框的初始化和这个差不多,由于字数限制就不写了

void CMy3Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
//判断串口开关状态,关的话就打开,开的话就执行
if(!m_ctrlCMSComm.GetPortOpen())
{
m_ctrlCMSComm.SetPortOpen(TRUE);
}
else
{
AfxMessageBox("串口已经打开");
}
/*串口打开之后进行数据接受,判断接受缓冲区字符状态来出发OnOnCommMscomm1事件,触发该事件后,程序就会执行该事件相应程序*/
m_ctrlCMSComm.SetRThreshold(1);//设置读取接受缓冲区数据,0为一次全部读取完
m_ctrlCMSComm.SetInputLen(0);//预读接受缓冲区,以清除残存数据
m_ctrlCMSComm.GetInput();}这是点击采集按钮的程序。
void CMy3Dlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
//前面引起此OnOnCommMscomm1事件,事件的触发,该部分主要是进行读取的数据转换,并把接收到的数据发送显示到组合框内
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
BYTE rxdata[2048];//设置一数组
CString strtemp;//临时存放数据
//该事件CommEvent持续发生,知道接受缓冲区的数据被读完.即等于2时就有数据,开始读取
if(m_ctrlCMSComm.GetCommEvent()==2)
{
variant_inp=m_ctrlCMSComm.GetInput();//读取缓冲区数据
safearray_inp=variant_inp;//数据传给safearray_inp
len=safearray_inp.GetOneDimSize();//得到数据有效长度
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
}
for(k=0;k<len;k++)//转换为CString型数组
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c,bt");//字符型
//将接受的数据送到显示组合框变量内
m_rxdata+=strtemp;
}
}
UpdateData(0);//数据更新到控件上,1把控件内容更新到变量上}
void CMy3Dlg::OnButton2()
{
// TODO: Add your control notification handler code here

UpdateData(1);//读取编辑框内容
m_ctrlCMSComm.SetOutput(COleVariant(m_txdata));

},求高手详细解答,我出现的问题主要是,不能确定是否连接好?连接确定后,数据无法显示到相应的编辑框内。
展开
 我来答
匿名用户
2012-05-17
展开全部
楼主 先 用 其他的 串口调试工具,确保线路 通信 正常

然后 再 调试 程序
量子002
2012-05-17 · TA获得超过4212个赞
知道大有可为答主
回答量:4082
采纳率:66%
帮助的人:910万
展开全部
找个示波器看一下232通信线上的电压波形,看看对不对,这最直接有效
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tfz3021
2012-05-22
知道答主
回答量:5
采纳率:0%
帮助的人:3.4万
展开全部
先断点试试缓存里面有没有收到数据。然后在看看显示的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式