資源描述:
《vc基于mscomm控件串口通訊》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、VC基于MSCOMM控件串口通訊2010-03-2416:46在mfc中進(jìn)行串口通訊最簡單的方法莫過于在對話框中使用MSCOMM控件了,MSComm通信控件提供了一系列標(biāo)準(zhǔn)通信命令的接口,它允許建立串口連接,可以連接到其他通信設(shè)備(如Modem).還可以發(fā)送命令、進(jìn)行數(shù)據(jù)交換以及監(jiān)視和響應(yīng)在通信過程中可能發(fā)生的各種錯誤和事件,從而可以用它創(chuàng)建全雙工、事件驅(qū)動的、高效實用的通信程序。一、用MSComm控件通信1.串口通信基礎(chǔ)知識????一般悅來,計算機(jī)都有一個或多個串行端口,它們依次為com1、Com2、…,這些串口還提供了外部設(shè)備與pC進(jìn)行數(shù)據(jù)傳輸和皿信的通道。這些串口在CPU
2、和外設(shè)之間充當(dāng)解釋器的角色。當(dāng)字符數(shù)據(jù)從CPU發(fā)送給外設(shè)時,這些字符數(shù)據(jù)將被轉(zhuǎn)換成串行比特流數(shù)據(jù);當(dāng)接收數(shù)據(jù)時,比特流數(shù)據(jù)被轉(zhuǎn)換為字符數(shù)據(jù)傳遞給CPU,再進(jìn)一步說,在操作系統(tǒng)方面,Windows用通信驅(qū)動程序(COMM.DRV)調(diào)用API函數(shù)發(fā)送和接收數(shù)據(jù),當(dāng)用通信控件或聲明調(diào)用API函數(shù)時,它門由COMM.DRV解釋并傳遞給設(shè)備驅(qū)動程序,作為一個vB程序員,要編寫通信程序.只需知道通信控件提供給Windows通信AP1函數(shù)的接口即可.換句話說,只需設(shè)定和監(jiān)視通信控件的屬性和事件即可。2.使用Mscomm控件在開始使用MSComm控件之前。需要先了解其屬性、事件或錯誤屬性???
3、?????????描述CommPort????設(shè)置或返回通信端口號Settings????以字符串的形式設(shè)置或返回波特率、奇偶校驗、數(shù)據(jù)位和停止位PortOpen????設(shè)置或返回通信端口的狀態(tài)。也可以打開和關(guān)閉端口Input???????返回和刪除接收緩沖區(qū)中的字符Output??????將字符串寫入發(fā)送緩沖區(qū)CommEvent屬性為通信事件或錯誤返回下列值之一。在該控件的對象庫中也可以找到這些常量。常量???????????值????????描述ComEventBreak???1001????收到了斷開信號ComEventCTSTO???1002????ClearToSen
4、dTimeout。在發(fā)送字符時,在系統(tǒng)指定的事1件內(nèi),CTS(ClearToSend)線是低電平ComEventDSRTO???1003????DataSetReadyTimeout。在發(fā)送字符時,在系統(tǒng)指定的事件內(nèi),DSR(DataSetReady)線是低電平ComEventFrame???1004????數(shù)據(jù)幀錯誤。硬件檢測到一個數(shù)據(jù)幀錯誤ComEventOverrun1006????端口溢出。硬件中的字符尚未讀,下一個字符又到達(dá),并且丟失ComEventCDTO????1007????CarrierDetectTime。在發(fā)送字符時,在系統(tǒng)指定的事件內(nèi),CD(Carrie
5、rDetect)線是低電平。CD????????????????????????也稱為RLSD(ReceiveLineSingalDetect,接收線信號檢測)ComEventRxOver??1008????接收緩沖區(qū)溢出。在接收緩沖區(qū)中沒有空間ComEventRxParity1009???奇偶校驗錯。硬件檢測到奇偶校驗錯誤7ComEventTxFull??1010????發(fā)送緩沖區(qū)滿。在對發(fā)送字符排隊時,發(fā)送緩沖區(qū)滿ComEventDCB?????1011????檢取端口DCB(DeviceControlBlick)時發(fā)生了沒有預(yù)料到的錯誤通信事件包含了下面的設(shè)置:常量???
6、??????值????????描述ComEvSend??????1????發(fā)送緩沖區(qū)中的字符數(shù)比Sthreshold值低ComEvReceive???2????接收到了Rthreshold個字符。持續(xù)產(chǎn)生該事件,直到使用了Input屬性刪除了接收緩沖區(qū)中的數(shù)據(jù)ComEvCTS???????3????CTS(ClearToSend)線改變ComEvDSR???????4????DSR(DataSetReady)線改變。當(dāng)DSR從1到0改變時,該事件發(fā)生ComEvCD????????5????CD(CarrierDetect)線改變ComEvRing6檢測到響鈴信號。一些URAT(
7、UniversalAsynchronousReciver-????????????????????-Transmitters,通用異步收發(fā)器)不支持該事件ComEvEOF???????7????收到了EOF字符(ASCII字符26)Error消息(MSComm控件)下表列出了MSComm控件可捕獲的錯誤消息:常量???????????????????????值??????描述ComInvalidPropertyValue????380???無效的屬性值ComSetNotSupported??