100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【微机原理与接口技术】学习笔记8 串行通信和8250芯片

【微机原理与接口技术】学习笔记8 串行通信和8250芯片

时间:2021-04-17 17:10:47

相关推荐

【微机原理与接口技术】学习笔记8 串行通信和8250芯片

文章目录

8.1 串行通信的基本概念和EIA RS-232C串行口8.1.1 串行/并行通信比较8.1.2 串行通信基本概念1. 串行通信定义和特点2. 串行通信的数据传送方式3. 串行通信的两种基本工作方式(1) 异步方式通信ASYNC(`Asynchronous`)(2) 同步方式通信(`Synchronous`)4. 串行传送速率5. 信道复用8.1.3 串行通信接口芯片UART和USART1. 通用串行接口芯片2. 调制解调器(1)幅度调制(2)频率键移调制(FSK)8.1.4 EIA RS-23C 串行口8.2 8250/16450串行通信芯片8.2.1 8250/16450的结构及功能1. 8250的引脚2.8250的内部结构8.2.2. 8250的内部寄存器及编程1. 线路控制与状态2. 波特率控制3. Modem控制与状态4. 中断允许与标识5. 数据收发6. 8250初始化7. 采用中断方式的异步通信驱动程序编程要点8. 8250/16450的编程

8.1 串行通信的基本概念和EIA RS-232C串行口

8.1.1 串行/并行通信比较

计算机与外部的信息交换称为通信,基本的通信方式有两种:并行通信,串行通信。

并行通信时,数据各位同时传送。例如,CPU通过8255A与外设交换数据时,就采用并行通信方式。这种方式传输数据的速度快,但使用的通信线多,如果要并行传送8位数据,需要用8根数据线,另外还要加上一些控制信号线。

随着传输距离的增加,通信线成本增加将成为突出的问题,而且传输的可靠性随着距离的增加而下降。 因此并行通信适用于近距离传送数据的场合。串行通信具有通信线少和传送距离远等优点。串行通信时,要传送的数据或信息必须按一定的格式编码,然后在单根线上,按位顺序传送。发送数据时,逐位发送完一个字符后再发第二个。接收数据时,逐位接收信息,再把它们拼成一个字符,送给CPU作进一步处理。

微机与远程终端或远距离处理机交换数据时,都采用串行通信方式。 有些外设,如MODEM、鼠标等,本身需用串行方式通信;有些外设,如打印机、绘图仪等,既可采用并行方式,也可用串行方式。当前,与外部的信息交换主要使用串行通信,计算机内部使用并行通信。因此,发送方在发送前要将并行数据转成串行数据,接收方接收后要完成串行数据到并行数据的转换

下面详细介绍串行通信方式。

8.1.2 串行通信基本概念

1. 串行通信定义和特点

串行通信是指计算机与外部设备以及计算机与计算机之间的信息传输可以通过一对传输线将数据一位一位顺序地传送。它的传输线少、成本低、速度慢,适合远距离通信。特点:

一对通信线,既要传数据,又要传控制信息需要通信协议.与TTL电平不兼容.通信双方约定波特率,控制通信速率.

2. 串行通信的数据传送方式

根据数据传送方向的不同,有三种方式:

单工方式

只使用一个信道,并且只允许数据按照一个固定的方向传送,与广播方式类似。半双工方式

只使用一个信道允许数据在两个方向传输,但是不能同时在两个方向上传送,只能交替进行,例如无线电对讲机。全双工方式

使用两个信道允许数据在两个方向传输并且可以同时进行,例如电话。

3. 串行通信的两种基本工作方式

串行通信基本方式:“同步”:通信的双方要协调发送、接收之间的动作以确保发送、接收准确的信息。

通信协议:为了实现同步,通信的双方必须就同步方式、信息格式、传输控制步骤、差错检验方式等问题定下一组共同遵守的规定,这种规定称为通信协议。

按同步方式的不同,串行通信有两种基本方式:

异步方式——异步通信协议同步方式——同步通信协议

(1) 异步方式通信ASYNC(Asynchronous

起止式异步通信:以字符为单位进行传输的,两个字符之间传输的时间间隔是不固定的,但在每一个字符内部的每一位是以固定的时间间隔来传送的

收、发双方同步方法:

字符格式中设置起始位和停止位;接收端利用极性相反的起始位和停止位检测新字符的开始

数据格式:起始位1位;数据位5~8位,D0在先;奇偶校验位1位;停止位1位、1.5位或2位。

发送1个包含7个数据位的ASCII符,加上起、停、校验位,共要发送10位,会浪费30%的传输时间。为提高串行数据传送速率,可采用同步方式。注意: 数据位、停止位的位数,校验位的设置在不同的传输系统中可根据需要进行不同的设置,但在同一传输系统中,收方、发方的设置必须一致

(2) 同步方式通信(Synchronous

以数据块为单位进行传送。每个数据块为一帧每帧包含若干个字符。不仅字符内部的位传送是同步的,而且字符和字符之间传送也必须是同步的。

因为每帧信息内部的每一位都要求同步,所以收、发两端必须使用同一时钟源作为时钟信号

同步方式通信中收、发双方的同步方法:

所传送的字符没有起始位和停止位,不是用起始位表示字符的开始。同步方法可分为: 外同步:采用专用控制线来实现收、发的同步操作内同步:每帧开始有同步字符或同步标志码, 同步方式通信时,每帧信息之间不允许有空隙,当线路空闲时,须发送同步字符(标志)。 单同步双同步

同步串行数据发送格式:

传输开始,先发送12个同步字符。收发双方须用同一个时钟协调,确定传输的每bit位置。双方达到同步后,就可逐个字符连续发送一大块数据,不再需要起始位和停止位。接收方利用同步字符使其内部时钟与发送方同步,将其后的数据逐位移入,转换成并行格式。

同步方式通信的效率:同步方式采用同步字符(标志)进行一帧信息的同步。在连续发送字符时,添加的附加信息远远少于异步通信,有较高的通信效率

同时,同步方式通信中要求收、发时钟完全一致,和异步方式通信比较,它的技术复杂、硬件开销大。因此,同步方式通信适用于快速传送、大量数据的环境。

4. 串行传送速率

波特率(Baud Rate每秒传送数据的位数,单位波特(Bd),等于传送bit信息所用时间的倒数

例如,设1个串行字符包含10位:1个起始位、7个数据位、1个奇偶校验位、1个停止位,如每秒传送120个字符,则波特率为:10位/字符×120字符/秒=1200位/秒=1200波特,传送每位的时间:1s/1200=0.833ms

异步传送常用波特率:110,300,600,1200,2400,4800,9600,19200,28800,36400,57600波特。同步传送波特率高于异步传送,可达到上千兆波特。

5. 信道复用

时分多路复用TDM(Time Division Multiplexing),就是将一条物理传输线路按时间分成若干时间片轮换地为多个信号所占用,每个时间片由复用的一个信号占用。

频分多路复用FDM(Frequency Division Multiplexing)就是利用频率调制原理,将要同时传送的多个信号进行频谱搬移,使它们互不重叠地占据信道频带的不同频率段,然后经发送器从同一信道上同时或不同时地发送出去。

计算机串行数据通信及其接口中使用时分多路复用系统

8.1.3 串行通信接口芯片UART和USART

1. 通用串行接口芯片

常用的通用串行接口芯片为:

通用异步收发器UART(Universal Asynchronous Receiver Transmitter),只能异步工作。如National SemiconductorINS 8250,IBM PC机中采用它作串行接口芯片。通用同步异步收发器USART(Universal Synchronous Asynchronous Receiver Transmitte),同步异步都可以。如Intel 8251A

接受方式:当RxD线上出现起始位,便开始接收1个字符。在CLK控制下移进移位寄存器,转换成并行数据,送入并行寄存器中,等CPU读取。

若奇偶校验出错,置奇偶校验出错标志。自动检测停止位,若无,置帧出错标志FRERR。若前字符未取走,又送来1个,置溢出标志OVRN

发送方式:发送缓冲器把来自CPU的并行数据,加上起始位、停止位和奇偶校验位等,并行串行变换后,从TxD一位一位发送出去。还设状态信息:接收数据就绪(RDA),发送缓冲器空(TBE)等。

UART/USART的主要功能:

发送时,用并行输入、串行输出移位寄存器,实现并行码->串行码变换后,再发送出去。接收时,则用串行输入、并行输出寄存器,实现串行码->并行码变换后,再送给CPU。传送过程中,需要握手联络信号,确保双方速度相同,并检测传送中的错误。需要专门的可编程串行通信接口芯片,由编程来设定不同的工作方式、选择不同的字符格式和波特率等。

2. 调制解调器

串行接口不适合长距离传送。解决方式是:利用调制器可以将数字信号调制成模拟信号,能够进行远距离传输,然后再用解调器把模拟信号变换为数字信号。能实现这种转换的器件即调制解调器MODEMModulator Demodulator

比如说可用标准电话线进行远程传送,但电话线只能传送300~3000Hz音频信号,不能直接传送频带很宽的数字信号。因此,可以先把数字信号转换成音频信号后,再利用电话线进行传输,接收数据时再将音频信号转换回数字信号

数字调制常用的方法有幅度调制(调幅)、频率键移调制(调频)和相位键移调制 (调相),利用幅移键控ASK、频移键控FSK和相移键控PSK使正弦波的幅值、频率和相位随着数字信号1和0变化。

(1)幅度调制

改变信号幅度的方法来表示数字信号01。一种调幅方法为: 当接通f=387Hz的正弦波时表示数字1,断开时表示0,如图

另一种方法是调幅时总是有正弦波输出,但幅度不同,一种输出幅度表示数字0,另一种表示1

(2)频率键移调制(FSK)

用一种频率信号表示数字0,另一种表示1。如图

为了实现全双工通信,常使用四种不同的频率来表示不同方向上的两种不同数字。

例如,对于Bell 103A,300Bd FSK MODEM标准,规定在一个方向上用2025Hz的频率表示0,而用2225Hz表示1;另一个方向用1070Hz表示0,1270Hz表示1。

8.1.4 EIA RS-23C 串行口

在20世纪60年代,电子工业协会EIA(Electronic Industry Association)开发了一个串行接口推荐标准EIA RS-232C。标准对串行接口电路中的插头插座规格、各引脚名称和功能、信号电平等做了统一规定。

1.信号电平

逻辑高电平:有负载时-3V~-15V,无负载时-25V。逻辑低电平:有负载时+3V~+15V,无负载时+25V。通常用±12VRS-232C电平。

计算机及接口芯片多采用TTL电平,即0~0.8V为逻辑0,+2V~+5V为逻辑1。显然与RS-232C电平不匹配,必须设计专门的电平转换电路

2.接插件规格

RS-232C串行接口规定使用25芯D型插头插座连接,引脚形状和引脚号如图(a)。也可用9芯D型插头座, 如图(b)。

图中给出的都是凸型接插件。此外还有凹型接插件,使用时要注意插头座上标的引脚序号。

3.信号定义

RS-232C标准对25芯9芯插件各引脚的信号名称、功能等都做了具体规定,25芯还有一些引脚未定义或保留。

TxD:发送数据,DTE → DCERxD:接收数据,DCE → DTEDTR:DTE准备好,DTE → DCEDSR:DCE准备好,DCE → DTERTS:请求发送,DTE → DCECTS:允许发送,DCE → DTERI:振铃指示,DCE → DTEDCD:载波检出,DCE → DTESG:信号地

两个地信号:保护地(1), 信号地(7)。信号地是所有信号的公共地, 为防止信号地上感应大的交流地电流,应把两个地连在一起。

两根数据信号线:TxDRxD

EIA的逻辑1表示数字位的1MARK,即实际的负电压-3V~-15VEIA的逻辑0表示数字位的0SPACE,即实际的正电压+3V~+15V。常用三线传输的最小方式通信,只使用TxD、RxD及地线这3根线通信。地线与25芯插座的1、7脚相连。

8.2 8250/16450串行通信芯片

8.2.1 8250/16450的结构及功能

1. 8250的引脚

VccGND外,其他信号可分成对系统和对通信设备

2.8250的内部结构

注意:THR/RBR指发送保持寄存器/接受缓冲寄存器。TSR是发送移位寄存器。

有几点需要注意:

只有8个端口地址;BAUDOUT‾\overline {\text{BAUDOUT}}BAUDOUT :波特率的节拍信号;XTAL‾1\overline {\text{XTAL}}_1XTAL1​ :输入的一个基准的时钟节拍,接的是1.8432MHz;BAUDOUT‾\overline {\text{BAUDOUT}}BAUDOUT 的节拍信号是最终的工作过程中的波特率的16倍。基准频率 XTAL‾1\overline {\text{XTAL}}_1XTAL1​ / 放入除数锁存器的除数 = BAUDOUT‾\overline {\text{BAUDOUT}}BAUDOUT,BAUDOUT‾\overline {\text{BAUDOUT}}BAUDOUT / 16 = SOUT,SIN\text{S}_{OUT},\text{S}_{IN}SOUT​,SIN​

端口地址的使用和共享情况如下:

8.2.2. 8250的内部寄存器及编程

1. 线路控制与状态

LCR串行通信数据格式W/R

其中:

D7DLAB,标志位;D6设置间断位;D5附加位,为1时意味着发送的数据中存在附加的奇偶校验位;D4奇偶校验位,是奇校验还是偶校验;D3D2停止位,是0表示停止位只有1位,否则可能是1.5位或者2位;D1D0数据位的位数是5位而D2=1,则停止位是1.5位;否则数据位为6,7,8位时停止位是两位。

LSR串行数据收发状态R/W(D6除外)

其中:

D4:为1可以引发中断;D3D2D1:格式错,校验错,溢出错,其中有一位为1,就可以引发中断。

2. 波特率控制

3. Modem控制与状态

MCR:Modem控制寄存器。高3位不用。D4=D3输出高低电平;D2输出高低电平;D1请求发送;D0数据终端设备就绪。

LOOP=1的回送方式下,8250的发送、接收和Modem的中断仍然工作,但Modem中断源为MCR4位、非状态输入端,并受IER控制。改变MCR4位,可产生Modem变化中断。

8250中断系统测试方法:向LSR6位、MSR低4位写入适当值(写1),中断允许时,可产生中断。

Loop方式返回正常工作时,重新编程8250,并将MCR置成全0。

D3=1(即 OUT‾2\overline {\text{OUT}}_2OUT2​ 引脚置0),中断请求信号才能发出,因此我们需要先将其置为1。此外,还要设定中断允许寄存器。

4. 中断允许与标识

中断具有优先级别。

产生中断时读取中断识别寄存器。高五位恒定为零,低三位才有用。

5. 数据收发

接受数据:(绿色区域为中断条件)

发送数据:

THRE=1说明数据接受保持寄存器中的数据已经发送,为空,发送中断。

6. 8250初始化

整个过程如下:

① 测试8250/适配器存在——IIR中断识别寄存器高5位为全0。(地址3FA/2FA)

② 设置波特率除数——LCR.DLAB=1(线路控制寄存器D7=1) ,DLL(除数寄存器低字节3F8/2F8) 和DLH(除数寄存器高字节3F9/2F9) 。

③ 设置通道线路控制——LCR.DLAB=0(线路控制寄存器D7=0),设置LCR(线路控制寄存器)各位。

④ 设置Modem控制MCR(Modem控制寄存器)中DTR=1、RTS=1、OUT1=0、OUT2=1(中断允许输出)LOOP

⑤ 设置中断允许LCR.DLAB=0(线路控制寄存器),IER(中断识别寄存器)。

7. 采用中断方式的异步通信驱动程序编程要点

① 中断初始化

修改中断向量表中COM1/COM2对应的0CH/0DH向量指向中断程序,初始化8250

IER相应位,MCR.OUT2=1→ OUT‾2=0→WPRPT\overline {\text{OUT}}_2 = 0 \to \text{WPRPT}OUT2​=0→WPRPT ,信号能送到8259IR3IR4。根据通信规程,设置数据帧格式;根据波特率设置分频除数开放异步中断:清除8259 OCW中的D3D4位允许IR3IR4上请求

② 主程序(根据应用自行编制)

③ 中断服务程序

辨别发生中断的中断源:读IIR,根据其中D2D1D0和状态转入相应子程序

中断处理:IIRD2D1D0表示ID1、ID2、IP

D2D1D0=110,接收数据出错,读LSRD4D3D2D1,判断是间断还是何种错误,转相应处理子程序。D2D1D0=100,接收数据就绪,从RBR中读数据存接收缓冲区。D2D1D0=010,发送保持寄存器空,从发送缓冲区取数据送THRD2D1D0=000,Modem状态变化,读MSRD3D2D1D0,判断是哪些Modem引脚改变了状态,转相应处理子程序。

判断有无尚未处理的中断请求:每种中断源的中断处理完之后,再次读取IIRD2D1D0位,D0=0,根据D2D1转入相应子程序;若D0=1,说明8250所有中断处理结束,对8259EOI命令返回被中断的程序。

8. 8250/16450的编程

两台微机通过各自的异步通信口COM1三线连接法通信,通信波特率为2400

1、初始化程序

MOV DX, 3FBH ;线路控制器MOV AL, 80H ;往线路控制器LCR中写DLAB=1,1000_0000=80HOUT DX, AL ;DLAB=1MOV DX, 3F9H ;向除数寄存器的高八位写数MOV AL, 0 ;AL=0OUT DX, AL ;写0MOV DX, 3F8H ;向除数寄存器的低八位写数MOV AL, 30H ;1843200/(2400*16)=48写除数48=30HOUT DX, AL ;写30H;正式开始芯片初始化MOV DX, 3FBH ;线路控制器MOV AL, 1AH;0001_1010 数据长7位, 1个停止位, 偶校验OUT DX, AL;写线路控制器MOV DX, 3FCH ;Modem控制寄存器MOV AL, 03H ;0000_0(out2=0,禁止中断)01(请求发送)1(终端汇报)OUT DX, AL ;写入Modem控制寄存器MOV DX, 3F9H ;中断允许寄存器MOV AL, 0 ;全部屏蔽OUT DX, AL ;完成初始化

2、通信工作程序:用查询方式进行通信

KEEP-TRY:MOV DX, 3FDH;线路状态寄存器IN AL, DX;读入ALTEST AL, 1EH;0001_1110 判断BI/FE/PE/OEJNZ ERROR-ROUTINE ;不等于0,处理errorTEST AL, 1;末位是1JNZ RECEIVE ;去收TEST AL, 20H;0010_0000有没有发的机会JZ KEEP-TRY;为0,继续tryMOV DX, 3F8H;进入发的流程,发送寄存器MOV AL, CL;发的数据从CL来OUT DX, AL;发送数据JMP SHORT KEEP-TRY ;继续回到KEEP-TRYRECEIVE:;接受MOV DX, 3F8H;从数据寄存器中接受IN AL, DX;读到AL中...

3、综合举例

IBM PC机上按查询方式编写发送程序,按中断方式编写接收程序。该程序能连续把符号“*”从串口COM1发送出去并在CRT上显示;同时能把从串口COM1上接收到的字符显示在CRT上,出错时显示标志“#”

;填写中断向量表START: CLI;关中断MOV AX, 0;MOV ES, AX;ES清0MOV DI, 4*12;COM1口用中断12号,12*4,偏移地址MOV AX, OFFSET PRINT ;偏移地址CLD;STOSW;往中断向量表中填写偏移地址,将AX的内容写入ES:DI指向的地方,DI+=2MOV AX, CS;MOV AX, SEG PRINT STOSW;往中断向量表中填写段地址,将AX的内容写入ES:DI指向的地方INAL, 21H;读入屏蔽寄存器的内容AND AL, 0EFH;1110_1111OUT 21H, AL;对COM1的8259设置端口屏蔽,确保IR4不被屏蔽;开始8250相关的操作MOV DX, 3FBH;DLAB线路控制器MOV AL, 80H;DLAB置为1OUT DX, AL;写入线路控制器;写除数MOV DX, 3F8H;MOV AL, 0CH;写入的除数是12OUT DX, AL;MOV AL, 0;MOV DX, 3F9H;OUT DX, AL;波特率设置为9600;正式初始化8250MOV AL, 0BH;DLAB=0,0000_1011奇校验,1位停止位,8位数据位MOV DX, 3FBH;对LCR线路控制器写入内容OUT DX, AL;;MOV DX, 3FCH;设置Modem控制器MOV AL, 0BH;0000_1011OUT2打开,中断方式OUT DX, AL;写入内容;MOV DX, 3F9H;IER操作中断允许寄存器MOV AL, 01H;开启接受数据中断0000_0001OUT DX, AL;;不用设置中断识别器,因为只有1个中断STI;开启中断;主循环:发送TR:MOV DX, 3FDH;线路状态寄存器IN AL, DX;读线路状态TEST AL, 20H;0010_0000看看是否已经发送THRE=1JZ TR;继续循环MOV AL, '*';写'*'MOV DX, 3F8H;OUT DX, AL;写入THR/RBRMOV AH, 02;通过中断调用MOV DL, AL;显示DLINT 21H;JMP TR;循环;中断服务程序, 接受数据,发起中断PRINT PROCSTIPUSH DXPUSH AX;上面三句按部就班MOV DX, 3FDH;读取线路状态寄存器IN AL, DXTEST AL, 1EH;和0001_1110相与JNZ PERR;不是0进入错误处理MOV DX, 3F8H;3F8数据口读入IN AL, DX;接受数据MOV DL, AL;显示数据MOV AH, 02;INT 21H;REND:MOV AL, 20H;对8259发送EOI命令OUT 20H, ALPOP AXPOP DXIRET;上面5句按部就班PERR:;错误处理MOV DX, 3F8H;出了错也要读出来IN AL, DX;MOV DL, '#';显示'#'MOV AH, 2;INT 21H;JMP REND;返回RENDPRINT ENDP

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。