vc2010串口通信(使用mscomm控件)

1.下载mscomm控件;

(下载地址:http://download.csdn.net/detail/tianhen791/4023983)

2.安装注册控件:下载完成后解压->点击setup.bat 即可此控件的安装和注册;

3.
[html]  view plain copy
  1. 添加->COM组件->Mircrosoft Communications Control, version 6.0  
  2. 拖mscomm拖至对话框,  
  3. 添加变量 m_comm  
  4. 添加事件 OnComm  
  5.   
  6. void CtestDlg::InitMsComm(void)  
  7. {  
  8. m_comm.put_CommPort(1);     // 选择COM1  
  9. m_comm.put_InBufferSize(1024);   // 指定接收缓冲区大小  
  10. m_comm.put_OutBufferSize(1024);// 指定发送缓冲区大小  
  11. m_comm.put_InputLen(0);     // 设置当前接收区数据长度为0,表示全部读取  
  12. m_comm.put_InputMode(1);    // 以二进制方式读写数据   
  13. m_comm.put_Settings(L"9600,N,8,1"); // 波特率9600无检验位,8个数据位,1个停止位  
  14. m_comm.put_RThreshold(1);    // 接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件  
  15. try   
  16. {   
  17.    m_comm.put_PortOpen(TRUE);  
  18. }   
  19. catch (...)   
  20. {   
  21.    AfxMessageBox(L"串口1打开失败");  
  22.    return;  
  23. }   
  24. m_comm.get_Input();      //先预读缓冲区以清除残留数据  
  25. }  
  26.   
  27. void CtestDlg::OnCommMscomm1()  
  28. {  
  29. // ==============串口数据接收过程===================   
  30. if(m_comm.get_CommEvent() == 2)   
  31. {   
  32.    COleSafeArray SafeArray = m_comm.get_Input(); //第一步   
  33.    int iLen = SafeArray.GetOneDimSize();    //第二步  
  34.    BYTE revBuf[1024];   
  35.    for(long i = 0;i < iLen; i++)   
  36.    {  
  37.     SafeArray.GetElement(&i, revBuf + i);  
  38.    }  
  39.   
  40. //对revBuf进行自己的处理  
  41.   
  42. }  
  43. }  
  44.   
  45. //================发送=================  
  46.   
  47. void CtestDlg::SendCommBuf(BYTE *pSendBuf, int count)  
  48. {  
  49. CByteArray m_Array;  
  50. m_Array.SetSize(count);  
  51. for(int i = 0; i < count; i++)  
  52. {  
  53.    m_Array.SetAt(i, pSendBuf[i]);  
  54. }  
  55. m_comm.put_Output(COleVariant(m_Array));  
  56. }  
  57.   
  58. void CtestDlg::OnBnClickedButton1()//发送示例  
  59. {  
  60. BYTE buf[3] = {0x11,0x12,0x13};  
  61. SendCommBuf(buf, 3);  
  62. }  

你可能感兴趣的:(vc2010串口通信(使用mscomm控件))