天天看點

深入淺出序列槽程式設計(1)――基本概念 深入淺出序列槽程式設計(1)

<b>――基本概念</b>

<b>宋寶華</b><b> [email][email protected][/email]</b>

       在PC機的主機闆上,有一種類型的接口可能為我們所忽視,那就是RS-232C串行接口,在微軟的Windows系統中稱其為COM。我們可以通過裝置管理器來檢視COM的硬體參數設定,如圖1。

<b>圖1 </b><b>在Windows</b><b>上檢視PC</b><b>序列槽設定</b>

迄今為止,幾乎每一台PC都包含COM。本質而言,COM是PC為和外界通信所提供的一種串行資料傳輸的接口。作為一種實體通信的途徑和裝置,它和目前風靡的另一種串行接口――USB所提供的功能是一緻的。不過RS-232C顯然已經開始被後起之秀USB趕超,因為USB的傳輸速率已經遠遠超過了RS-232C。

盡管如此,RS-232C仍然具有非常廣泛的應用,在相對長的一段時間裡,難以被USB等接口取代。RS-232C接口(又稱EIA RS-232C),1970年由美國電子工業協會(EIA)聯合貝爾系統、數據機廠家及計算機終端生産廠家共同制定,全名是“資料終端裝置(DTE)和資料通訊裝置(DCE)之間串行二進制資料交換接口技術标準”。

本文将對這一接口進行硬體原理的介紹,随後我們将逐章學習DOS平台的序列槽程式設計,及Windows平台下基于API、控件和第三方類的序列槽程式設計,最後本文将給出一個綜合執行個體。

在本文的連載過程中,您可以通過如下方式聯系作者(熱忱歡迎讀者朋友對本文的内容提出質疑或給出修改意見):

衆所周知,CPU與存儲晶片和I/O晶片的通信是并行的(并行傳輸的最大位數依賴于CPU的字長、資料總線的寬度),一種叫做UART(通用異步收發器,Universal Asynchronous Receiver/Transmitter)的晶片提供了并行資料傳輸和RS-232C串行資料傳輸方式的轉換。這樣的裝置通常有如圖2所示的管腳分布,當其向外傳輸資料時,CPU并行的将資料寫入這類晶片的寄存器,UART再将寄存器中的資料一位一位地移動并向外傳輸;當外界向其傳輸資料時,UART一位一位地接收資料,并将其移位組合為并行資料,CPU再并行地讀取這些資料。實際上,由于UART晶片一般以TTL/CMOS電平工作,在UART連接配接接口之前,還要經過一個TTL/CMOS和RS-232C電平的轉換。RS-232C規定了其标準的電氣特性,邏輯1對應的電壓必須在-5~-15V之間;邏輯0對應的的電壓必須在+5~+15V之間。

<b>圖2 UART</b><b>并/</b><b>串轉換</b>

一個常見的TTL/CMOS和RS-232C電平轉換晶片如圖3。

<b>圖3 </b><b>常見的TTL/CMOS</b><b>和RS-232C</b><b>電平轉換晶片</b>

RS-232C通常以兩類接插件與外界相連,分别稱為DB9和DB25,如圖4所示。

<b>圖4 DB9</b><b>和DB25</b>

而接插件中各個針的定義則如表1:

<b>表1 DB9</b><b>和DB25</b><b>引腳定義</b>

<b>DB9</b>

<b>DB25</b>

針号

功能說明

縮寫

1

資料載波檢測

DCD

8

2

接收資料

RXD

3

發送資料

TXD

4

資料終端準備

DTR

20

5

信号地

GND

7

6

資料裝置準備好

DSR

資料準備好

請求發送

RTS

清除發送

CTS

9

振鈴訓示

DELL

22

RS-232C定義為資料通信裝置(DCE)和資料終端裝置(DTE)之間的互連,實作上,到現在為止,究竟一個裝置屬于DCE還是屬于DTE已經沒有明顯的界限,PC即可作為DCE,又可作為DTE。兩序列槽互連,連接配接方法主要有二:

一種方法是,資料的發送和接收由軟體控制,不進行硬體握手,其連接配接方法如圖5(最常用DB9連接配接示意)和表2(DB9、DB25三線連接配接表),真正需要互相連接配接的是RXD、TXD和GND;

<a href="http://www.lammertbies.nl/comm/info/RS-232_null_modem.html#noha"></a>

<b>圖5 </b><b>無硬體握手時兩序列槽連接配接</b>

<b>表2 DB9</b><b>、DB25</b><b>三線連接配接</b>

 9針-9針

25針-25針

9針-25針

軟體握手又稱為XON/XOFF,通常以CTRL-S(0x13)和CTRL-Q(0x11)兩個字元來實作流控制。前者用于請求對方暫停發送,後者用于清除暫停傳送的請求,繼續發送資料。

另一種方法是,資料的發送和接收由硬體控制,進行硬體握手,其連接配接方法如圖6(最常用DB9連接配接示意),需要連接配接的信号除RXD、TXD和GND外,還包括DTR、DSR、RTS和CTS。

       硬體握手依賴于RTS和CTS信号,當發送裝置欲發送資料時,将RTS信号置為有效表示請求發送,接收裝置準備好後,置CTS信号有效,接着發送裝置通過信号線TXD開始發送串行資料。

這裡我們聯想開來,RTS/CTS模式在許多領域裡都出現過。回憶一下IEEE 802.11無線區域網路協定标準,在其MAC協定中就使用了RTS/CTS,RTS/CTS抽象開來就是一種請求/應答。筆者曾經在拙作中多次以執行個體論證計算機領域裡許多知識的相通性,這又是一個明證。

<a href="http://www.lammertbies.nl/comm/info/RS-232_null_modem.html#full"></a>

<b>圖6 </b><b>有硬體握手時兩序列槽連接配接</b>

實際上,目前我們經常使用的是方法一,即隻連接配接RXD、TXD和GND,簡單靈活。另外,序列槽之間互連還有諸多途徑,如圖7所示。

<a href="http://www.lammertbies.nl/comm/info/RS-232_null_modem.html#loop"></a>

<a href="http://www.lammertbies.nl/comm/info/RS-232_null_modem.html#part"></a>

<b>圖7 </b><b>其它互連方式</b>

在MS-DOS下使用的程式設計環境是TC 2.0;

在Windows 2000下的程式設計環境是VC++ 6.0;

借助工具:序列槽調試助手2.1(圖8)。

<b>圖8 </b><b>序列槽調試助手</b>

序列槽調試助手是由《Visual C++/Turbo C序列槽通信程式設計實踐》一書作者龔建偉編寫的共享軟體,可以友善地進行序列槽上的資料收發、顯示(16進制和ASCII碼方式)和序列槽參數的設定,在序列槽調試領域應用廣泛。

“ 序列槽調試助手”的開發原理很簡單(相信讀者看完本文後在相當短的時間之内就能開發出這樣的軟體),但是作者龔建偉敏銳地抓住了序列槽調試在業界的需求,使得 自身随這一軟體而成名。這一事件或多或少會給程式員們一定的啟發。優秀的共享軟體不一定要技術含量高,隻要有需求,哪怕是開發原理再簡單,都能擁有廣泛的 使用者。

<b>圖9 VmWare</b><b>虛拟PC</b>

在虛拟PC的MS-DOS作業系統上,我們安裝TC 2.0開發環境。

        如果您的PC上沒有軟驅,為了制作MS-DOS啟動軟碟,請安裝RamDiskNT模拟一個軟碟,并在其上安裝MS-DOS啟動程式。RamDiskNT是一個磁盤模拟軟體,其界面如圖10所示。

<b>圖10 </b><b>磁盤模拟</b>

<b></b>

<b> 本文轉自 21cnbao 51CTO部落格,原文連結:http://blog.51cto.com/21cnbao/120317,如需轉載請自行聯系原作者</b>

繼續閱讀