关于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));
},求高手详细解答,我出现的问题主要是,不能确定是否连接好?连接确定后,数据无法显示到相应的编辑框内。 展开
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));
},求高手详细解答,我出现的问题主要是,不能确定是否连接好?连接确定后,数据无法显示到相应的编辑框内。 展开
3个回答
2012-05-17
展开全部
楼主 先 用 其他的 串口调试工具,确保线路 通信 正常
然后 再 调试 程序
然后 再 调试 程序
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询