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


1.下載mscomm控件;

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

2.安裝注冊控件:下載完成后解壓->點擊setup.bat 即可此控件的安裝和注冊;

3.
添加->COM組件->Mircrosoft Communications Control, version 6.0
拖mscomm拖至對話框,
添加變量 m_comm
添加事件 OnComm

void CtestDlg::InitMsComm(void)
{
m_comm.put_CommPort(1);     // 選擇COM1
m_comm.put_InBufferSize(1024);   // 指定接收緩沖區大小
m_comm.put_OutBufferSize(1024);// 指定發送緩沖區大小
m_comm.put_InputLen(0);     // 設置當前接收區數據長度為0,表示全部讀取
m_comm.put_InputMode(1);    // 以二進制方式讀寫數據 
m_comm.put_Settings(L"9600,N,8,1"); // 波特率9600無檢驗位,8個數據位,1個停止位
m_comm.put_RThreshold(1);    // 接收緩沖區有1個及1個以上字符時,將引發接收數據的OnComm事件
try 
{ 
   m_comm.put_PortOpen(TRUE);
} 
catch (...) 
{ 
   AfxMessageBox(L"串口1打開失敗");
   return;
} 
m_comm.get_Input();      //先預讀緩沖區以清除殘留數據
}

void CtestDlg::OnCommMscomm1()
{
// ==============串口數據接收過程=================== 
if(m_comm.get_CommEvent() == 2) 
{ 
   COleSafeArray SafeArray = m_comm.get_Input(); //第一步 
   int iLen = SafeArray.GetOneDimSize();    //第二步
   BYTE revBuf[1024]; 
   for(long i = 0;i < iLen; i++) 
   {
    SafeArray.GetElement(&i, revBuf + i);
   }

//對revBuf進行自己的處理

}
}

//================發送=================

void CtestDlg::SendCommBuf(BYTE *pSendBuf, int count)
{
CByteArray m_Array;
m_Array.SetSize(count);
for(int i = 0; i < count; i++)
{
   m_Array.SetAt(i, pSendBuf[i]);
}
m_comm.put_Output(COleVariant(m_Array));
}

void CtestDlg::OnBnClickedButton1()//發送示例
{
BYTE buf[3] = {0x11,0x12,0x13};
SendCommBuf(buf, 3);
}



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com