//下位机部份代码
switch (yRead)
{
case 'V' : // Vol
fnSendData (255) ;
break ;
//上位机部份代码
void CMultimeterDlg::OnCommMscomm()
{
// TODO: Add your message handler code here
VARIANT vrt ;
CString str ;
if (m_ctrlMScomm.get_CommEvent () == 2)
{
vrt = m_ctrlMScomm.get_Input () ;
str = vrt.bstrVal ; 
GetDlgItem (IDC_SHOW) ->SetWindowTextW (str) ;
}
}
//发送方式是文本方式
m_ctrlMScomm.put_InputMode (0) ;
当我发送V时,单片机fnSendData (64) ;IDC_SHOW显示该ASCii码对应得字符,但是下位机改成fnSendData (255); 就不显示了,是因为ascii码最高到127么?关键的来了,下位机是fnSendData (255); 的时候,我的上位机不要显示ascii码,想显示255或0xff怎么办。

解决方案 »

  1.   

    str = vrt.bstrVal ; 
    这句改成vrt的字节类型就行了(我忘了具体名了,就象你的字符型是:bstrval,它的字节好象类似byteVal,可能不对,你可以查到具体是什么名字,没有字节类型就改成short,这个我记得肯定有),其实数据上位机已收到了,只不过显示的事,
      

  2.   

    下面的代码就是接收到数据保存在字节数组里,至于想显示什么数据比如0XFF,那就是看你想怎么转换显示了
    BYTE m_ReceBuff[100];
    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;
    }
    }
      

  3.   

    void CMultimeterDlg::OnCommMscomm()
    {
    // TODO: Add your message handler code here
    VARIANT vrt ;
    CString str ;
    BYTE temp ;
    if (m_ctrlMScomm.get_CommEvent () == 2)
    {
    vrt = m_ctrlMScomm.get_Input () ;
    temp = vrt.bVal ; 
    str.Format (_T ("%x"), temp) ;
    GetDlgItem (IDC_SHOW) ->SetWindowTextW (str) ;
    }
    }
    接受到的不是FF,而且是时变的