利用 MFC 實現串行通信
發表于:2007-07-14來源:作者:點擊數:
標簽:
吉林大學 尚金瑞 在微軟公司推出的Visual C++中,不僅可以利用串行通信控件或調用 Windows API來進行串行通信,而且可以利用MFC CFile類來實現串行通訊。這種通信方式與訪問磁盤普通文件沒有太大不同。較簡單的實現方式是利用VC++中的MFC向導建立一個支持MFC
吉林大學 尚金瑞
在微軟公司推出的Visual C++中,不僅可以利用串行通信控件或調用
Windows API來進行串行通信,而且可以利用MFC CFile類來實現串行通訊。這種通信方式與訪問磁盤普通文件沒有太大不同。較簡單的實現方式是利用VC++中的MFC向導建立一個支持MFC的工作臺工程,添入如下相關代碼即可。
1)打開一個串口需使用:
CFile file;
CFileException e;
file.Open (
portName, //example "COM1","COM2"
CFile::modeReadWrite,
&e);
2)關閉一個串口需使用:
file.Close();
3)從端口進行讀操作,需使用:
char m_ReadBuff[UINT?。頬;
UINT nByte=file.Read (
&m_ReadBuff, //buffer to store byte
UINT nCount //number of bytes to read
);
4)從端口進行寫操作,需使用:
char m_WriteBuff[UINT?。頬;
file.Write (
&m_WriteBuff, //buffer to store byte
UINT nCount //number of bytes to write
);
5)配置串口
串行端口創建時,必須對其進行設置以匹配與其對話的設備。雖然可以通過操作系統設置這些參數,但也可以用Windows API 中的SetCommState()函數來設置它們。一般地,可用如下程序設置它們:
DCB dcb;
::GetCommState( (HANDLE)file.m_hFile, &dcb );
dcb.BaudRate = 1200,…;
dcb.ByteSize = 7 or 8;
dcb.StopBits = 0,1,2=0,1.5,2;
dcb.Parity = 0-4=no,odd,even,mark,space;
::SetCommState((HANDLE)file.m_hFile, &dcb );
為了更好地控制端口可以利用SetCommTimeouts()函數打開或關閉超時功能,具體程序如下:
COMMTIMEOUTS cto;
::GetCommTimeouts((HANDLE)file.m_hFile , &cto );
cto.ReadIntervalTimeout =0;
cto.ReadTotalTimeoutMultiplier =0;
cto.ReadTotalTimeoutConst
ant =0;
cto.WriteTotalTimeoutMultiplier=0;
cto.WriteTotalTimeoutConstant =0;
::SetCommTimeouts((HANDLE)file.m_hFile , &cto );
采用上面的程序,利用MFC CFile類進行串行通信,代碼簡單、編程量小,可應用于在線監測、自動化控制等許多方面,對科研、生產有著廣泛的實用價值。
原文轉自:http://www.anti-gravitydesign.com