![第15章串行通信原理與設(shè)計(jì)浙江農(nóng)林_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/dd3e507e-2736-46ff-ad98-0bdaddc9ffc2/dd3e507e-2736-46ff-ad98-0bdaddc9ffc21.gif)
![第15章串行通信原理與設(shè)計(jì)浙江農(nóng)林_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/dd3e507e-2736-46ff-ad98-0bdaddc9ffc2/dd3e507e-2736-46ff-ad98-0bdaddc9ffc22.gif)
![第15章串行通信原理與設(shè)計(jì)浙江農(nóng)林_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/dd3e507e-2736-46ff-ad98-0bdaddc9ffc2/dd3e507e-2736-46ff-ad98-0bdaddc9ffc23.gif)
![第15章串行通信原理與設(shè)計(jì)浙江農(nóng)林_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/dd3e507e-2736-46ff-ad98-0bdaddc9ffc2/dd3e507e-2736-46ff-ad98-0bdaddc9ffc24.gif)
![第15章串行通信原理與設(shè)計(jì)浙江農(nóng)林_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/dd3e507e-2736-46ff-ad98-0bdaddc9ffc2/dd3e507e-2736-46ff-ad98-0bdaddc9ffc25.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 介紹串行通信的基本概念,包括串行介紹串行通信的基本概念,包括串行通信的原理、傳輸協(xié)議以及各種串行傳輸通信的原理、傳輸協(xié)議以及各種串行傳輸?shù)慕涌跇?biāo)準(zhǔn)的接口標(biāo)準(zhǔn) 最后講解了最后講解了WindowsWindows環(huán)境下,最常見(jiàn)的環(huán)境下,最常見(jiàn)的APIAPI編程方法編程方法串行通信基本概念串行通信基本概念15.1串行傳輸協(xié)議串行傳輸協(xié)議15.2使用使用Windows API進(jìn)行同步串口編程進(jìn)行同步串口編程15.3采用重疊采用重疊I/O方式的編程方法方式的編程方法15.4采用事件驅(qū)動(dòng)方式的編程方法采用事件驅(qū)動(dòng)方式的編程方法15.515.1 串行通信基本概念 通信,是在一些聯(lián)絡(luò)信號(hào)的控制下,通信,是在一
2、些聯(lián)絡(luò)信號(hào)的控制下,一次將一次將8位、位、16位或位或32位數(shù)據(jù)同時(shí)進(jìn)行傳送位數(shù)據(jù)同時(shí)進(jìn)行傳送的通信方式。在并行通信中,傳輸線數(shù)量的通信方式。在并行通信中,傳輸線數(shù)量沒(méi)有限制,除了數(shù)據(jù)線之外還應(yīng)設(shè)置有通沒(méi)有限制,除了數(shù)據(jù)線之外還應(yīng)設(shè)置有通信聯(lián)絡(luò)控制線信聯(lián)絡(luò)控制線。 串行通信,只需一對(duì)傳輸線,數(shù)據(jù)的串行通信,只需一對(duì)傳輸線,數(shù)據(jù)的各位按照時(shí)間順序依次傳送,如各位按照時(shí)間順序依次傳送,如8位數(shù)據(jù)分位數(shù)據(jù)分8次傳送。次傳送。15.1.1 15.1.1 串行通信特點(diǎn)串行通信特點(diǎn) 由于在一條傳輸線上既傳輸數(shù)據(jù)信息,由于在一條傳輸線上既傳輸數(shù)據(jù)信息,又傳輸控制聯(lián)絡(luò)信息,這就需要一系列約又傳輸控制聯(lián)絡(luò)信息,
3、這就需要一系列約定,從而識(shí)別一條線上傳送的信息流中,定,從而識(shí)別一條線上傳送的信息流中,哪一部分是數(shù)據(jù)信號(hào),哪一部分是聯(lián)絡(luò)信哪一部分是數(shù)據(jù)信號(hào),哪一部分是聯(lián)絡(luò)信號(hào)。號(hào)。 串行通信的信息格式有異步和同步信串行通信的信息格式有異步和同步信息格式。與此對(duì)應(yīng),有異步串行通信和同息格式。與此對(duì)應(yīng),有異步串行通信和同步串行通信兩種方式。步串行通信兩種方式。 由于串行通信中信息邏輯定義與由于串行通信中信息邏輯定義與TTL不不兼容,故需要邏輯電平轉(zhuǎn)換,以提高信息兼容,故需要邏輯電平轉(zhuǎn)換,以提高信息傳輸?shù)目煽啃浴鬏數(shù)目煽啃浴?為為了降低通信線路的成本和簡(jiǎn)化通信了降低通信線路的成本和簡(jiǎn)化通信設(shè)備,可用現(xiàn)存信道(
4、如電話、電報(bào)信道設(shè)備,可用現(xiàn)存信道(如電話、電報(bào)信道等),配以適當(dāng)?shù)耐ㄐ沤涌?,在任意兩點(diǎn)等),配以適當(dāng)?shù)耐ㄐ沤涌冢谌我鈨牲c(diǎn)之間實(shí)現(xiàn)串行通信。之間實(shí)現(xiàn)串行通信。 15.1.2 15.1.2 串行通信傳輸方式串行通信傳輸方式 串行通信的過(guò)程是將通信雙方傳輸?shù)拇型ㄐ诺倪^(guò)程是將通信雙方傳輸?shù)臄?shù)據(jù)序列變成電信號(hào),在選定的通信線路數(shù)據(jù)序列變成電信號(hào),在選定的通信線路上完成傳遞。通常,將通信傳輸方式分為上完成傳遞。通常,將通信傳輸方式分為信號(hào)傳輸方式和線路傳輸方式兩部分。信號(hào)傳輸方式和線路傳輸方式兩部分。 1信號(hào)傳輸方式信號(hào)傳輸方式 在近距離傳輸時(shí),廣泛使用的是按信號(hào)原在近距離傳輸時(shí),廣泛使用的是按信號(hào)
5、原樣傳輸?shù)幕▊鬏敺绞?。樣傳輸?shù)幕▊鬏敺绞健?在遠(yuǎn)距離傳輸時(shí),通常需要使用在遠(yuǎn)距離傳輸時(shí),通常需要使用Modem。通過(guò)通過(guò)Modem,可以將原信號(hào)調(diào)制為高頻的模擬,可以將原信號(hào)調(diào)制為高頻的模擬信號(hào),然后通過(guò)電話網(wǎng)絡(luò),進(jìn)行遠(yuǎn)距離傳輸。信號(hào),然后通過(guò)電話網(wǎng)絡(luò),進(jìn)行遠(yuǎn)距離傳輸。 2線路傳輸方式線路傳輸方式 在串行通信中,數(shù)據(jù)通常是在兩個(gè)站(如在串行通信中,數(shù)據(jù)通常是在兩個(gè)站(如微機(jī)、終端等)之間進(jìn)行傳送,按照數(shù)據(jù)流微機(jī)、終端等)之間進(jìn)行傳送,按照數(shù)據(jù)流的方向及對(duì)線路的使用方式可分為如下幾種的方向及對(duì)線路的使用方式可分為如下幾種基本傳輸方式:基本傳輸方式: 單工傳輸方式。這種方式,在傳輸線路單工傳輸
6、方式。這種方式,在傳輸線路上,數(shù)據(jù)只能按一個(gè)固定的方向,且是交互上,數(shù)據(jù)只能按一個(gè)固定的方向,且是交互式的。式的。 半雙工方式。當(dāng)使用同一根傳輸線既作半雙工方式。當(dāng)使用同一根傳輸線既作為輸入又作為輸出時(shí),雖然數(shù)據(jù)可以在兩個(gè)為輸入又作為輸出時(shí),雖然數(shù)據(jù)可以在兩個(gè)方向上傳送,但通信雙方不能同時(shí)收發(fā)數(shù)據(jù)方向上傳送,但通信雙方不能同時(shí)收發(fā)數(shù)據(jù),這種傳輸方式就是半雙工傳輸方式。,這種傳輸方式就是半雙工傳輸方式。 全雙工傳輸方式。當(dāng)數(shù)據(jù)的發(fā)送和接收全雙工傳輸方式。當(dāng)數(shù)據(jù)的發(fā)送和接收分別由兩根不同的傳輸線傳輸時(shí),通信雙方分別由兩根不同的傳輸線傳輸時(shí),通信雙方都能在同一時(shí)刻進(jìn)行發(fā)送和接收操作都能在同一時(shí)刻進(jìn)行
7、發(fā)送和接收操作。 多工傳輸方式。使用復(fù)用技術(shù),將一個(gè)多工傳輸方式。使用復(fù)用技術(shù),將一個(gè)信道(即傳輸信號(hào)的線路)劃分為若干個(gè)頻信道(即傳輸信號(hào)的線路)劃分為若干個(gè)頻帶或時(shí)間片,從而使多路信號(hào)同時(shí)共享信道帶或時(shí)間片,從而使多路信號(hào)同時(shí)共享信道,這就是多工傳輸方式。,這就是多工傳輸方式。15.1.3 15.1.3 數(shù)據(jù)糾錯(cuò)與檢錯(cuò)數(shù)據(jù)糾錯(cuò)與檢錯(cuò) 在基本通信規(guī)程中一般采用奇偶校驗(yàn)在基本通信規(guī)程中一般采用奇偶校驗(yàn)或方陣碼檢錯(cuò),以反饋重發(fā)方式糾錯(cuò)。在或方陣碼檢錯(cuò),以反饋重發(fā)方式糾錯(cuò)。在高級(jí)通信控制規(guī)程中,一般采用循環(huán)冗余高級(jí)通信控制規(guī)程中,一般采用循環(huán)冗余碼碼CRC(Cycle Redundancy Cod
8、e)檢驗(yàn))檢驗(yàn),以自動(dòng)糾錯(cuò)方式來(lái)糾錯(cuò)。,以自動(dòng)糾錯(cuò)方式來(lái)糾錯(cuò)。 首先,改善傳輸通道的電特性,使誤首先,改善傳輸通道的電特性,使誤碼率達(dá)到要求,但是由于經(jīng)濟(jì)因素和技術(shù)碼率達(dá)到要求,但是由于經(jīng)濟(jì)因素和技術(shù)因素等條件的限制,這方面的努力往往不因素等條件的限制,這方面的努力往往不能得到理想的效果;能得到理想的效果; 其次,采取檢錯(cuò)、糾錯(cuò)技術(shù),即所謂其次,采取檢錯(cuò)、糾錯(cuò)技術(shù),即所謂差錯(cuò)控制技術(shù),在差錯(cuò)控制技術(shù)中,對(duì)數(shù)差錯(cuò)控制技術(shù),在差錯(cuò)控制技術(shù)中,對(duì)數(shù)據(jù)進(jìn)行可靠有效地編碼是很重要的途徑之據(jù)進(jìn)行可靠有效地編碼是很重要的途徑之一。一。15.1.4 傳輸速率與距離 傳輸速率和距離是衡量串行通信的兩個(gè)傳輸速率和
9、距離是衡量串行通信的兩個(gè)重要方面。重要方面。 通常串行通信涉及以下通常串行通信涉及以下三三個(gè)方面:個(gè)方面:1波特率波特率2發(fā)送接收時(shí)鐘發(fā)送接收時(shí)鐘3傳輸距離與傳輸速率的關(guān)系傳輸距離與傳輸速率的關(guān)系 波特率波特率 在并行通信中,傳輸速率以每秒傳送的在并行通信中,傳輸速率以每秒傳送的字節(jié)(字節(jié)(B/s)數(shù)來(lái)表示,而串行通信中,在基)數(shù)來(lái)表示,而串行通信中,在基波傳輸?shù)那闆r下用每秒傳送的位數(shù)(波傳輸?shù)那闆r下用每秒傳送的位數(shù)(bit/s)來(lái)表示數(shù)據(jù)傳輸速率。來(lái)表示數(shù)據(jù)傳輸速率。 用的標(biāo)準(zhǔn)波特率是用的標(biāo)準(zhǔn)波特率是110、300、1200、2 400、4 800、9 600和和19 200等。隨著技術(shù)的等
10、。隨著技術(shù)的進(jìn)步,某些串行通信可以支持更高的波特率進(jìn)步,某些串行通信可以支持更高的波特率,如,如38 400、57 600等。等。 發(fā)送接收時(shí)鐘發(fā)送接收時(shí)鐘 在發(fā)送數(shù)據(jù)時(shí),發(fā)送器在發(fā)送時(shí)鐘的有效在發(fā)送數(shù)據(jù)時(shí),發(fā)送器在發(fā)送時(shí)鐘的有效沿(下降沿)作用下將移位寄存器的數(shù)據(jù)按位沿(下降沿)作用下將移位寄存器的數(shù)據(jù)按位移位串行輸出。移位串行輸出。 發(fā)送發(fā)送/接收時(shí)鐘頻率與波特率的關(guān)系如下:接收時(shí)鐘頻率與波特率的關(guān)系如下: 發(fā)送發(fā)送/接收時(shí)鐘頻率接收時(shí)鐘頻率n發(fā)送發(fā)送/接收波特率接收波特率 表達(dá)式中的表達(dá)式中的n1,16,64。 傳輸距離與傳輸速率的關(guān)系傳輸距離與傳輸速率的關(guān)系 串行接口或終端直接傳送串行
11、信息流的串行接口或終端直接傳送串行信息流的最大距離與傳輸速率及傳輸線的電氣特性有最大距離與傳輸速率及傳輸線的電氣特性有關(guān),傳輸距離隨傳輸速率的增加而減少。關(guān),傳輸距離隨傳輸速率的增加而減少。 RS-232C標(biāo)準(zhǔn)規(guī)定,當(dāng)數(shù)據(jù)傳送速度小標(biāo)準(zhǔn)規(guī)定,當(dāng)數(shù)據(jù)傳送速度小于于20kbit/s,并且電纜的電容負(fù)荷小于,并且電纜的電容負(fù)荷小于2 500pF時(shí),傳送距離小于時(shí),傳送距離小于30m。由于電纜的。由于電纜的電容沒(méi)有那么大,當(dāng)傳輸速度較慢時(shí),傳輸電容沒(méi)有那么大,當(dāng)傳輸速度較慢時(shí),傳輸距離將超過(guò)這個(gè)距離。距離將超過(guò)這個(gè)距離。15.2 串行傳輸協(xié)議 采用的串行通信協(xié)議有兩類:異步通采用的串行通信協(xié)議有兩類:
12、異步通信和同步通信。信和同步通信。 同步協(xié)議又分為面向字符、面向比特同步協(xié)議又分為面向字符、面向比特和面向字節(jié)計(jì)數(shù)和面向字節(jié)計(jì)數(shù)3種。種。15.2.1 異步傳輸協(xié)議 1特點(diǎn)及傳輸格式特點(diǎn)及傳輸格式 在傳輸一個(gè)字符時(shí)總是以起始位開(kāi)始,在傳輸一個(gè)字符時(shí)總是以起始位開(kāi)始,以停止位結(jié)束。異步通信傳輸格式如圖以停止位結(jié)束。異步通信傳輸格式如圖15.1所示。所示。 圖圖15.1 異步通信字符傳輸幀格式異步通信字符傳輸幀格式 2異步傳輸?shù)腻e(cuò)誤檢測(cè)異步傳輸?shù)腻e(cuò)誤檢測(cè) 由于線路或程序出錯(cuò)等原因,使得通信由于線路或程序出錯(cuò)等原因,使得通信過(guò)程中產(chǎn)生了傳送錯(cuò)誤。因?yàn)楫惒酵ㄐ诺膶?shí)過(guò)程中產(chǎn)生了傳送錯(cuò)誤。因?yàn)楫惒酵ㄐ诺膶?shí)
13、質(zhì)是字符的發(fā)送是隨機(jī)的,接收方通??蓹z質(zhì)是字符的發(fā)送是隨機(jī)的,接收方通??蓹z測(cè)到如下一些錯(cuò)誤:奇偶錯(cuò)測(cè)到如下一些錯(cuò)誤:奇偶錯(cuò)、超越錯(cuò)超越錯(cuò)、幀格幀格式錯(cuò)式錯(cuò)。15.2.2 面向字符的同步傳輸協(xié)議1特點(diǎn)與格式特點(diǎn)與格式 它的特點(diǎn)是一次傳送由若干個(gè)字符組成它的特點(diǎn)是一次傳送由若干個(gè)字符組成的數(shù)據(jù)塊,而不是只傳送一個(gè)字符,并規(guī)定的數(shù)據(jù)塊,而不是只傳送一個(gè)字符,并規(guī)定了了10個(gè)特殊字符作為這個(gè)數(shù)據(jù)塊的開(kāi)頭與結(jié)個(gè)特殊字符作為這個(gè)數(shù)據(jù)塊的開(kāi)頭與結(jié)束標(biāo)志以及整個(gè)傳輸過(guò)程的控制信息,它們束標(biāo)志以及整個(gè)傳輸過(guò)程的控制信息,它們也叫做通信控制字。由于被傳送的數(shù)據(jù)塊是也叫做通信控制字。由于被傳送的數(shù)據(jù)塊是由一序列字
14、符組成的,故被稱為面向字符的由一序列字符組成的,故被稱為面向字符的協(xié)議。協(xié)議的一幀數(shù)據(jù)格式如圖協(xié)議。協(xié)議的一幀數(shù)據(jù)格式如圖15.2所示。所示。 圖圖15.2 面向字符的同步協(xié)議幀格式面向字符的同步協(xié)議幀格式 由圖由圖15.2可知,一個(gè)面向字符的數(shù)據(jù)幀可知,一個(gè)面向字符的數(shù)據(jù)幀由幾個(gè)控制字符開(kāi)始,緊跟著數(shù)據(jù)位數(shù)相由幾個(gè)控制字符開(kāi)始,緊跟著數(shù)據(jù)位數(shù)相同的各字符(同的各字符(1n),最后以校驗(yàn)字段結(jié)),最后以校驗(yàn)字段結(jié)束束。2控制字符的定義控制字符的定義 在面向字符同步協(xié)議的幀格式中規(guī)定了在面向字符同步協(xié)議的幀格式中規(guī)定了10個(gè)通信控制字符。面向字符協(xié)議中規(guī)定的個(gè)通信控制字符。面向字符協(xié)議中規(guī)定的1
15、0個(gè)通信控制字符的名稱及代碼如表個(gè)通信控制字符的名稱及代碼如表15.1所所示。示。 面向字符的同步通信有別于異步通信面向字符的同步通信有別于異步通信的一個(gè)特點(diǎn)是,它允許連續(xù)發(fā)送一序列字的一個(gè)特點(diǎn)是,它允許連續(xù)發(fā)送一序列字符,而每個(gè)字符的數(shù)據(jù)位數(shù)都相同,且沒(méi)符,而每個(gè)字符的數(shù)據(jù)位數(shù)都相同,且沒(méi)有起始位和停止位。有起始位和停止位。 由于在面向字符的同步通信協(xié)議中采用由于在面向字符的同步通信協(xié)議中采用了一些傳輸控制字,從而增強(qiáng)了通信控制了一些傳輸控制字,從而增強(qiáng)了通信控制能力和校驗(yàn)功能,但也出現(xiàn)了一些問(wèn)題。能力和校驗(yàn)功能,但也出現(xiàn)了一些問(wèn)題。15.2.3 面向比特的同步傳輸協(xié)議1特點(diǎn)與格式特點(diǎn)與格式
16、 面向比特的同步傳輸又稱做二進(jìn)制同步面向比特的同步傳輸又稱做二進(jìn)制同步傳輸。在面向比特的同步協(xié)議中,最有代表傳輸。在面向比特的同步協(xié)議中,最有代表性的同步協(xié)議有如下性的同步協(xié)議有如下3種:種: 同步數(shù)據(jù)鏈路控制規(guī)程同步數(shù)據(jù)鏈路控制規(guī)程SDLC(Synchronous Data Link Control),由),由IBM公司制定。公司制定。 高級(jí)數(shù)據(jù)鏈路控制規(guī)程高級(jí)數(shù)據(jù)鏈路控制規(guī)程HDLC(High Level Data Link Control),由國(guó)際標(biāo)準(zhǔn)化組織),由國(guó)際標(biāo)準(zhǔn)化組織ISO(International Standards Organization)制定。)制定。 先進(jìn)數(shù)據(jù)通信規(guī)
17、程先進(jìn)數(shù)據(jù)通信規(guī)程ADCCP(Advanced Data Communications Control Procedure),由美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)制定。),由美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)制定。 2幀信息的分段幀信息的分段 SDLC/HDLC的一幀信息包括以下幾個(gè)的一幀信息包括以下幾個(gè)場(chǎng),所有場(chǎng)都是從最低有效位開(kāi)始傳送。場(chǎng),所有場(chǎng)都是從最低有效位開(kāi)始傳送。 SDLC/HDLC的標(biāo)志字符。的標(biāo)志字符。SDLC/HDLC協(xié)議規(guī)定,所有信息傳輸必須以一個(gè)標(biāo)志符協(xié)議規(guī)定,所有信息傳輸必須以一個(gè)標(biāo)志符開(kāi)始,且以同一個(gè)標(biāo)志符結(jié)束。這個(gè)標(biāo)志符開(kāi)始,且以同一個(gè)標(biāo)志符結(jié)束。這個(gè)標(biāo)志符是是01111110,稱為標(biāo)志場(chǎng)(,稱為標(biāo)志
18、場(chǎng)(Flag)。)。 地址場(chǎng)和控制場(chǎng)在標(biāo)志場(chǎng)之后,可以有地址場(chǎng)和控制場(chǎng)在標(biāo)志場(chǎng)之后,可以有一個(gè)地址場(chǎng)一個(gè)地址場(chǎng)A(Address)和一個(gè)控制場(chǎng))和一個(gè)控制場(chǎng)C(Control)。地址場(chǎng)用來(lái)規(guī)定與之通信的)。地址場(chǎng)用來(lái)規(guī)定與之通信的次站地址??刂茍?chǎng)可規(guī)定若干個(gè)命令。次站地址??刂茍?chǎng)可規(guī)定若干個(gè)命令。 信息場(chǎng)(數(shù)據(jù)場(chǎng))。跟在控制場(chǎng)之后的信息場(chǎng)(數(shù)據(jù)場(chǎng))。跟在控制場(chǎng)之后的信息場(chǎng)信息場(chǎng)I(Information)。信息場(chǎng)包含有要)。信息場(chǎng)包含有要傳送的數(shù)據(jù),并不是每一幀都必須有信息場(chǎng)傳送的數(shù)據(jù),并不是每一幀都必須有信息場(chǎng),即數(shù)據(jù)場(chǎng)可為,即數(shù)據(jù)場(chǎng)可為0。當(dāng)它為。當(dāng)它為0時(shí),則這一幀時(shí),則這一幀主要是控制
19、命令。主要是控制命令。 幀校驗(yàn)場(chǎng)。緊跟在信息場(chǎng)之后的是兩幀校驗(yàn)場(chǎng)。緊跟在信息場(chǎng)之后的是兩個(gè)字節(jié)的幀校驗(yàn)場(chǎng),幀校驗(yàn)場(chǎng)稱為個(gè)字節(jié)的幀校驗(yàn)場(chǎng),幀校驗(yàn)場(chǎng)稱為FC(Frame Check)或稱為幀校驗(yàn)序列)或稱為幀校驗(yàn)序列FCS(Frame Check Sequence)。)。SDLC/HDLC均采用循環(huán)冗余校驗(yàn)碼均采用循環(huán)冗余校驗(yàn)碼CRC。其生成多項(xiàng)式為。其生成多項(xiàng)式為CCITT多項(xiàng)式多項(xiàng)式x16+x12+x5+1。除了標(biāo)志場(chǎng)和自動(dòng)插入的。除了標(biāo)志場(chǎng)和自動(dòng)插入的“0”位外,所有的信息都參加位外,所有的信息都參加CRC計(jì)算。計(jì)算。3實(shí)際應(yīng)用時(shí)的幾個(gè)技術(shù)問(wèn)題實(shí)際應(yīng)用時(shí)的幾個(gè)技術(shù)問(wèn)題 “0”位插入位插入/刪
20、除技術(shù)。由于刪除技術(shù)。由于SDLC/HDLC協(xié)議規(guī)定以協(xié)議規(guī)定以01111110為標(biāo)志字為標(biāo)志字節(jié),但在信息場(chǎng)中也完全有可能有同一種模節(jié),但在信息場(chǎng)中也完全有可能有同一種模式的字符,為了能將它與標(biāo)志區(qū)分開(kāi)來(lái),所式的字符,為了能將它與標(biāo)志區(qū)分開(kāi)來(lái),所以采取了以采取了“0”位插入和刪除技術(shù)。位插入和刪除技術(shù)。 SDLC/HDLC異常結(jié)束。如果在發(fā)送過(guò)程異常結(jié)束。如果在發(fā)送過(guò)程中出現(xiàn)錯(cuò)誤,則中出現(xiàn)錯(cuò)誤,則SDLC/HDLC協(xié)議用異常結(jié)束協(xié)議用異常結(jié)束(Abort)字符,或稱失效序列使本幀作廢。)字符,或稱失效序列使本幀作廢。 HDLC的的3種基本通信操作方式。正常響種基本通信操作方式。正常響應(yīng)方式(
21、應(yīng)方式(NRA),用于由一個(gè)主站和多個(gè)從),用于由一個(gè)主站和多個(gè)從站組成的多點(diǎn)式結(jié)構(gòu)。異步響應(yīng)方式(站組成的多點(diǎn)式結(jié)構(gòu)。異步響應(yīng)方式(ARM),用于一個(gè)主站和一個(gè)從站組成的點(diǎn)點(diǎn)式),用于一個(gè)主站和一個(gè)從站組成的點(diǎn)點(diǎn)式結(jié)構(gòu),或者通信雙方均由主站和從站疊加而結(jié)構(gòu),或者通信雙方均由主站和從站疊加而成的平衡型結(jié)構(gòu)。成的平衡型結(jié)構(gòu)。 同步通信中的糾錯(cuò)與數(shù)據(jù)幀重發(fā)。面同步通信中的糾錯(cuò)與數(shù)據(jù)幀重發(fā)。面向比特的同步協(xié)議中,由標(biāo)志字段開(kāi)始,向比特的同步協(xié)議中,由標(biāo)志字段開(kāi)始,緊跟著幾千比特的信息,最后以具有自動(dòng)緊跟著幾千比特的信息,最后以具有自動(dòng)糾錯(cuò)能力的糾錯(cuò)能力的CRC校驗(yàn)碼結(jié)束。校驗(yàn)碼結(jié)束。15.3 使用
22、Windows API進(jìn)行同步串口編程 如何使用如何使用API實(shí)現(xiàn)串口通信,對(duì)于數(shù)據(jù)實(shí)現(xiàn)串口通信,對(duì)于數(shù)據(jù)的接收采用查詢方式。的接收采用查詢方式。 使用使用WinAPI來(lái)編寫串口通信程序時(shí),來(lái)編寫串口通信程序時(shí),讀寫操作可以有同步方式與重疊的異步方讀寫操作可以有同步方式與重疊的異步方式。式。15.3.1 概述 所謂同步方式,就是當(dāng)發(fā)出寫命令后,所謂同步方式,就是當(dāng)發(fā)出寫命令后,直到數(shù)據(jù)確實(shí)寫入到輸出緩沖區(qū)后,寫函數(shù)直到數(shù)據(jù)確實(shí)寫入到輸出緩沖區(qū)后,寫函數(shù)才返回。這種方式操作簡(jiǎn)單,但當(dāng)數(shù)據(jù)寫入才返回。這種方式操作簡(jiǎn)單,但當(dāng)數(shù)據(jù)寫入時(shí)間較長(zhǎng)時(shí),將會(huì)使程序掛起,降低程序的時(shí)間較長(zhǎng)時(shí),將會(huì)使程序掛起,降
23、低程序的效率。效率。 首先使用首先使用CreateFile()函數(shù)打開(kāi)串口,函數(shù)打開(kāi)串口,以非重疊方式打開(kāi)。該函數(shù)可以返回一個(gè)以非重疊方式打開(kāi)。該函數(shù)可以返回一個(gè)串口句柄,使用該句柄初始化串口參數(shù)。串口句柄,使用該句柄初始化串口參數(shù)。然后使用然后使用WriteFile()可以發(fā)送串行數(shù)據(jù),使可以發(fā)送串行數(shù)據(jù),使用用ReadFile()可以從串口讀取串行數(shù)據(jù)。操可以從串口讀取串行數(shù)據(jù)。操作完串口后,使用作完串口后,使用CloseHandle()函數(shù)來(lái)關(guān)函數(shù)來(lái)關(guān)閉串口。閉串口。15.3.2 15.3.2 創(chuàng)建串口創(chuàng)建串口1CreateFil 該函數(shù)是一個(gè)通用的創(chuàng)建或打開(kāi)文件的該函數(shù)是一個(gè)通用的創(chuàng)建
24、或打開(kāi)文件的函數(shù)。在函數(shù)。在WinAPI編程中,它不僅可以操作文編程中,它不僅可以操作文件,也可以操作串口。使用該函數(shù)可以打開(kāi)件,也可以操作串口。使用該函數(shù)可以打開(kāi)一個(gè)串口,并返回一個(gè)句柄,在程序中便可一個(gè)串口,并返回一個(gè)句柄,在程序中便可以通過(guò)訪問(wèn)該句柄來(lái)實(shí)現(xiàn)對(duì)串口的訪問(wèn)。下以通過(guò)訪問(wèn)該句柄來(lái)實(shí)現(xiàn)對(duì)串口的訪問(wèn)。下面針對(duì)在串口方面的應(yīng)用介紹其參數(shù)的含義面針對(duì)在串口方面的應(yīng)用介紹其參數(shù)的含義及設(shè)置方法。及設(shè)置方法。HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_
25、ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile );2SetupComm()函數(shù)函數(shù)設(shè)置串口輸入緩沖區(qū)及輸出緩沖區(qū)的大小。設(shè)置串口輸入緩沖區(qū)及輸出緩沖區(qū)的大小。BOOL SetupComm( HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue );3DCB數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) 串口通信中,使用該數(shù)據(jù)結(jié)構(gòu)存放通信串口通信中,使用該數(shù)據(jù)結(jié)構(gòu)存放通信參數(shù)。由于該結(jié)構(gòu)包括的通信參數(shù)很多,逐參
26、數(shù)。由于該結(jié)構(gòu)包括的通信參數(shù)很多,逐個(gè)設(shè)置不方便。通常的做法是首先將串口的個(gè)設(shè)置不方便。通常的做法是首先將串口的當(dāng)前設(shè)置值讀出到一個(gè)當(dāng)前設(shè)置值讀出到一個(gè)DCB結(jié)構(gòu)中,然后根結(jié)構(gòu)中,然后根據(jù)需要修改該據(jù)需要修改該DCB結(jié)構(gòu)中的某些參數(shù),再以結(jié)構(gòu)中的某些參數(shù),再以該結(jié)構(gòu)來(lái)設(shè)置串口通信參數(shù)。該結(jié)構(gòu)來(lái)設(shè)置串口通信參數(shù)。4SetCommState()函數(shù)函數(shù) 要設(shè)置串行通信參數(shù),首先定義一個(gè)要設(shè)置串行通信參數(shù),首先定義一個(gè)DCB結(jié)構(gòu)結(jié)構(gòu)類型的變量。根據(jù)通信要求,設(shè)置該結(jié)構(gòu)變量的數(shù)值類型的變量。根據(jù)通信要求,設(shè)置該結(jié)構(gòu)變量的數(shù)值,然后以該結(jié)構(gòu)變量作為參數(shù),執(zhí)行,然后以該結(jié)構(gòu)變量作為參數(shù),執(zhí)行SetComm
27、State()函數(shù)即可完成串口通信參數(shù)的設(shè)置函數(shù)即可完成串口通信參數(shù)的設(shè)置。 BOOL SetCommState( HANDLE hFile, LPDCB lpDCB );5GetCommState()函數(shù)函數(shù) 使用該函數(shù)可以獲取當(dāng)前串口通信參數(shù)使用該函數(shù)可以獲取當(dāng)前串口通信參數(shù)的設(shè)置值。獲取的參數(shù)值存放到一個(gè)的設(shè)置值。獲取的參數(shù)值存放到一個(gè)DCB結(jié)結(jié)構(gòu)型的變量中。構(gòu)型的變量中。 BOOL GetCommState( HANDLE hFile, LPDCB lpDCB );6舉例說(shuō)明舉例說(shuō)明 舉舉例子說(shuō)明創(chuàng)建串口的程序代碼,串口例子說(shuō)明創(chuàng)建串口的程序代碼,串口參數(shù)在代碼注釋中說(shuō)明參數(shù)在代碼注釋
28、中說(shuō)明。15.3.3 關(guān)閉串口 關(guān)閉串口的操作很簡(jiǎn)單,只需執(zhí)行關(guān)閉串口的操作很簡(jiǎn)單,只需執(zhí)行CloseHandle()函數(shù)即可。函數(shù)即可。 BOOL CloseHandle( HANDLE hObject /指向串口句柄指向串口句柄 );15.3.4 發(fā)送數(shù)據(jù) 發(fā)送數(shù)據(jù)使用發(fā)送數(shù)據(jù)使用WriteFile()函數(shù)。函數(shù)。 BOOL WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped ); 1
29、5.3.5 接收數(shù)據(jù) 接收數(shù)據(jù)使用接收數(shù)據(jù)使用ReadFile()函數(shù)。函數(shù)。 BOOL ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped ); 15.3.6 定時(shí)接收數(shù)據(jù)的方法 1編寫定時(shí)器響應(yīng)函數(shù)編寫定時(shí)器響應(yīng)函數(shù) 定時(shí)器響應(yīng)函數(shù)是全局函數(shù),不屬于任定時(shí)器響應(yīng)函數(shù)是全局函數(shù),不屬于任何類。直接在何類。直接在cpp文件中書寫,格式如下:文件中書寫,格式如下: VOID CALLBACK Timer
30、Proc( HWND hwnd, /發(fā)出定時(shí)器消息窗口的句柄發(fā)出定時(shí)器消息窗口的句柄 UINT uMsg, /WM_TIMER消息消息 UINT idEvent, /定時(shí)器定時(shí)器ID DWORD dwTime) /當(dāng)前的系統(tǒng)時(shí)間當(dāng)前的系統(tǒng)時(shí)間 /這里加入接收操作代碼這里加入接收操作代碼 該函數(shù)是一個(gè)回調(diào)函數(shù)。當(dāng)設(shè)置的定時(shí)器時(shí)間該函數(shù)是一個(gè)回調(diào)函數(shù)。當(dāng)設(shè)置的定時(shí)器時(shí)間達(dá)到時(shí),由系統(tǒng)自動(dòng)調(diào)用。調(diào)用該函數(shù)時(shí),傳入達(dá)到時(shí),由系統(tǒng)自動(dòng)調(diào)用。調(diào)用該函數(shù)時(shí),傳入4個(gè)參數(shù)。個(gè)參數(shù)。 2啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器 啟動(dòng)定時(shí)器使用啟動(dòng)定時(shí)器使用SetTimer()函數(shù)。該函數(shù)可在函數(shù)。該函數(shù)可在程序的任何地方加入。程序
31、的任何地方加入。 UINT SetTimer( HWND hWnd, /發(fā)出定時(shí)器消發(fā)出定時(shí)器消息窗口的句柄息窗口的句柄 UINT nIDEvent, /定時(shí)器定時(shí)器ID UINT uElapse, /超時(shí)值超時(shí)值 TIMERPROC lpTimerFunc /定時(shí)器處理程定時(shí)器處理程序的地址序的地址 ); 3關(guān)閉定時(shí)器關(guān)閉定時(shí)器 關(guān)閉定時(shí)器使用關(guān)閉定時(shí)器使用KillTimer()函數(shù)。該函函數(shù)。該函數(shù)可在程序的任何地方加入。數(shù)可在程序的任何地方加入。 BOOL KillTimer( HWND hWnd, / handle of window that installed timer UINT
32、 uIDEvent / timer identifier ); 15.4 采用重疊I/O方式的編程方法 采用同步方式的查詢方式讀取串口數(shù)采用同步方式的查詢方式讀取串口數(shù)據(jù)時(shí),若由于讀取操作耗費(fèi)較長(zhǎng)的時(shí)間,據(jù)時(shí),若由于讀取操作耗費(fèi)較長(zhǎng)的時(shí)間,則程序會(huì)被掛起。為解決這種問(wèn)題,可以則程序會(huì)被掛起。為解決這種問(wèn)題,可以在讀取數(shù)據(jù)時(shí)采用重疊在讀取數(shù)據(jù)時(shí)采用重疊I/O操作。操作。 為實(shí)現(xiàn)重疊為實(shí)現(xiàn)重疊I/O操作,主要有如下幾個(gè)操作,主要有如下幾個(gè)編程步驟:定義全局變量、創(chuàng)建串口、發(fā)編程步驟:定義全局變量、創(chuàng)建串口、發(fā)出讀寫操作、讀寫線程函數(shù)的建立、關(guān)閉出讀寫操作、讀寫線程函數(shù)的建立、關(guān)閉串口等。串口等。
33、15.4.1 定義全局變量 在主對(duì)話框的實(shí)現(xiàn)文件(后綴名為在主對(duì)話框的實(shí)現(xiàn)文件(后綴名為cpp)中定義全局變量。通常在該文件的最頂)中定義全局變量。通常在該文件的最頂端,在所有函數(shù)的外面定義。端,在所有函數(shù)的外面定義。 HANDLE hCom; /串口句柄串口句柄 DWORD ThreadProcWrite(LPVOID pParam); /寫線程寫線程函數(shù)函數(shù) DWORD ThreadProcRead(LPVOID pParam); /讀線程讀線程函數(shù)函數(shù) OVERLAPPED Wol=0; /寫操作寫操作 OVERLAPPED結(jié)構(gòu)變量結(jié)構(gòu)變量 OVERLAPPED Rol=0; /讀操作讀
34、操作OVERLAPPED結(jié)構(gòu)變量結(jié)構(gòu)變量 HANDLE hThreadWrite; /寫線程句柄寫線程句柄 HANDLE hThreadRead; /讀線程句柄讀線程句柄HWND hWnd; 15.4.2 創(chuàng)建串口 創(chuàng)建串口的操作可以設(shè)置在一個(gè)按鈕創(chuàng)建串口的操作可以設(shè)置在一個(gè)按鈕的單擊事件中執(zhí)行,也可以在主對(duì)話框的的單擊事件中執(zhí)行,也可以在主對(duì)話框的初始化函數(shù)初始化函數(shù)OnInitDialog()中執(zhí)行。中執(zhí)行。 15.4.3 發(fā)出讀寫操作 1讀操作讀操作 在讀操作中,只是啟動(dòng)讀線程。實(shí)際的在讀操作中,只是啟動(dòng)讀線程。實(shí)際的讀操作在讀線程函數(shù)中完成。讀操作在讀線程函數(shù)中完成。 2寫操作寫操作
35、在寫操作中,同樣只是啟動(dòng)寫線程。實(shí)在寫操作中,同樣只是啟動(dòng)寫線程。實(shí)際的寫操作在寫線程函數(shù)中完成。際的寫操作在寫線程函數(shù)中完成。 DWORD dwThreadID;/ DWORD dwParam; hThreadWrite=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE )ThreadProcWrite, /寫線程函數(shù)寫線程函數(shù)名稱名稱 &dwParam, 0, /創(chuàng)建線程后,立即執(zhí)行該線程創(chuàng)建線程后,立即執(zhí)行該線程 &dwThreadID); if (hThreadWrite=NULL) AfxMessageBox(寫線程創(chuàng)建失??!
36、寫線程創(chuàng)建失??!); 15.4.4 讀寫線程函數(shù)的建立 1讀線程函數(shù)讀線程函數(shù) 在讀線程函數(shù)中,首先應(yīng)初始化重疊結(jié)構(gòu)在讀線程函數(shù)中,首先應(yīng)初始化重疊結(jié)構(gòu)Rol的成員的成員hEvent,將其設(shè)置為無(wú)信號(hào)狀態(tài),將其設(shè)置為無(wú)信號(hào)狀態(tài)。當(dāng)讀操作完成或出現(xiàn)通信錯(cuò)誤時(shí),該變量。當(dāng)讀操作完成或出現(xiàn)通信錯(cuò)誤時(shí),該變量會(huì)被自動(dòng)設(shè)置為有信號(hào)狀態(tài)。接下來(lái)就可以會(huì)被自動(dòng)設(shè)置為有信號(hào)狀態(tài)。接下來(lái)就可以使用使用ReadFile()函數(shù)發(fā)出讀命令。若該讀函函數(shù)發(fā)出讀命令。若該讀函數(shù)返回?cái)?shù)返回TRUE,說(shuō)明讀操作已經(jīng)完成,可以處,說(shuō)明讀操作已經(jīng)完成,可以處理讀取的數(shù)據(jù)。若該讀函數(shù)返回理讀取的數(shù)據(jù)。若該讀函數(shù)返回FALSE,說(shuō)
37、,說(shuō)明讀操作未完成。明讀操作未完成。 2寫線程函數(shù)寫線程函數(shù) 寫線程函數(shù)所作操作與讀線程函數(shù)的操寫線程函數(shù)所作操作與讀線程函數(shù)的操作相似。首先初始化作相似。首先初始化Wol的的hEvent事件成事件成員,然后發(fā)出寫命令員,然后發(fā)出寫命令WriteFile()。若該寫命。若該寫命令返回令返回TRUE,說(shuō)明寫操作成功完成。若寫,說(shuō)明寫操作成功完成。若寫命令返回命令返回FALSE,說(shuō)明寫操作沒(méi)有完成。,說(shuō)明寫操作沒(méi)有完成。 15.4.5 關(guān)閉串口 使用使用CloseHandle()函數(shù)關(guān)閉串口句柄。函數(shù)關(guān)閉串口句柄。 CloseHandle(hCom); 15.5 采用事件驅(qū)動(dòng)方式的編程方法 主要介
38、紹在事件驅(qū)動(dòng)方式下,實(shí)現(xiàn)串行通信主要介紹在事件驅(qū)動(dòng)方式下,實(shí)現(xiàn)串行通信的編程方法。本節(jié)內(nèi)容涉及到重疊的編程方法。本節(jié)內(nèi)容涉及到重疊I/O操作、自定操作、自定義義Windows消息等概念。這些概念在與其相關(guān)的消息等概念。這些概念在與其相關(guān)的代碼中詳細(xì)說(shuō)明。代碼中詳細(xì)說(shuō)明。 這種方式的工作原理是建立一個(gè)事件線程,這種方式的工作原理是建立一個(gè)事件線程,它監(jiān)視串口的事件和錯(cuò)誤信息。當(dāng)有事件或錯(cuò)誤它監(jiān)視串口的事件和錯(cuò)誤信息。當(dāng)有事件或錯(cuò)誤發(fā)生時(shí),它向主線程發(fā)送一個(gè)發(fā)生時(shí),它向主線程發(fā)送一個(gè)Windows消息。主消息。主線程在消息響應(yīng)函數(shù)中處理已發(fā)生的事件或錯(cuò)誤線程在消息響應(yīng)函數(shù)中處理已發(fā)生的事件或錯(cuò)誤。采用這種方式編程,可以按照如下幾個(gè)步驟進(jìn)。采用這種方式編程,可以按照如下幾個(gè)步驟進(jìn)行,即:定義全局變量、創(chuàng)建串口、開(kāi)啟事件線行,即:定義全局變量、創(chuàng)建串口、開(kāi)啟事件線程、發(fā)送數(shù)據(jù)、自定義消息、關(guān)閉串口及關(guān)閉事程、發(fā)送數(shù)據(jù)、自定義消息、關(guān)閉串口及關(guān)閉事件線程。件線程。15.5.1 定義全局變量 在主對(duì)話框的實(shí)現(xiàn)文件(后綴名為在主對(duì)話框的實(shí)現(xiàn)文件(后綴名為cpp)中定義全局變量。通常在該文件的最頂)中定義全局變量。通常在該文件的最頂端定義,并在所有函數(shù)的外面。端定義,并在所有函數(shù)的外面。 15.5.2 打開(kāi)串口及開(kāi)啟事件線程 1打開(kāi)串口打開(kāi)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)莊租地或轉(zhuǎn)讓合同范本
- 傳媒工作室合伙合同范本
- 光伏安裝居間合同范例
- 2025-2030年中國(guó)鹽酸卡比佐卡因項(xiàng)目投資可行性研究分析報(bào)告
- 企業(yè)工裝裝修合同范本
- 2025年度建筑水電安裝工程知識(shí)產(chǎn)權(quán)保護(hù)合同范本
- 包運(yùn)租船租賃合同范例
- 2025年度建筑幕墻工程玻璃幕墻玻璃制品采購(gòu)合同范本
- 企業(yè)白領(lǐng)轉(zhuǎn)餐飲合同范例
- 2025年中國(guó)情侶裝市場(chǎng)全景評(píng)估及投資規(guī)劃建議報(bào)告
- 新員工入職通識(shí)考試(中軟國(guó)際)
- 四星級(jí)酒店工程樣板房裝修施工匯報(bào)
- 圓翳內(nèi)障病(老年性白內(nèi)障)中醫(yī)診療方案
- 中考物理復(fù)習(xí)備考策略
- 博士后進(jìn)站申請(qǐng)書博士后進(jìn)站申請(qǐng)書八篇
- 小報(bào):人工智能科技科學(xué)小報(bào)手抄報(bào)電子小報(bào)word小報(bào)
- GB/T 41509-2022綠色制造干式切削工藝性能評(píng)價(jià)規(guī)范
- 公安系防暴安全03安檢
- 孫權(quán)勸學(xué)教案全國(guó)一等獎(jiǎng)教學(xué)設(shè)計(jì)
- 企業(yè)生產(chǎn)現(xiàn)場(chǎng)6S管理知識(shí)培訓(xùn)課件
- 五年級(jí)下冊(cè)數(shù)學(xué)課件 第10課時(shí) 練習(xí)課 蘇教版(共11張PPT)
評(píng)論
0/150
提交評(píng)論