資源簡介 通信隨著計算機(jī)系統(tǒng)的應(yīng)用和微機(jī)網(wǎng)絡(luò)的發(fā)展,通信功能越來越顯的重要。 通信分為串行通信和并行通信。串并口設(shè)備對比圖串行通信串行通信是指外設(shè)和計算機(jī)間使用一根數(shù)據(jù)信號線,數(shù)據(jù)在一根數(shù)據(jù)信號線上一位一位地進(jìn)行傳輸,每一位數(shù)據(jù)都占據(jù)一個固定的時間長度。串行通信的普遍性適合于遠(yuǎn)距離傳輸; ——所用的傳輸線少,并且可以借助現(xiàn)成的電話網(wǎng)進(jìn)行信息傳送適合人-機(jī)交換設(shè)備和串行存儲的外部設(shè)備;在實時控制和管理方面,采用多臺微機(jī)處理機(jī)組成分級分布控制系統(tǒng)中,各CPU之間的通信一般都是串行方式。串行通信的基本概念異步通信和同步通信異步通信 是指通信的發(fā)送與接收設(shè)備使用各自的時鐘控制數(shù)據(jù)的發(fā)送和接收過程。特點:一個字符一個字符地傳輸,每個字符一位一位地傳輸,并且傳輸一個字符時,總是以“起始位”開始,以“停止位”結(jié)束,字符之間沒有固定的時間間隔要求。異步通信和同步通信同步通信 時要建立發(fā)送方時鐘對接收方時鐘的直接控制,使雙方達(dá)到完全同步。同時傳送的字符間不留間隙,即保持位同步關(guān)系,或可以保持字符同步關(guān)系。異步通信和同步通信的比較(1)異步通信簡單,雙方時鐘可允許一定誤差。 同步通信較復(fù)雜,雙方時鐘的允許誤差較小。(2)異步通信只適用于點<--> 點。 同步通信可用于點<--> 多。(3)通信效率:異步通信低, 同步通信高。1、單工單工是指數(shù)據(jù)傳輸僅能沿一個方向,不能實現(xiàn)反向傳輸。串行通信的傳輸方向串行通信的傳輸方向3、全雙工全雙工是指數(shù)據(jù)可以同時進(jìn)行雙向傳輸。 信號的調(diào)制與解調(diào) 計算機(jī)的通信是要求傳送數(shù)字信號,而在進(jìn)行遠(yuǎn)程數(shù)據(jù)通信時,通信線路是要求傳送模擬信號。 利用調(diào)制器(Modulator)把數(shù)字信號轉(zhuǎn)換成模擬信號,然后送到通信線路上去,再由解調(diào)器(Demodulator)把從通信線路上收到的模擬信號轉(zhuǎn)換成數(shù)字信號。 由于通信是雙向的,調(diào)制器和解調(diào)器合并在一個裝置中,這就是調(diào)制解調(diào)器MODEM。 串行通信的錯誤校驗奇偶校驗 根據(jù)被傳輸二進(jìn)制數(shù)據(jù)中的”1”的個數(shù)為 奇數(shù)或偶數(shù)來校驗,奇數(shù)為“0”,偶數(shù)為“1”二進(jìn)制 校驗位 0000--------1 0001--------0 0010--------0 0011--------1同步傳輸用奇校驗,即讓原有 數(shù)據(jù)(包括加上的一位)1的個數(shù)為奇數(shù)1000110()異步傳輸用偶校驗,即讓原有 數(shù)據(jù)(包括加上的一位)1的個數(shù)為偶數(shù)1000110()發(fā)送時鐘與接收時鐘在串行通信中,二進(jìn)制數(shù)據(jù)以數(shù)字信號的形式出現(xiàn),不論是發(fā)送還是接收,都必須有時鐘信號對傳送的數(shù)據(jù)進(jìn)行定位。在TTL標(biāo)準(zhǔn)表示的二進(jìn)制數(shù)中,傳輸線上高電平表示二進(jìn)制1,低電平表示二進(jìn)制0,且每一位持續(xù)時間是固定的,由發(fā)送時鐘和接收時鐘的頻率決定。接收時鐘和發(fā)射時鐘與波特率關(guān)系傳輸速率傳輸速率——波特率 波特率表示每秒鐘傳輸二進(jìn)制代碼的位數(shù)。 單位是:位/秒(bps)。 波特率因子波特率因子。在波特率指定后,輸入移位寄存器/輸出移位寄存器在接收時鐘和發(fā)送時鐘控制下,按指定的波特率速度進(jìn)行移位,一般幾個時鐘脈沖移位一次,此時要求接收時鐘和發(fā)送時鐘的時鐘周期是波特率的16、32或64倍。波特率因子就是發(fā)送或接收1個數(shù)據(jù)(1個數(shù)據(jù)位)所需要的時鐘脈沖個數(shù),其單位是1/位,即1/Baud,或Baud-1波特率因子常用為16、32或64倍。【例1-5】 設(shè)波特率為9600,波特率因子為32,則接收時鐘和發(fā)送時鐘的頻率為多少?解:根據(jù)公式F = n × B可知,波特率B為9600,波特率因子n為32,則接收時鐘和發(fā)送時鐘的頻率為:F = 9600 × 32 = 297200 Hz。UART串口通信編程MSCOMM控件的使用一般有兩種實現(xiàn)途徑:其一就是使用MSCOMM控件,此控件提供很多方便操作的屬性和方法,利用它們可以很方便地實現(xiàn)你的目的;另外一種途徑就是使用Windows API,微軟為開發(fā)者提供了很多相關(guān)的串行操作的編程接口,使用這些接口,可以很完成更為強(qiáng)大的功能。MSCOMM控件的使用由于Visual Basic 的串行通信控件并不會出現(xiàn)在工具箱中,當(dāng)我們需要MSComm控件時,讓它出現(xiàn)在工具箱中的操作步驟如下 :( 1 )單擊[工程]菜單。( 2 )在工程菜單中選擇[部件]命令。( 3 )打開[部件]對話框,選中Microsoft Comm Control 6.0 復(fù)選框。( 4 )單擊[應(yīng)用]或[確定]按鈕,即可在工具箱中見到“電話盒(MSComm)”的圖標(biāo),如圖3.3所示,我們就可以將MSComm控件加載,進(jìn)行串行通信。MSCOMM控件的使用CommPort屬性 CommPort屬性用于設(shè)置或返回通信連接端口號碼。程序必須指定所要使用的串行端口的號碼,Windows系統(tǒng)會使用所設(shè)置的通信端口與外界進(jìn)行通信。程序可借助此屬性返回所使用的連接端口號碼。在此所設(shè)置的通信端口號由1開始往上遞增,MSComm控件的最大值是16,當(dāng)使用的通信端口號碼超過16時,此控件會生成錯誤信息。例子: MSComm1.CommPort = 1指定使用COM1進(jìn)行通信傳輸。MSCOMM控件的使用Settings屬性用于設(shè)置初始化參數(shù)。以字符的形式設(shè)置或返回聯(lián)機(jī)速率、奇偶校驗、數(shù)據(jù)位、停止位等4個參數(shù)。其格式為為“BBBB,P,D,S”,其中BBBB表示聯(lián)機(jī)速率,P表示奇偶校驗位檢查方式,D表示數(shù)據(jù)位數(shù),S表示停止位數(shù)。默認(rèn)值是“9600,N,8,1”,它表示所使用的通信端口是以每秒9600位的速率進(jìn)行傳輸,不進(jìn)行奇偶校驗的檢查,每個數(shù)據(jù)單元是8個位,而停止位是1個位,而這4項必須是按照順序,不可前后對調(diào);其中的字母N可以是大寫或小寫。 Setting設(shè)置完成之后,所傳輸及接受的字符串便以此設(shè)置為準(zhǔn),使用RS-232通信的雙方,Setting必須完全一樣,彼此才能順利地通信,否則雙方將無法正確接收到彼此所傳輸?shù)男盘?br/> 例子:MSComm1.Settings = "9600,n,8,1"MSCOMM控件的使用PortOpenPortOpen屬性用于設(shè)置或返回通信連接端口的狀態(tài)。使用串行端口之前必須先將要使用的串行端口打開,而在使用完畢之后,也必須執(zhí)行關(guān)閉操作。串行通信端口各項功能都是在PortOpen的True與False之間完成的,若尚未打開通信端口就進(jìn)行數(shù)據(jù)的傳輸,系統(tǒng)將顯示錯誤信息;而完成傳輸工作后若不關(guān)閉通信端口,在Visual Basic的設(shè)計中,會在應(yīng)用程序結(jié)束時同時關(guān)閉通信端口。例子:MSComm1.PortOpen = True MSComm1.PortOpen = FalseMSCOMM控件的使用Output屬性 Output屬性用于將要發(fā)送的數(shù)據(jù)輸入傳輸緩沖區(qū)。當(dāng)程序需要傳輸字符串到對方時,可將字符串使用此命令輸入輸出緩沖區(qū),一般的數(shù)據(jù)均是在送達(dá)輸出緩沖區(qū)后隨即被送出,當(dāng)MSComm控件設(shè)置有發(fā)送閾值屬性時,則會生成事件(SThreshold,請看隨后的說明)。 例如:MSComm1.Output=”ABCDE”,此即將ABCDE這5個字符通過RS-232串行通信端口發(fā)送出去。MSCOMM控件的使用InputLen屬性 InputLen屬性用于指定由串行端口讀入的字符串長度或字節(jié)數(shù)。Visual Basic程序可使用Input命令將存放在輸入緩沖區(qū)的字符讀入,但要指定所讀入的字符長度則需要設(shè)置本屬性。若指定讀取的單位是字節(jié),則是讀入的字節(jié)的個數(shù)。例如:MSComm1.InputLen=10,當(dāng)程序執(zhí)行Input命令時,只會讀取10個字符。假設(shè)在輸入緩沖區(qū)中有55個字符,而設(shè)置的IputLen屬性是10,由于第一次的Input命令會按InputLen屬性而讀取10個字符進(jìn)來,因此要全部讀完所有的數(shù)據(jù)需要執(zhí)行6次Input命令。如果我們需要對固定的字符串的長度進(jìn)行特別的運(yùn)算或判斷時,就必須使用InputLen屬性。另外,若InputMode屬性指定的是讀入字節(jié),則本屬性批的就是每次讀入的字節(jié)數(shù)目。MSCOMM控件的使用通信步驟 通常我們以下面的步驟來使用Visual Basic的MSComm控件進(jìn)行通信控制:( 1 ) 加入通信控件。也就是MSComm控件。( 2 ) 設(shè)置通信端口號碼。即CommPort屬性。( 3 ) 設(shè)置通信協(xié)議。即HandShaking屬性。( 4 ) 設(shè)置傳輸速度等參數(shù)。即Settings屬性。( 5 ) 設(shè)置其他參數(shù)。必要時再加上其他的屬性設(shè)置。( 6 ) 打開通信端口。即PortOpen 屬性設(shè)成True。( 7 ) 送出字符串或讀入字符串。使用Input及Output屬性。8 ) 使用完MSComm通信控件后,將通信端口關(guān)閉。即PortOpen屬性設(shè)成False。串口通信程序代碼Private Sub Option1_Click()On Error Resume Next MSComm1.PortOpen = False MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.PortOpen = True If MSComm1.PortOpen = True Then Text1.Text = "藍(lán)牙可以使用" Command1.Visible = True Command2.Visible = True Else Text1.Text = "藍(lán)牙無法使用" End IfEnd Sub串口通信程序代碼Private Sub Command1_Click()Text1.Text = "正在連接...."MSComm1.Output = "1"Text1.Text = "發(fā)送開燈信號成功"Image1.Picture = LoadPicture(App.Path + "open.bmp")End Sub串口通信程序代碼Private Sub Command2_Click()Text1.Text = "正在連接...."MSComm1.Output = "2"Text1.Text = "發(fā)送關(guān)燈信號成功"Image1.Picture = LoadPicture(App.Path + "close.bmp")End Sub 展開更多...... 收起↑ 資源預(yù)覽 縮略圖、資源來源于二一教育資源庫