程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 用C++ Builder編程實現串行通信

用C++ Builder編程實現串行通信

編輯:vc教程

用C++ Builder來編寫串行通信程序, 我們需要用到幾個Windows API函數,而不象在DOS 下那樣直接操作串口和中斷芯片.這幾個函數有OpenFile, CloseFile, GetCommState, SetCommState等,Microsoft的Visual Basic中有一個OCX控件MSComm32,在VB用它做串行通信設備很方便, 將它裝入Builder 3中, 它的Input和Ouput屬性是Unknown, 即 Builder 3不認識MSComm32的這兩個屬性, 我們升級到Borland的C++ Builder 4.0,在 Object Inspector中將不再看到這兩個屬性, 但它們仍然存在, 這兩個屬性的類型是 OleVariant,也就是Ole萬能變量,使用這種類型的方法如下:

在要發送數據時,我們聲明一個發送數據緩沖區,然後重置它的大小,填充它的元 素,發送它,例如:

buff[200];  //請聲明為全局變量

OleVariant TxBuff;  //聲明一個OleVariant變量

Txbuff=VarArrayCreat(OPENARRAY(int,(0,n)),varByte); //重置它的大小,為0~n,int為n的類型,varByte為TxBuff每一個元素的類型。

for(int i=0;i<n=1;i++)

Txbuff.PutElement(buf[i],i);  //填充元素其中buff為你定義的一個固定數組,其中有你要發的數據

MsComm1->Output=TxBuff;  //發送數據,MSComm1為你方在窗體上的一個MSComm32控件。

接收數據時請看下面的例子:

int buff[200];  //聲明一個存儲接收數據的緩沖區,全局變量<br>
int ByteNum;  //收到的字節數
int BuffPtr;  //接收緩沖區的指針,請聲明為全局變量。
OleVariant RxBuff;  //一個用於接收的OleVariant變量。
if(MSComm1-> InBuffCount>0)
RxBuff=Communica1->Input;  //如果緩沖區有多於一個字節的數據
ByteNum=RxBuff.ArrayHighBound(1);  //將實際讀的字節數取出
for(int i=0;i<=ByteNum;i++)<br>
{
 buff[BuffPtr++]=RxBuff.GetElement(i);
}

//將接收數據讀入自己的緩沖區。

在Object Inspector的Event標簽中只有一個事件OnComm, 這個事件在MSComm32控件接收到數據時會被調用,但你必須設置TThreshold屬性,這是一個門檻,表示收到幾 個字節就發送通知消息,如果為零,就不發送通知消息,這樣你的OnComm函數就不會得 到執行,TThreshold是發送門檻,不要忘記Setting。

另外值得注意的是MSComm32的OnComm事件不是很准確,有時會丟失,你不能過分依 賴這個事件,否則,經常發生的不是發不出數據,就是接收不到數據,最好的辦法是使 用一個定時控件,需要的時候就區讀MSComm32控件的緩沖區。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved