MSComm控件收到一个字节数据产生中断,要接收{0x12,0x25,0x26}这串数据放在buffer【512】数组中的程序我要怎么写呢
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
BYTE rxdata[2048];
CString stremp;
if(m_serial.GetCommEvent()==2)
{
variant_inp=m_serial.GetInput();
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
stremp.Format("%c",bt);

}
这是中断响应的程序 我要加些什么代码 各位大神们

解决方案 »

  1.   

    m_ctrlComm.SetRThreshold(1);
    //参数1:1字节响应,这样的话可设置固定长度你要接收3字节就设定为3其中接收到的数据放在了rxdata中,你要用的话直接取出当到你的buffer[]中即可
      

  2.   

    我的是VS2005以上的版本,你得好象是VS2003版本的
    你对比一下定义及顺序,函数名不一样没关系,因为VC版本不一样,但你能看明白函数含义:
    void CMy72V300AView::OnCommMscomm1()
    {
    VARIANT variant_inp;
    COleSafeArray safearray_inp;
    long i = 0,len;
    switch (m_Comm1.get_CommEvent())
    {
    case 2:
    //表示接收缓冲区内有字符
    {variant_inp = m_Comm1.get_Input();
    safearray_inp = variant_inp;
    len = safearray_inp.GetOneDimSize();
    for (i = 0; i < len; i++)
    {
    safearray_inp.GetElement(&i, &m_ReceBuff[i]);   
    }   
    m_Comm1.put_OutBufferCount(0);// '清空发送缓冲区
    m_Comm1.put_InBufferCount(0);// '滑空接收缓冲区
    safearray_inp.Clear();
    }
    break;
    default:
    break;
    }
    }
    串口初始化:
    view1->m_Comm1.put_CommPort(1); //串口1
    view1->m_Comm1.put_InBufferSize(4096); //设置输入缓冲区的大小,Bytes   
    view1->m_Comm1.put_OutBufferSize(2048); //设置输入缓冲区的大小,Bytes   
    if(!view1->m_Comm1.get_PortOpen()) //打开串口
    {
    view1->m_Comm1.put_PortOpen(true);   
    }
    view1->m_Comm1.put_OutBufferCount(0);// '清空发送缓冲区
    view1->m_Comm1.put_InBufferCount(0);// '滑空接收缓冲区view1->m_Comm1.put_InputMode(1); //设置输入方式为二进制方式   
    view1->m_Comm1.put_Settings(str); //设置波特率等参数   
    view1->m_Comm1.put_RThreshold(8); //为8表示有8个字符即引发事件   
    view1->m_Comm1.put_InputLen(0);
    这是发送函数:
    int i,Count;
    BYTE SendBuff[8];
    CByteArray Array;
    Count=8;
    Array.RemoveAll();
    Array.SetSize(Count);SendBuff[0]=0;
    SendBuff[1]=0;
    SendBuff[2]=0;
    SendBuff[3]=0;
    SendBuff[4]=0x55;
    SendBuff[5]=0xaa;
    SendBuff[6]=0x55;
    SendBuff[7]=0xaa;
    for(i=0;i<Count;i++)
    Array.SetAt(i,SendBuff[i]);
    m_CurrentCommandId=2;
    m_Comm1.put_OutBufferCount(0);
    // m_Comm1.put_InBufferCount(0);m_Comm1.put_Output(COleVariant(Array));  
     
     
     
      

  3.   

    回复3楼:
    但是怎么把{0x12,0x25,0x26}这个数据存到一个bufer【】中 ,我还是没懂啊
      

  4.   

    case 2:
    //表示接收缓冲区内有字符
    {variant_inp = m_Comm1.get_Input();
    safearray_inp = variant_inp;
    len = safearray_inp.GetOneDimSize();
    for (i = 0; i < len; i++)
    {
    safearray_inp.GetElement(&i, &bufer[i]);//你这么改这句就行了
    }   
    m_Comm1.put_OutBufferCount(0);// '清空发送缓冲区
    m_Comm1.put_InBufferCount(0);// '滑空接收缓冲区
    safearray_inp.Clear();
    }
    break;