新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用VC實現PC機與單片機的通信

        用VC實現PC機與單片機的通信

        作者: 時間:2012-03-19 來源:網絡 收藏

        在工業檢測及自動控制系統中,微機與微機、微機與之間經常需要進行數據交換,串行是主要的手段,它高效、方便,并遵循統一的國家標準。 Visual C++ 6.0作為一種強大的開發工具幾乎在Windows軟件開發的任何領域都得到廣泛的應用。一般用Visual C++ 6.0開發串行程序有二種方法:一是利用Windows的通信 API函數;另一種是采用Visual C++ 6.0標準控件MSComm來。第一種方法需要聲明及調用許多API函數,十分煩瑣。第二種方法簡便,且可滿足一般情況下通信要求。本文利用Visual C++ 6.0提供的MSComm通信控件編寫較簡單的程序, 完成了微機與之間的 RS-232串行口通信。

        本文引用地址:http://www.104case.com/article/171851.htm

        1、硬件結構

        微機的COM口接口電平為RS-232標準,若兩臺微機間通信,只需簡單地直接連接(TXD RXD)及地(GND)三根線。若微機與通信,由于單片機UART為TTL電平,故需將RS-232電平與TTL電平轉換,可直接使用 MAX232,MC1489等電平轉換功能。

        2、串行通信控件MSComm

        環境下單擊Project菜單,從中選擇Add to Project,在彈出的對話框中單擊Components and Controls選項,然后在彈出的對話框中再單擊Registered ActiveX Controls選項。在列表中選擇Microsoft Communications Control (version6.0),形狀為帶有紅色底座的黃色電話機。單擊Insert按鈕,確認后,會出現一個Confirm Classes對話框,其中列出了該控件的類名(CMSComm)、頭文件名(MSComm.h)、執行文件名(MSComm.cpp)。關閉此對話框,在程序主界面的控件列表中,可以看到該通信控件已被加入,拖動該控件就可以將其放入程序中。

        MSComm控件提供了功能完善的串口數據的發送和接收功能, MSComm控件具有兩種處理方式: 1、事件驅動方式:由MSComm控件的OnComm事件捕獲并處理通信錯誤及事件;2、查詢方式:通過檢查CommEvent屬性的值來判斷事件和錯誤。

        MSComm控件的通信功能實現,實際上是調用了API函數,而API函數是由Comm.drv解釋并傳給設備驅動程序執行的,對于程序開發者只需知道MSComm控件的屬性和事件的用法即可以實現串口的操作。

        以下是MSComm控件的主要屬性和方法:
          1) CommPort:設置或返回串行端口號,其取值范圍為1~99,缺省為1。
          2) Setting:設置或返回串行端口的波特率、奇偶校驗位、數據位數、停止位。如:M scomm.Setting=9600,N,8,1。
          3) PortOpen:打開或關閉串行端口,格式為:MSComm.PortOpen={T RUE|FALSE}。
          4) InBufferSize:設置或返回接收緩沖區的大小,缺省為1024字節。
          5) InBufferCount:返回接收緩沖區內的等待讀取的字節個數,可通過設置該屬性為0來清除接收緩沖區。
          6) Rthreshold:該屬性為一閥值,它確定當接收緩沖區內字節個數達到或超過該值后就產生代碼為MSCOMM_EV_RECEIVE的OnComm事件 。
          7) InputLen::設置或返回接收緩沖區內用Input讀入的個數。若取0,則INPUT讀取整個緩沖區的內容。
          8) Input: 該屬性表示從接收緩沖區移走一串字符。 類型:VARIANT。
          9) OutBufferSize:設置或返回發送緩沖區,缺省為512字節。
          10) OutBufferCount:返回發送緩沖區內等待發送的字符數,可用來清空緩沖區。
          11) Output:向發送緩沖區傳送一字符串。類型:VARIANT。

        如果在通信過程中發生錯誤或事件,就會引發OnComm事件并且改 變屬性值,由CommEvent屬性代碼反映錯誤類型,在通信程序的設計中 可根據該屬性值來執行不同的操作,以下是部分屬性常數值及其含義:
          1) ComEvSend: 其值為1,發送緩沖區的內容少于SThreshold指定 的值。
          2) ComEvReceive: 其值為2,接收緩沖區內字符數達到 RThreshold 值,該事件在緩沖區中數據被移走前將持續產生。
          3) ComEventFrame: 其值為1004,硬件檢測到幀錯誤。
          4) ComEventRxOver:其值為1008,接收緩沖區溢出。
          5) ComEventTxFull: 其值為1010,發送緩沖區溢出。
          6) ComEventRxParity:其值為1009,奇偶校驗。
          7) ComEvEOF: 其值為7,接收數據中出現文件結束(ASCII 碼為 2 6)字符。

        3、串口通信微機程序設計

        下面程序可實現簡單通信,程序主要有兩個編輯框,一為發送,用戶在此編輯框內鍵入字符將通過串口發送出去;另一為接收,顯示串口接收到字符。如在兩臺微機相連,分別運行此程序,即可實現兩機之間通信。具體實現步驟如下:

        1)啟動Visual C++ 6.0,創建一名為Chat應用程序項目,程序類型為Dialog based。

        2)如2所述在應用程序中插入通信控件。

        3)MFC的ClassWizard 對話框的Member Variables選項卡如下所示

        27.gif


        上一頁 1 2 3 下一頁

        關鍵詞: 通信 單片機 PC 實現 VC

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 马关县| 洛扎县| 防城港市| 凌源市| 桑植县| 雷州市| 商都县| 八宿县| 霍林郭勒市| 康乐县| 南京市| 贵港市| 安阳市| 海南省| 旬阳县| 东光县| 福鼎市| 龙游县| 忻城县| 漯河市| 全州县| 永城市| 当阳市| 当涂县| 吴江市| 太仓市| 繁峙县| 大城县| 工布江达县| 鸡泽县| 兴宁市| 太仓市| 加查县| 永春县| 涞水县| 高青县| 理塘县| 拜泉县| 陆河县| 阿合奇县| 舟山市|