RS232接口規(guī)范及編程資料(上)
(1)RS-232C介紹與PC硬件:
本文引用地址:http://m.butianyuan.cn/article/201612/328777.htmRS-232C使用-3到-25V表示數(shù)字“1”,使用3V到25V表示數(shù)字“0”,RS-232C在空閑時處于邏輯“1”狀態(tài),在開始傳送時,首先產(chǎn)生一起始位,起始位為一個寬度的邏輯“0”,緊隨其后為所要傳送的數(shù)據(jù),所要傳送的數(shù)據(jù)有最低位開始依此送出,并以一個結(jié)束位標志該字節(jié)傳送結(jié)束,結(jié)束位為一個寬度的邏輯“1”狀態(tài)。
PC機一般使用8250或16550作為串行通訊的控制器,使用9針或25針的接插件將串行口的信號送出。該插座的信號定義如下:
DB-25 | DB-9 | 信號名稱 | 方向 | 含 義 |
2 | 3 | TXD | 輸出 | 數(shù)據(jù)發(fā)送端 |
3 | 2 | RXD | 輸入 | 數(shù)據(jù)接收端 |
4 | 7 | RTS | 輸出 | 請求發(fā)送(計算機要求發(fā)送數(shù)據(jù)) |
5 | 8 | CTS | 輸入 | 清除發(fā)送(MODEM準備接收數(shù)據(jù)) |
6 | 6 | DSR | 輸入 | 數(shù)據(jù)設(shè)備準備就緒 |
7 | 5 | SG | - | 信號地 |
8 | 1 | DCD | 輸入 | 數(shù)據(jù)載波檢測 |
20 | 4 | DTR | 輸出 | 數(shù)據(jù)終端準備就緒(計算機) |
22 | 9 | RI | 輸入 | 響鈴指示 |
以上信號在通訊過程之中可能會被全部或部分使用,最簡單的通訊僅需TXD及RXD及SG即可完成,其他的握手信號可以做適當處理或直接懸空,至于是否可以懸空這視乎你的通訊軟件。比如說,如果使用DOS所提供的BIOS通訊驅(qū)動程序,那么,這些握手信號則需要做如下處理,因為BIOS的通訊驅(qū)動使用了這些信號。如果使用自己編寫的串行驅(qū)動程序則可以完全不使用這些握手信號(詳見下面有關(guān)章節(jié))。
PC機一般使用8250或16550的作為串行通訊控制器,8250及16550的管腳排列如下:
8250(16550)的寄存器如下表所示:
基地址 | 讀/寫 | 寄存器縮寫 | 注 釋 |
0 | Write | - | 發(fā)送保持寄存器(DLAB=0) |
0 | Read | - | 接收數(shù)據(jù)寄存器(DLAB=0) |
0 | Read/Write | - | 波特率低八位(DLAB=1) |
1 | Read/Write | IER | 中斷允許寄存器 |
1 | Read/Write | - | 波特率高八位(DLAB=1) |
2 | Read | IIR | 中斷標識寄存器 |
2 | Write | FCR | FIFO控制寄存器 |
3 | Read/Write | LCR | 線路控制寄存器 |
4 | Read/Write | MCR | MODEM控制寄存器 |
5 | Read | LSR | 線路狀態(tài)寄存器 |
6 | Read | MSR | MODEM狀態(tài)寄存器 |
7 | Read/Write | - | Scratch Register |
PC機支持1-4個串行口,即COM1-COM4,其基地址在BIOS數(shù)據(jù)區(qū)0000:0400-0000:0406中描述,對應(yīng)地址分別為3F8/2F8/3E8/2E8,COM1及COM3使用PC機中斷4,COM2及COM4使用中斷3。
在上表中,8250共有12個寄存器,使用了8個地址,其中部分寄存器共用一個地址,由DLAB=0/1來區(qū)分,在DLAB=1用于設(shè)定通訊所需的波特率。常用的波特率參數(shù)見下表:
速率(BPS) | 波特率高八位 | 波特率低八位 |
50 | 09h | 00h |
300 | 01h | 80h |
600 | 00h | C0h |
2400 | 00h | 30h |
4800 | 00h | 18h |
9600 | 00h | 0Ch |
19200 | 00h | 06h |
38400 | 00h | 03h |
57600 | 00h | 02h |
115200 | 00h | 01h |
以下幾個表格為8250的寄存器的功能描述:
中斷允許寄存器(IER):
位 | 注 釋 |
7 | 未使用 |
6 | 未使用 |
5 | 進入低功耗模式(16750) |
4 | 進入睡眠模式(16750) |
3 | 允許MODEM狀態(tài)中斷 |
2 | 允許接收線路狀態(tài)中斷 |
1 | 允許發(fā)送保持器空中斷 |
0 | 允許接收數(shù)據(jù)就緒中斷 |
Bit0置1將允許接收到數(shù)據(jù)時產(chǎn)生中斷,Bit1置1時允許發(fā)送保持寄存器空時產(chǎn)生中斷,Bit2置1將在LSR變化時產(chǎn)生中斷,相應(yīng)的Bit3置位將在MSR變化時產(chǎn)生中斷。
中斷識別寄存器(IIR):
位 | 注 釋 |
Bit6:7=00 | 無FIFO |
Bit6:7=01 | 允許FIFO,但不可用 |
Bit6:7=11 | 允許FIFO |
Bit5 | 允許64字節(jié)FIFO(16750) |
Bit4 | 未使用 |
Bit3 | 16550超時中斷 |
Bit2:1=00 | MODEM狀態(tài)中斷(CTS/RI/DTR/DCD) |
Bit2:1=01 | 發(fā)送保持寄存器空中斷 |
Bit2:1=10 | 接收數(shù)據(jù)就緒中斷 |
Bit2:1=11 | 接收線路狀態(tài)中斷 |
Bit0=0 | 有中斷產(chǎn)生 |
Bit0=1 | 無中斷產(chǎn)生 |
IIR為只讀寄存器,Bit6:7用來指示FIFO的狀態(tài),均為0時則無FIFO,此時為8250或16450芯片,為01時有FIFO但不可以使用,為11時FIFO有效并可以正常工作。Bit3用來指示超時中斷(16550/16750)。
Bit0用來指示是否有中斷發(fā)生,Bit1:2標識具體的中斷類型,這些中斷具有不同的優(yōu)先級別,其中LSR中斷級別最高,其次是數(shù)據(jù)就緒中斷,然后是發(fā)送寄存器空中斷,而MSR中斷級別最低。
FIFO控制寄存器(FCR):
位 | 注 釋 |
Bit7:6=00 | 1Byte產(chǎn)生中斷 |
Bit7:6=01 | 4Byte產(chǎn)生中斷 |
Bit7:6=10 | 8Byte產(chǎn)生中斷 |
Bit7:6=11 | 14Byte產(chǎn)生中斷 |
Bit5 | 允許64字節(jié)FIFO |
Bit4 | 未使用 |
Bit3 | DMA模式選擇 |
Bit2 | 清除發(fā)送FIFO |
Bit1 | 清除接收FIFO |
Bit0 | 允許FIFO |
FCR可寫但不可以讀,該寄存器用來控制16550或16750的FIFO寄存器。Bit0置1將允許發(fā)送/接收的FIFO工作,Bit1和Bit2置1分別用來清除接收及發(fā)送FIFO。清除接收及發(fā)送FIFO并不影響移位寄存器。Bit1:2可自行復(fù)位,因此無需使用軟件對其清零。Bit6:7用來設(shè)定產(chǎn)生中斷的級別,發(fā)送/接收中斷將在發(fā)送/接收到對應(yīng)字節(jié)數(shù)時產(chǎn)生。
線路控制寄存器(LCR):
位 | 注 釋 |
Bit7=1 | 允許訪問波特率因子寄存器 |
Bit7=0 | 允許訪問接收/發(fā)送及中斷允許寄存器 |
Bit6 | 設(shè)置間斷,0-禁止,1-設(shè)置 |
Bit5:3=XX0 | 無校驗 |
Bit5:3=001 | 奇校驗 |
Bit5:3=011 | 偶校驗 |
Bit5:3=101 | 奇偶保持為1 |
Bit5:3=111 | 奇偶保持為0 |
Bit2=0 | 1位停止位 |
Bit2=1 | 2位停止位(數(shù)據(jù)位6-8位),1.5位停止位(5位數(shù)據(jù)位) |
Bit1:0=00 | 5位數(shù)據(jù)位 |
Bit1:0=01 | 6位數(shù)據(jù)位 |
Bit1:0=10 | 7位數(shù)據(jù)位 |
Bit1:0=11 | 8位數(shù)據(jù)位 |
LCR用來設(shè)定通訊所需的一些基本參數(shù)。Bit7為1指定波特率因子寄存器有效,為0則指定發(fā)送/接收及IER有效。Bit6置1會將發(fā)送端置為0,這將會使接收端產(chǎn)生一個“間斷”。Bit3-5用來設(shè)定是否使用奇偶校驗以及奇偶校驗的類型,Bit3=1時使用校驗,Bit4為0則為奇校驗,1為偶校驗,而Bit5則強制校驗為1或0,并由Bit4決定具體為0或1。Bit2用來設(shè)定停止位的長度,0表示1位停止位,為1則根據(jù)數(shù)據(jù)長度的不同使用1.5-2位停止位。Bit0:1用來設(shè)定數(shù)據(jù)長度。
MODEM控制寄存器(MCR):
位 | 注 釋 |
Bit7 | 未使用 |
Bit6 | 未使用 |
Bit5 | 自動流量控制(僅16750) |
Bit4 | 環(huán)路測試 |
Bit3 | 輔助輸出2 |
Bit2 | 輔助輸出1 |
Bit1 | 設(shè)置RTS |
Bit0 | 設(shè)置DSR |
MCR寄存器可讀可寫,Bit4=1進入環(huán)路測試模式。Bit3-0用來控制對應(yīng)的管腳。
線路狀態(tài)寄存器(LSR):
位 | 注 釋 |
Bit7 | FIFO中接收數(shù)據(jù)錯誤 |
Bit6 | 發(fā)送移位寄存器空 |
Bit5 | 發(fā)送保持寄存器空 |
Bit4 | 間斷 |
Bit3 | 幀格式錯 |
Bit2 | 奇偶錯 |
Bit1 | 超越錯 |
Bit0 | 接收數(shù)據(jù)就緒 |
LSR為只讀寄存器,當發(fā)生錯誤時Bit7為1,Bit6為1時標示發(fā)送保持及發(fā)送移位寄存器均空,Bit5為1時標示僅發(fā)送保持寄存器空,此時,可以由軟件發(fā)送下一數(shù)據(jù)。當線路狀態(tài)為0時Bit4置位為1,幀格式錯時Bit3置位為1,奇偶錯和超越錯分別將Bit2及Bit1置位為1。Bit0置位為1表示接收數(shù)據(jù)就緒。
MODEM狀態(tài)寄存器(MSR):
位 | 注 釋 |
Bit7 | 載波檢測 |
Bit6 | 響鈴指示 |
Bit5 | DSR準備就緒 |
Bit4 | CTS有效 |
Bit3 | DCD已改變 |
Bit2 | RI已改變 |
Bit1 | DSR已改變 |
Bit0 | CTS已改變 |
MSR寄存器的高4位分別對應(yīng)MODEM的狀態(tài)線,低4位表示MODEM的狀態(tài)線是否發(fā)生了變化。
評論