串口通信實(shí)踐課件_第1頁(yè)
串口通信實(shí)踐課件_第2頁(yè)
串口通信實(shí)踐課件_第3頁(yè)
串口通信實(shí)踐課件_第4頁(yè)
串口通信實(shí)踐課件_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

7.串行通信實(shí)踐*主要內(nèi)容7.1.物理層標(biāo)準(zhǔn)接口

7.1.1.DTE與DCE7.1.2.典型的物理層標(biāo)準(zhǔn)接口(1)7.1.3.典型的物理層標(biāo)準(zhǔn)接口(2)7.2.

RS-232串行通信技術(shù)

7.2.1.RS-232C標(biāo)準(zhǔn)介紹

7.2.2.簡(jiǎn)單的串行通信協(xié)議的設(shè)計(jì)7.3.串行通信程序設(shè)計(jì)

7.3.1.MSComm控件介紹

7.3.2.使用開(kāi)發(fā)串行口通信軟件

7.3.3.使用VC++開(kāi)發(fā)串行口通信軟件

*7.1.1.DTE與DCEDTE(DataTerminalEquipment)又稱數(shù)據(jù)終端設(shè)備,指數(shù)據(jù)輸入、輸出設(shè)備和傳輸控制器或者計(jì)算機(jī)等數(shù)據(jù)處理裝置及其通信控制器。DCE(DataCircuit-TerminatingEquipment)又稱數(shù)據(jù)電路終端設(shè)備,指自動(dòng)呼叫設(shè)備、調(diào)制解調(diào)器(Modem)以及其它一些中間裝置的集合。DTE的基本功能是產(chǎn)生、處理數(shù)據(jù);DCE的基本功能是沿傳輸介質(zhì)發(fā)送和接收數(shù)據(jù)。*7.1.2.典型的物理層標(biāo)準(zhǔn)接口(1)EIARS-232C是由美國(guó)電子工業(yè)協(xié)會(huì)EIA在1969年頒布的串行物理接口標(biāo)準(zhǔn)。RS的意思是“推薦標(biāo)準(zhǔn)”232是標(biāo)識(shí)號(hào)碼后綴“C”則表示該推薦標(biāo)準(zhǔn)已被修改過(guò)的次數(shù)。EIARS-232C接口標(biāo)準(zhǔn)是一種串行物理接口標(biāo)準(zhǔn),提供了一個(gè)利用公共電話網(wǎng)絡(luò)作為傳輸介質(zhì),并通過(guò)調(diào)制解調(diào)器將遠(yuǎn)程設(shè)備連接起來(lái)的技術(shù)標(biāo)準(zhǔn);*EIARS-232C用于控制DTE與DCE之間的通信公共電話交換網(wǎng)DTE計(jì)算機(jī)DCEMODEMRS-232-C接口DTE計(jì)算機(jī)DCEMODEMRS-232-C接口*RS-232-C特性(1)機(jī)械特性連接器:由于RS-232C并未定義連接器的物理特性,因此,出現(xiàn)了DB-25、DB-15和DB-9各種類型的連接器,其引腳的定義也各不相同。下面分別介紹DB-25、DB-9兩種連接器。*RS-232-C功能特性DTETXDRXDRTSCTSDSRSGNDDCDPGNDDTRRTRxCTxC*RS-232-C:DB-9(2)DB-9連接器

在AT機(jī)及以后,不支持20mA電流環(huán)接口,使用DB-9連接器,作為提供多功能I/O卡或主板上COM1和COM2兩個(gè)串行接口的連接器。它只提供異步通信的9個(gè)信號(hào)。DB-9型連接器的引腳分配與DB-25型引腳信號(hào)完全不同。因此,若與配接DB-9型連接器的DCE設(shè)備連接,必須使用專門的電纜線。

電纜長(zhǎng)度:在通信速率低于20kb/s時(shí),RS-232C所直接連接的最大物理距離為15m(50英尺)。

最大直接傳輸距離說(shuō)明:RS-232C標(biāo)準(zhǔn)規(guī)定,若不使用MODEM,在碼元畸變小于4%的情況下,DTE和DCE之間最大傳輸距離為15m(50英尺)??梢?jiàn)這個(gè)最大的距離是在碼元畸變小于4%的前提下給出的。**RS-232-C特性(2)電氣特性EIA-RS-232C對(duì)電器特性、邏輯電平和各種信號(hào)線功能都作了規(guī)定。在TxD和RxD上:邏輯1(MARK)=-3V~-15V邏輯0(SPACE)=+3~+15V在RTS、CTS、DSR、DTR和DCD等控制線上:信號(hào)有效(接通,ON狀態(tài),正電壓)=+3V~+15V信號(hào)無(wú)效(斷開(kāi),OFF狀態(tài),負(fù)電壓)=-3V~-15V圖1顯示了1488和1489的內(nèi)部結(jié)構(gòu)和引腳。圖中的左邊是微機(jī)串行接口電路中的主芯片UART,它是TTL器件,右邊是EIA-RS-232C連接器,要求EIA高電壓。*遠(yuǎn)距離通信遠(yuǎn)距離通信(傳輸距離大于15m的通信)的例子,故一般要加調(diào)制解調(diào)器MODEM,因此使用的信號(hào)線較多。1、采用Modem(DCE)和電話網(wǎng)通信時(shí)的信號(hào)連接:若在雙方MODEM之間采用普通電話交換線進(jìn)行通信,除了需要2~8號(hào)信號(hào)線外還要增加RI(22號(hào))和DTR(20號(hào))兩個(gè)信號(hào)線進(jìn)行聯(lián)絡(luò),如圖所示。2、采用專用電話線通信:在通信雙方的MODEM之間采用電話線進(jìn)行通信,則只要使用2~8號(hào)信號(hào)線進(jìn)行聯(lián)絡(luò)與控制。不需要電話機(jī)、振鈴信號(hào)RI和DTR信號(hào),其信號(hào)線的連接如圖那樣。

*近距離通信零Modem的最簡(jiǎn)連線(3線制)圖是零MODEM方式的最簡(jiǎn)單連接(即三線連接),圖中的2號(hào)線與3號(hào)線交叉連接是因?yàn)樵谥边B方式時(shí),把通信雙方都當(dāng)作數(shù)據(jù)終端設(shè)備看待,雙方都可發(fā)也可收。在這種方式下,通信雙方的任何一方,只要請(qǐng)求發(fā)送RTS有效和數(shù)據(jù)終端準(zhǔn)備好DTR有效就能開(kāi)始發(fā)送和接收。

*7.1.3.典型的物理層標(biāo)準(zhǔn)接口(2)RS-232-C作為應(yīng)用廣泛的串行接口總線,有著明顯的缺陷:速度慢:Vmax=20kb/s信息傳輸距離短:Lcable<=15m使用非平衡發(fā)送器,電氣性能不佳信號(hào)之間容易產(chǎn)生碼間串?dāng)_推出了新的串行接口總線標(biāo)準(zhǔn)449/423/422/485以及USB等*EIARS-449/422-A/423-ARS-232C的數(shù)據(jù)傳輸不能超過(guò)20Kbps,同時(shí)電纜最大長(zhǎng)度不能超過(guò)15米。這大大限制了其應(yīng)用能力。后來(lái)(1977年),EIA/TIA推出了一個(gè)新的標(biāo)準(zhǔn):RS-449.如圖所示。該標(biāo)準(zhǔn)的機(jī)械、功能和過(guò)程性由RS-449定義,電氣接口由兩個(gè)不同的標(biāo)準(zhǔn)定義。一個(gè)標(biāo)準(zhǔn)是RS-423A,它與RS-232C相似,所有的電路共享一個(gè)公共地,稱為非平衡傳輸(unbalancedtransmission)。另一個(gè)電氣標(biāo)準(zhǔn)是RS-422A,采用平衡傳輸(balancedtransmission),無(wú)公共地。RS-422A能在不超過(guò)60米長(zhǎng)的電纜上達(dá)到2Mbps的數(shù)據(jù)傳輸速率。*增加了10條接口引腳,從表7.3可以看出傳送速率高,傳送距離長(zhǎng)100kb/s 1200m接口連接器采用37針和9針(安排輔助信道的管腳)接口管腳大致分為五大類:公共地?cái)?shù)據(jù)控制定時(shí)線輔助信道*RS-423A/RS-422-ARS449的兩個(gè)子集,RS422采用平衡電路,RS423采用非平衡電路負(fù)邏輯,且參考電平為地:‘1’:-6v ‘0’:+6vRS422規(guī)定了差分平衡的電氣接口,即在較長(zhǎng)距離明顯地提高數(shù)據(jù)傳輸速率100kb/s 1000m10Mb/s 10mR423規(guī)定了差分平衡的電氣接口*RS-485RS485是工業(yè)控制過(guò)程中的串行接口總線,它由RS422變型而來(lái),實(shí)際上它們的差別在于:RS422全雙工 RS485半雙工RS422采用兩對(duì)平衡差分信號(hào)線,而RS485只需1對(duì)RS485更適合于多站互聯(lián),一個(gè)發(fā)送驅(qū)動(dòng)器最多可連接32個(gè)負(fù)載設(shè)備*主要內(nèi)容7.1.物理層標(biāo)準(zhǔn)接口

7.1.1.DTE與DCE7.1.2.典型的物理層標(biāo)準(zhǔn)接口(1)7.1.3.典型的物理層標(biāo)準(zhǔn)接口(2)7.2.

RS-232串行通信技術(shù)

7.2.1.RS-232C標(biāo)準(zhǔn)介紹

7.2.2.簡(jiǎn)單的串行通信協(xié)議的設(shè)計(jì)7.3.串行通信程序設(shè)計(jì)

7.3.1.MSComm控件介紹

7.3.2.使用開(kāi)發(fā)串行口通信軟件

7.3.3.使用VC++開(kāi)發(fā)串行口通信軟件

*7.2.RS-232串行通信技術(shù)

RS-232標(biāo)準(zhǔn)是目前常用的串行通信接口標(biāo)準(zhǔn),它是美國(guó)EIA(電子工業(yè)聯(lián)合會(huì))與BELL等公司一起開(kāi)發(fā)的1969年公布的通信協(xié)議。它適合于數(shù)據(jù)傳輸速率在0~20Kbps范圍內(nèi)的通信。這個(gè)標(biāo)準(zhǔn)對(duì)串行通信接口的有關(guān)問(wèn)題,如信號(hào)線功能、電器特性都做了明確規(guī)定。由于通信設(shè)備廠商都生產(chǎn)與RS-232C制式兼容的通信設(shè)備,因此,它作為一種標(biāo)準(zhǔn),目前已在計(jì)算機(jī)通信接口中廣泛采用。*7.2.1.RS-232C標(biāo)準(zhǔn)介紹1.RS-232C中的引腳定義9針RS-232串口(DB9)25針RS-232串口(DB25)引腳簡(jiǎn)寫功能說(shuō)明引腳簡(jiǎn)寫功能說(shuō)明1CD載波偵測(cè)(CarrierDetect)8CD載波偵測(cè)(CarrierDetect)2RXD接收數(shù)據(jù)(Receive)3RXD接收數(shù)據(jù)(Receive)3TXD發(fā)送數(shù)據(jù)(Transmit)2TXD發(fā)送數(shù)據(jù)(Transmit)4DTR數(shù)據(jù)終端準(zhǔn)備(DataTerminalReady)20DTR數(shù)據(jù)終端準(zhǔn)備(DataTerminalReady)5GND地線(Ground)7GND地線(Ground)6DSR數(shù)據(jù)準(zhǔn)備好(DataSetReady)6DSR數(shù)據(jù)準(zhǔn)備好(DataSetReady)7RTS請(qǐng)求發(fā)送(RequestToSend)4RTS請(qǐng)求發(fā)送(RequestToSend)8CTS清除發(fā)送(ClearToSend)5CTS清除發(fā)送(ClearToSend)9RI振鈴指示(RingIndicator)22RI振鈴指示(RingIndicator)*RS-232C與TTL/CMOS信號(hào)不能直接連接,必須通過(guò)接口電平轉(zhuǎn)換電平轉(zhuǎn)換,否則TTL/CMOS電路毀壞!MC1488 TTLRS-232CMC1499 RS-232CTTL常用的MAX232MC都集成了MC1488/MC1499兩項(xiàng)功能*RS-232C標(biāo)準(zhǔn)介紹

左圖顯示了1488和1489的內(nèi)部結(jié)構(gòu)和引腳。MC1488的引腳(2)、(4,5)、(9,10)和(12,13)接TTL輸入。引腳3、6、8、11輸出端口接EIA-RS-232C。MC1498的14的1、4、10、13腳接EIA輸入,而3、6、8、11腳接TTL輸出。具體連接方法如右圖所示。*7.2.2.簡(jiǎn)單的串行通信協(xié)議的設(shè)計(jì)PC和單片機(jī)最簡(jiǎn)單的連接是零調(diào)制三線經(jīng)濟(jì)型。下圖給出了采用MAX232芯片的PC和單片機(jī)串行通信接口電路,與PC相連采用9芯標(biāo)準(zhǔn)插座。2.PC通信軟件1.單片機(jī)通信軟件MCS-51通過(guò)中斷方式接收PC發(fā)送的數(shù)據(jù),并回送。單片機(jī)串行口工作在方式1,晶振為6MHz,波特率2400,定時(shí)器T1按方式2工作,經(jīng)計(jì)算定時(shí)器預(yù)置值為0F3H,SMOD=1。參考程序PC方面的通信程序可以用匯編語(yǔ)言編寫,也可以用其他高級(jí)語(yǔ)言例如VB、VC來(lái)編寫。匯編語(yǔ)言編寫的參考程序*RS232C傳送波形圖以傳送字符‘x’和‘y’為例,說(shuō)明RS232C信號(hào)傳送波形圖。編碼方法:非歸零二電平碼(NRZ-L),負(fù)邏輯傳送方法:異步傳送模式1為起始位2位停止位差錯(cuò)控制:奇校驗(yàn)*例題;傳‘X’=58H=01011000低位高位異步通信中,停止位和空閑位的電平與邏輯“1”的電平相同,在負(fù)邏輯中,為低電平Time起始位(邏輯值“0”)停止位奇偶校驗(yàn)位*傳‘Y’=59H=01011001低位高位*主要內(nèi)容7.1.物理層標(biāo)準(zhǔn)接口

7.1.1.DTE與DCE7.1.2.典型的物理層標(biāo)準(zhǔn)接口(1)7.1.3.典型的物理層標(biāo)準(zhǔn)接口(2)7.2.

RS-232串行通信技術(shù)

7.2.1.RS-232C標(biāo)準(zhǔn)介紹

7.2.2.簡(jiǎn)單的串行通信協(xié)議的設(shè)計(jì)7.3.串行通信程序設(shè)計(jì)

7.3.1.MSComm控件介紹

7.3.2.使用開(kāi)發(fā)串行口通信軟件

7.3.3.使用VC++開(kāi)發(fā)串行口通信軟件

*7.3.1.MSComm控件介紹

在Windows環(huán)境下,串口是系統(tǒng)資源的一部分。應(yīng)用程序要使用串口進(jìn)行通信,必須在使用前向操作系統(tǒng)提出資源申請(qǐng)要求(打開(kāi)串口),通信完成后必須釋放資源(關(guān)閉串口)。在Windows的系統(tǒng)函數(shù)中,均包含了支持通信中斷的功能。對(duì)串口通信而言,Windows為相應(yīng)的串口設(shè)備開(kāi)放了用戶定義的輸出緩沖區(qū)和輸入緩沖區(qū),應(yīng)用程序只能對(duì)輸入/輸出緩沖區(qū)進(jìn)行操作,數(shù)據(jù)進(jìn)出串口的操作均由系統(tǒng)后臺(tái)完成。以接收為例,系統(tǒng)每接收一個(gè)字符就產(chǎn)生一個(gè)低級(jí)的硬件中斷,系統(tǒng)的串口驅(qū)動(dòng)程序?qū)⒔邮盏降淖址腿胼斎刖彌_區(qū),此時(shí)應(yīng)用程序就可以通過(guò)訪問(wèn)輸入緩沖區(qū)得到接收到的字符信息。*Windows為用戶提供了兩種方式實(shí)現(xiàn)串口通信。使用Windows的API應(yīng)用程序接口使用串口通信控件*使用Windows的API應(yīng)用程序接口

在Windows中,串口是以文件的形式被打開(kāi)和訪問(wèn)的。串口和串口通信驅(qū)動(dòng)需要使用設(shè)備控制塊(DeviceControlBlock,DCB)進(jìn)行配置。應(yīng)用程序使用API函數(shù)CreateFile打開(kāi)串口,ReadFile讀串口,CreateEvent建立事件對(duì)象和CloseHandle關(guān)閉串口。*7.3.2.使用串口通信控件針對(duì)串口通信,微軟公司專門提供了MSComm控件,使用該控件進(jìn)行串口通信設(shè)計(jì)是十分方便的,程序員不必花時(shí)間去了解較為復(fù)雜的API函數(shù)。通過(guò)簡(jiǎn)單修改控件的屬性和使用控件提供的方法,就可以實(shí)現(xiàn)對(duì)串口的配置、完成串口接收和發(fā)送數(shù)據(jù)。使用串口通信控件進(jìn)行串口程序開(kāi)發(fā)極為方便,如果不需要對(duì)串口進(jìn)行高級(jí)控制一般多選擇使用MSComm控件進(jìn)行開(kāi)發(fā)。下面介紹在VB下使用MSComm控件進(jìn)行計(jì)算機(jī)實(shí)驗(yàn)室溫控系統(tǒng)串口程序開(kāi)發(fā)。*MSComm控件的屬性及通信方法(1)MSComm控件的通信方法。MSComm控件提供了兩種處理通信的方式:事件驅(qū)動(dòng)方式和查詢方式。(2)MSComm控件的屬性與常數(shù)。

CommPort屬性。設(shè)置并返回通信端口號(hào)。端口號(hào)的范圍為1~16,但如果用PortOpen屬性打開(kāi)一個(gè)并不存在的端口時(shí),MSComm控件會(huì)產(chǎn)生錯(cuò)誤68(設(shè)備無(wú)效)。RThreshold屬性。設(shè)置返回要接收的字符數(shù)。接收字符后,如果RThreshold屬性被設(shè)置為0(默認(rèn)值),則不產(chǎn)生OnComm事件,如果RThreshold被設(shè)成n,則接收緩沖區(qū)收到n個(gè)字符時(shí)MSComm控件產(chǎn)生OnComm事件。CTSHolding屬性。確定是否通過(guò)查詢ClearToSend(CTS)線的狀態(tài)發(fā)送數(shù)據(jù)。該屬性在設(shè)計(jì)時(shí)無(wú)效,在運(yùn)行時(shí)為只讀。*MSComm控件的屬性SThreshold屬性。設(shè)置并返回傳輸緩沖區(qū)中允許的最小字符數(shù)。若SThreshold屬性被設(shè)置為0(默認(rèn)值)時(shí),數(shù)據(jù)傳輸不會(huì)產(chǎn)生OnComm事件。而當(dāng)SThreshold屬性被設(shè)為1,當(dāng)傳輸緩沖區(qū)完全空時(shí),MSComm控件產(chǎn)生OnComm事件。CDHolding屬性。通過(guò)查詢CarrierDetect(CD)線的狀態(tài)確定是否有傳輸。該屬性在設(shè)計(jì)時(shí)無(wú)效,在運(yùn)行時(shí)為只讀。DSRHolding屬性。確定DataSetRead(DSR)線的狀態(tài)。該屬性在設(shè)計(jì)時(shí)無(wú)效,在運(yùn)行時(shí)為只讀。Settings屬性。設(shè)置返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位參數(shù)。當(dāng)端口打開(kāi)時(shí),如果屬性值非法,則MSComm控件產(chǎn)生錯(cuò)誤380(非法屬性值)。*BBBBPDS

各個(gè)屬性值間用逗號(hào)隔開(kāi),其中BBBB為波特率,P為奇偶校驗(yàn),D為數(shù)據(jù)位數(shù),S為停止位數(shù)。其默認(rèn)值為“9600,N,8,1”。Settings屬性的設(shè)置由4個(gè)設(shè)置組成,格式如下:InputLen屬性。設(shè)置并返回Input屬性從接收緩沖區(qū)中讀取的字符數(shù)。InputLen屬性的默認(rèn)值是0。設(shè)置InputLen為0時(shí),使用Input將使MSComm控件讀取緩沖區(qū)中全部的內(nèi)容。MSComm控件的屬性*MSComm控件的常數(shù)Handshake常數(shù)。

Handshake常數(shù)如表所示。OnComm常數(shù)。

OnComm常數(shù)如表所示常數(shù)值描述comNone0無(wú)握手comXonXoff1XOn/Xoff握手comRTS2Request-to-send/clear-to-send握手comRTSXOnXOff3Request-to-send和clear-to-send握手皆可常數(shù)值描述comEvSend1發(fā)送事件comEvReceive2接收事件comEvCTS3clear-to-send線變化comEvDSR4data-setready線變化comEvCD5carrierdetect線變化comEvRing6振鈴檢測(cè)comEvEOF7文件結(jié)束*MSComm控件的常數(shù)Error常數(shù)。Error常數(shù)如表所示。常數(shù)值描述comEventBreak1001接收到中斷信號(hào)comEventCTSTO1002Clear-to-send超時(shí)comEventDSRTO1003Data-setready超時(shí)comEventFrame1004幀錯(cuò)誤comEventOverrun1006端口超速comEventCDTO1007Carrierdetect超時(shí)comEventRxOver1008接收緩沖區(qū)溢出comEventRxParity1009Parity錯(cuò)誤comEventTxFull1010傳輸緩沖區(qū)滿comEventDCB1011檢索端口設(shè)備控制塊(DCB)時(shí)的意外錯(cuò)誤*MSComm控件的常數(shù)InputMode常數(shù)。InputMode常數(shù)如表所示。常數(shù)值描述comInputModeText0(默認(rèn))通過(guò)Input屬性以文本方式取回?cái)?shù)據(jù)comInputModeBinary1通過(guò)Input屬性以二進(jìn)制方式檢取回?cái)?shù)據(jù)*MSComm控件的常數(shù)(3)錯(cuò)誤消息(MSComm控件)。表列出MSComm控件可以捕獲的錯(cuò)誤。值描述常數(shù)380無(wú)效屬性值comInvalidPropertyValue383屬性為只讀comSetNotSupported394屬性為只讀comGetNotSupported8000端口打開(kāi)時(shí)操作不合法comPortOpen8001超時(shí)值必須大于8002無(wú)效端口號(hào)ComPortInvalid8003屬性只在運(yùn)行時(shí)有效8004屬性在運(yùn)行時(shí)為只讀8005端口已經(jīng)打開(kāi)comPortAlreadyOpen8006設(shè)備標(biāo)識(shí)符無(wú)效或不支持該標(biāo)識(shí)符*MSComm控件的常數(shù)值描述常數(shù)8007不支持設(shè)備的波特率comPortAlreadyOpen8008指定的字節(jié)大小無(wú)效8009默認(rèn)參數(shù)錯(cuò)誤8010硬件不可用(被其他設(shè)備鎖定)8011函數(shù)不能分配隊(duì)列8012設(shè)備沒(méi)有打開(kāi)comNoOpen8013設(shè)備已經(jīng)打開(kāi)8014不能使用comm通知8015不能設(shè)置comm狀態(tài)comSetCommStateFailed8016不能設(shè)置comm事件屏蔽8018僅當(dāng)端口打開(kāi)時(shí)操作才有效comPortNotOpen8019設(shè)備忙8020讀comm設(shè)備錯(cuò)誤comReadError8021為該端口檢索設(shè)備控制塊時(shí)的內(nèi)部錯(cuò)誤comDCBError*使用VB開(kāi)發(fā)串行口通信軟件用戶界面設(shè)計(jì)初始化程序發(fā)送數(shù)據(jù)接收數(shù)據(jù)其他工作使用VB開(kāi)發(fā)串行通信程序的詳細(xì)步驟。*用戶界面設(shè)計(jì)添加控件最終完成界面添加用戶界面

新工程界面

新建工程*用戶界面設(shè)計(jì)

修改界面上各控件的屬性如下表所示??丶QName屬性Caption屬性FormRS232_VBRS232_VBLable1Lable1發(fā)送數(shù)據(jù)Lable2Lable2接收數(shù)據(jù)Text1Text_SENDText2Text_RECVCommand1Button_SEND發(fā)送數(shù)據(jù)Command2Button_SEND_C清空發(fā)送文本框Command3Button_RECV_C清空接收文本框MSComm1MSComm*初始化程序

程序的初始化部分主要完成對(duì)串口的設(shè)置工作,包括串口的選擇、波特率及幀結(jié)構(gòu)設(shè)置、打開(kāi)串口以及發(fā)送和接收觸發(fā)器的時(shí)間控制等。此外,在程序運(yùn)行前,還應(yīng)進(jìn)行清除發(fā)送和接收緩沖區(qū)的工作。這部分工作是在窗體載入的時(shí)候完成的,因此應(yīng)將初始化代碼放在Form_Load()函數(shù)中添加如下代碼,這樣就完成了程序的初始化工作。*初始化程序'初始化代碼PrivateSubForm_Load()

MSComm.CommPort=2 '設(shè)置串口2MSComm.Settings="9600,N,8,1" '波特率9600bps,無(wú)校驗(yàn),8位數(shù)據(jù),1位停止位

MSComm.InputLen=0 '讀取接收緩沖區(qū)的所有字符

MSComm.InBufferSize=1024 '設(shè)置接收緩沖區(qū)為1024字節(jié)

MSComm.OutBufferSize=512 '設(shè)置發(fā)送緩沖區(qū)為512字節(jié)

MSComm.PortOpen=True '打開(kāi)串口

MSComm.SThreshold=0 '不觸發(fā)發(fā)送事件

MSComm.RThreshold=1 '每一個(gè)字符到接收緩沖區(qū)都觸發(fā)接收事件

MSComm.InBufferCount=0 '清除發(fā)送緩沖區(qū)數(shù)據(jù)

MSComm.OutBufferCount=0 '清除接收緩沖區(qū)數(shù)據(jù)

Text_SEND.Text="" '清空發(fā)送文本框

Text_RECV.Text="" '清空接收文本框EndSub*發(fā)送數(shù)據(jù)

本例中,發(fā)送數(shù)據(jù)的過(guò)程是通過(guò)單擊[發(fā)送數(shù)據(jù)]按鈕來(lái)完成的。程序應(yīng)完成下面的工作:(1)單擊[發(fā)送數(shù)據(jù)]按鈕,程序檢查發(fā)送文本框中的內(nèi)容是否為空,如果為空,則終止發(fā)送命令,警告后返回。(2)檢測(cè)串口是否處于打開(kāi)狀態(tài),如串口關(guān)閉,則打開(kāi)串口。(3)將發(fā)送文本框中的內(nèi)容送入MSComm的發(fā)送緩沖區(qū),等待數(shù)據(jù)發(fā)送。*發(fā)送數(shù)據(jù)

雙擊[發(fā)送數(shù)據(jù)]部分,添加Button_Send_Click()函數(shù),其代碼如下:'發(fā)送數(shù)據(jù)PrivateSubButton_SEND_Click()DimxAsStringIfText_SEND.Text=""Then'發(fā)送數(shù)據(jù)不能為空

x=MsgBox("發(fā)送數(shù)據(jù)不能為空",16)ExitSubEndIfIfNotMSComm.PortOpenThen'保證串口打開(kāi)

MSComm.PortOpen=TrueEndIfMSComm.Output=Text_SEND.Text+Chr$(13)'發(fā)送數(shù)據(jù)

Fori=1To20000000'延時(shí)

NextEndSub*接收數(shù)據(jù)

接收數(shù)據(jù)部分使用了事件響應(yīng)方式。當(dāng)串口收到數(shù)據(jù)使得數(shù)據(jù)緩沖區(qū)的內(nèi)容超過(guò)1字節(jié)時(shí)就會(huì)引發(fā)comEvReceive事件。OnComm()函數(shù)負(fù)責(zé)捕捉這一事件,并負(fù)責(zé)將發(fā)送緩沖區(qū)的內(nèi)容送入輸出文本框顯示。OnComm()函數(shù)還對(duì)錯(cuò)誤信息進(jìn)行捕捉,當(dāng)程序發(fā)生緩沖區(qū)溢出之類的錯(cuò)誤時(shí),由程序員負(fù)責(zé)將緩沖區(qū)清空。*接收數(shù)據(jù)

要實(shí)現(xiàn)上述功能,首先要雙擊MSComm控件創(chuàng)建OnComm(),并輸入代碼:'接收數(shù)據(jù)PrivateSubMSComm_OnComm()SelectCaseMSComm.CommEvent '檢驗(yàn)串口事件

'錯(cuò)誤處理

CasecomEventOverrun '數(shù)據(jù)丟失

Text_SEND.Text="" '清空發(fā)送緩沖區(qū)

Text_RECV.Text="" '清空接收緩沖區(qū)

Text_SEND.SetFocusExitSubCaseComEventRxOver ‘接收緩沖區(qū)溢出

Text_SEND.Text="" '清空發(fā)送緩沖區(qū)

Text_RECV.Text="" '清空接收緩沖區(qū)

Text_SEND.SetFocusExitSub

*接收數(shù)據(jù)CaseComEventTxFull '發(fā)送緩沖區(qū)已滿

Text_SEND.Text="" '清空發(fā)送緩沖區(qū)

Text_RECV.Text="" '清空接收緩沖區(qū)

Text_SEND.SetFocusExitSub'事件處理

CaseComEvReceive '接收緩沖區(qū)內(nèi)有數(shù)據(jù)

DimstrAsStringstr=MSComm.Input '從接收隊(duì)列中讀入字符串

Text_RECV.Text=Text_RECV.Textstr'讀出字符串送顯

EndSelectEndSub*其他工作使用該軟件實(shí)現(xiàn)通信效果的界面如圖所示。運(yùn)行測(cè)試程序*7.3.3.使用VC++開(kāi)發(fā)串行通信軟件用戶界面設(shè)計(jì)初始化程序發(fā)送數(shù)據(jù)接收數(shù)據(jù)其他工作

使用VisualC++6.0(VC++6.0)開(kāi)發(fā)串口通信軟件的方法。*用戶界面設(shè)計(jì)新建工程步驟1新建工程步驟2建立新工程后界面編輯程序界面添加控件最終完成界面*用戶界面設(shè)計(jì)

修改程序界面用到的各個(gè)控件的屬性后,要使用這些控件,還需要為其添加對(duì)應(yīng)的變量。該項(xiàng)工作是使用ClassWizard面板來(lái)完成的。在[MemberVariables]選項(xiàng)卡中相應(yīng)控件的ControlID,MFC單擊[AddVariables]按鈕為相應(yīng)控件添加對(duì)應(yīng)變量。ClassWizard面板添加控件對(duì)應(yīng)變量*初始化程序在VC中,需要將這部分代碼添加到對(duì)話框類的InitPort中。if(m_MSComm.GetPortOpen()) //如果串口已打開(kāi),則關(guān)閉串口

m_MSComm.SetPortOpen(FALSE);

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論