大多数的电脑设备都具有RS-232C接口,尽管它的性能指标并非很好。在广泛的商场支撑下仍然常胜不衰。就运用而言,RS-232也的确有其优势:仅需3根线便可在两个数字设备之间全双工的传送数据。不过,RS-232C的操控要比运用并行通讯的打印机接口更难于操控。RS-232C运用了远较并行口更多的寄存器。这些寄存器用来完结串行数据的传送及RS-232C设备之间的握手与流量操控。本文将别离描绘的串行通讯的原理及详细的软件设计。
(1)RS-232C介绍与PC硬件:
RS-232C运用-3到-25V表明数字“1”,运用3V到25V表明数字“0”,RS-232C在空闲时处于逻辑“1”状况,在开端传送时,首要产生一开端位,开端位为一个宽度的逻辑“0”,紧随其后为所要传送的数据,所要传送的数据有最低位开端依此送出,并以一个完毕位标志该字节传送完毕,完毕位为一个宽度的逻辑“1”状况。
PC机一般运用8250或16550作为串行通讯的操控器,运用9针或25针的接插件将串行口的信号送出。该插座的信号界说如下:
DB-25 |
DB-9 |
信号称号 |
方向 |
含 义 |
2 |
3 |
TXD |
输出 |
数据发送端 |
3 |
2 |
RXD |
输入 |
数据接纳端 |
4 |
7 |
RTS |
输出 |
恳求发送(计算机要求发送数据) |
5 |
8 |
CTS |
输入 |
铲除发送(MODEM预备接纳数据) |
6 |
6 |
DSR |
输入 |
数据设备预备安排妥当 |
7 |
5 |
SG |
– |
信号地 |
8 |
1 |
DCD |
输入 |
数据载波检测 |
20 |
4 |
DTR |
输出 |
数据终端预备安排妥当(计算机) |
22 |
9 |
RI |
输入 |
响铃指示 |
以上信号在通讯进程之中或许会被悉数或部分运用,最简略的通讯仅需TXD及RXD及SG即可完结,其他的握手信号能够做恰当处理或直接悬空,至于是否能够悬空这视乎你的通讯软件。比如说,假如运用DOS所供给的BIOS通讯驱动程序,那么,这些握手信号则需要做如下处理,由于BIOS的通讯驱动运用了这些信号。假如运用自己编写的串行驱动程序则能够彻底不运用这些握手信号(详见下面有关章节)。
PC机一般运用8250或16550的作为串行通讯操控器,8250及16550的管脚摆放如下:
8250(16550)的寄存器如下表所示:
基地址 |
读/写 |
寄存器缩写 |
注 释 |
0 |
Write |
– |
发送坚持寄存器(DLAB=0) |
0 |
Read |
– |
接纳数据寄存器(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 |
线路状况寄存器 |
6 |
Read |
MSR |
MODEM状况寄存器 |
7 |
Read/Write |
– |
Scratch Register |
PC机支撑1-4个串行口,即COM1-COM4,其基地址在BIOS数据区0000:0400-0000:0406中描绘,对应地址别离为3F8/2F8/3E8/2E8,COM1及COM3运用PC机中止4,COM2及COM4运用中止3。
在上表中,8250共有12个寄存器,运用了8个地址,其间部分寄存器共用一个地址,由DLAB=0/1来区别,在DLAB=1用于设定通讯所需的波特率。常用的波特率参数见下表:
速率(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状况中止 |
2 |
答应接纳线路状况中止 |
1 |
答应发送坚持器空中止 |
0 |
答应接纳数据安排妥当中止 |
Bit0置1将答应接纳到数据时产生中止,Bit1置1时答应发送坚持寄存器空时产生中止,Bit2置1将在LSR改变时产生中止,相应的Bit3置位将在MSR改变时产生中止。
中止辨认寄存器(IIR):
位 |
注 释 |
Bit6:7=00 |
无FIFO |
Bit6:7=01 |
答应FIFO,但不可用 |
Bit6:7=11 |
答应FIFO |
Bit5 |
答应64字节FIFO(16750) |
Bit4 |
未运用 |
Bit3 |
16550超时中止 |
Bit2:1=00 |
MODEM状况中止(CTS/RI/DTR/DCD) |
Bit2:1=01 |
发送坚持寄存器空中止 |
Bit2:1=10 |
接纳数据安排妥当中止 |
Bit2:1=11 |
接纳线路状况中止 |
Bit0=0 |
有中止产生 |
Bit0=1 |
无中止产生 |
IIR为只读寄存器,Bit6:7用来指示FIFO的状况,均为0时则无FIFO,此刻为8250或16450芯片,为01时有FIFO但不能够运用,为11时FIFO有用并能够正常作业。Bit3用来指示超时中止(16550/16750)。
Bit0用来指示是否有中止产生,Bit1:2标识详细的中止类型,这些中止具有不同的优先等级,其间LSR中止等级最高,其次是数据安排妥当中止,然后是发送寄存器空中止,而MSR中止等级最低。
FIFO操控寄存器(FCR):
位 |
注 释 |
Bit7:6=00 |
1Byte产生中止 |
Bit7:6=01 |
4Byte产生中止 |
Bit7:6=10 |
8Byte产生中止 |
Bit7:6=11 |
14Byte产生中止 |
Bit5 |
答应64字节FIFO |
Bit4 |
未运用 |
Bit3 |
DMA形式挑选 |
Bit2 |
铲除发送FIFO |
Bit1 |
铲除接纳FIFO |
Bit0 |
答应FIFO |
FCR可写但不能够读,该寄存器用来操控16550或16750的FIFO寄存器。Bit0置1将答应发送/接纳的FIFO作业,Bit1和Bit2置1别离用来铲除接纳及发送FIFO。铲除接纳及发送FIFO并不影响移位寄存器。Bit1:2可自行复位,因而无需运用软件对其清零。Bit6:7用来设定产生中止的等级,发送/接纳中止将在发送/接纳到对应字节数时产生。
线路操控寄存器(LCR):
位 |
注 释 |
Bit7=1 |
答应拜访波特率因子寄存器 |
Bit7=0 |
答应拜访接纳/发送及中止答应寄存器 |
Bit6 |
设置连续,0-制止,1-设置 |
Bit5:3=XX0 |
无校验 |
Bit5:3=001 |
奇校验 |
Bit5:3=011 |
偶校验 |
Bit5:3=101 |
奇偶坚持为1 |
Bit5:3=111 |
奇偶坚持为0 |
Bit2=0 |
1位中止位 |
Bit2=1 |
2位中止位(数据位6-8位),1.5位中止位(5位数据位) |
Bit1:0=00 |
5位数据位 |
Bit1:0=01 |
6位数据位 |
Bit1:0=10 |
7位数据位 |
Bit1:0=11 |
8位数据位 |
LCR用来设定通讯所需的一些基本参数。Bit7为1指定波特率因子寄存器有用,为0则指定发送/接纳及IER有用。Bit6置1会将发送端置为0,这将会使接纳端产生一个“连续”。Bit3-5用来设定是否运用奇偶校验以及奇偶校验的类型,Bit3=1时运用校验,Bit4为0则为奇校验,1为偶校验,而Bit5则强制校验为1或0,并由Bit4决议详细为0或1。Bit2用来设定中止位的长度,0表明1位中止位,为1则依据数据长度的不同运用1.5-2位中止位。Bit0:1用来设定数据长度。
MODEM操控寄存器(MCR):
位 |
注 释 |
Bit7 |
未运用 |
Bit6 |
未运用 |
Bit5 |
主动流量操控(仅16750) |
Bit4 |
环路测验 |
Bit3 |
辅佐输出2 |
Bit2 |
辅佐输出1 |
Bit1 |
设置RTS |
Bit0 |
设置DSR |
MCR寄存器可读可写,Bit4=1进入环路测验形式。Bit3-0用来操控对应的管脚。
线路状况寄存器(LSR):
位 |
注 释 |
Bit7 |
FIFO中接纳数据过错 |
Bit6 |
发送移位寄存器空 |
Bit5 |
发送坚持寄存器空 |
Bit4 |
连续 |
Bit3 |
帧格局错 |
Bit2 |
奇偶错 |
Bit1 |
逾越错 |
Bit0 |
接纳数据安排妥当 |
LSR为只读寄存器,当产生过错时Bit7为1,Bit6为1时标明发送坚持及发送移位寄存器均空,Bit5为1时标明仅发送坚持寄存器空,此刻,能够由软件发送下一数据。当线路状况为0时Bit4置位为1,帧格局错时Bit3置位为1,奇偶错和逾越错别离将Bit2及Bit1置位为1。Bit0置位为1表明接纳数据安排妥当。
MODEM状况寄存器(MSR):
位 |
注 释 |
Bit7 |
载波检测 |
Bit6 |
响铃指示 |
Bit5 |
DSR预备安排妥当 |
Bit4 |
CTS有用 |
Bit3 |
DCD已改动 |
Bit2 |
RI已改动 |
Bit1 |
DSR已改动 |
Bit0 |
CTS已改动 |
MSR寄存器的高4位别离对应MODEM的状况线,低4位表明MODEM的状况线是否产生了改变。