340 likes | 463 Views
9.7 采用 RS-485 的异步串行通讯接口 9.7.1 RS-232 的局限. RS-232C 采用 单端驱动、单端接收的单端双极性电路 标准。仅用一条线路传输一种信号,根据该信号线上电平相对于公共的信号地电平的大小来决定逻辑的 “ 1 ” 和 “ 0 ” 。 对于多条信号线来讲,它们的地线是公共的,这种共地传输方式,抗干扰能力很差。 尽管采用电平转换器来提高信号传输电平,但在较长距离时,由于电压损失,仍不可避免错误。
E N D
9.7 采用RS-485的异步串行通讯接口 9.7.1 RS-232 的局限 • RS-232C采用单端驱动、单端接收的单端双极性电路标准。仅用一条线路传输一种信号,根据该信号线上电平相对于公共的信号地电平的大小来决定逻辑的“1”和“0”。 • 对于多条信号线来讲,它们的地线是公共的,这种共地传输方式,抗干扰能力很差。 • 尽管采用电平转换器来提高信号传输电平,但在较长距离时,由于电压损失,仍不可避免错误。 • 当信号穿过电磁干扰环境时,也可能因附加的干扰信号电平使发送的“0”变为“1”或“1”变为“0”。故其信号波特率不能过高,仅限在20Kb/s以下,且距离不大于15m。
9.7.2 RS-485总线 • RS-485接口标准是一种平衡传输方式的串行接口标准,这个标准的电气特性对逻辑电平的定义是根据两条传输线之间的电位差值来决定的,当AA'线的电平比BB'线的电平高200mⅤ时表示逻辑“1”,当AA'线的电平比BB'线的电平低200mV时表示逻辑“0”。
RS-485标准允许在电路中可有32个发送器,和32个接收器。允许一个发送器驱动多个负载设备,负载设备可以是驱动发送器、接收器或收发器组合单元 。 • RS-485的共线电路结构是在一对平衡传输线的两端都配置终端电阻,其发送器、接收器和组合收发器可挂在平衡传输线上的任何位置,实现在数据传输中多个驱动器和接收器共用同一传输线的多点应用。 • 由于RS-485标准采用差动发送/接收,因此共模抑制比高、抗干扰能力强;是多点对多点的全双工传输。 • 传输速率高,最大传输速率可达10Mb/s(传送15m),传输信号的摆幅小(200mV); • 传送距离远,采用双绞线,在不用MODEM的情况下,当100Kb/s的传输速率时,可传送的距离为2km。
9.7.3、采用RS-485的异步串行通信接口: 一、接收发送芯片MAX485/491简介: MAX485用于半双工,MAX491用于全双工 其引脚功能见P240表9.6 二、在网络中的连接: 见P242图9.30 三、设计: 见P243图9.31
9.8 、异步通信适配器的分析与使用 PC微机异步通信适配器是微机与微机、微机与MODEM及微机与外设之间进行异步通信的接口。其核心是UART(通用异步收/发器)。 常见的UART主要有INS8250、PC16450和PC16550。此外,PC16650和PC16750带更大缓冲的UART,它们在功能上与INS8250相同,但提供了更高的传输速度,而PIC16550还使用了FIFO数据缓冲方式,大大增加了数据的吞吐量。 UART的寄存器及其编程方法: INS8250和PC16450有10个寄存器,而PC16550有11个寄存器,但PC机只分配了7个I/O口地址供访问,故必须有两个端口地址被两个寄存器所共用: 1、发送保持寄存器(THR)和接收数据寄存器(RDR)共用一个端口,并 且是UART的最低地址号,以“写”访问THR,以“读”访问RDR。 2、波特率除数锁存器(BRD)的除数值为16位,分高、低两字节,其低字节BRDL寄存器用的端口与THR(或RDR)的端口相重,为了区别,在通信线路控制器(LCR)中设置了除数寄存器访问允许位DLAB(D7位),当要访问BRD时,置DLAB位(D7)为1,为0时则访问THR或RDR。见P244表9.8
CS0, CS1和CS2 片选线。 • ADS 地址选通线(锁存片选和内部寄存器选择) • DISTR和DISTR数据输入选通。(读寄存器允许) • DOSTR和DOSTR数据输出选通。(写寄存器允许) 1. 并行数据I/O及其控制线 • D7~D0 8位双向三态数据线。 • A0, A1和A2 内部寄存器选择。 • CSOUT 片选输出。(为高表示该片被选中) • DDIS 驱动器禁止。(禁止处理器和8250在数据线上的收发器动作)
BAUDOUT工作时钟输出。 • RCLK 接收时钟输入。可和BAUDOUT相接 2. 串行数据I/O线 • SOUT 串行数据输出。 • SIN 串行数据输入。 • XTAL1 外部时钟输入端。 • XTAL2 基准时钟信号输出端。 F工作时钟=F基准时钟÷除数寄存器=传送波特率×16
DSR数据设备就绪,输入线 • DTR数据终端就绪,输出线。 • RI振铃指示,输入线。 • RLSD接收线路信号检测,输入线。 • RTS请求发送,输出线。 • CTS清除发送,输入线。 3.和MODEM的握手信号线
OUT1和OUT2由用户指定的输出端。MODEM控制寄存器的第二、第三位决定。OUT1和OUT2由用户指定的输出端。MODEM控制寄存器的第二、第三位决定。 4.中断请求,复位输入及其他信号线 • INTPRT 中断请求输出。 • MR 主复位输入。
奇偶校验选择 奇偶校验允许 1.线路控制寄存器LCR 用于指定异步通信的数据格式,其最高位用于指定允许访问除数锁存器。 A2A1A0=011 D7 D6 D5 D4 D3 D2 D1 D0 WLS0 WLS1 SB SP STB DLAB EPS PEN 字符长度选择 00——5位 01——6位 10——7位 11——8位 中止设置 1—中止 0—正常 11——偶校验 01——奇校验 除数寄存器访问允许 0——禁止 1——允许 停止位选择 0——1位 1——1.5位(D1D0=00) 2位(D1D0<>00) 附加奇偶标志位选择 0——不附加 1——附加1位
2.线路状态寄存器LSR 用来向CPU提供数据接收和发送过程中产生的状态,可读可写。 A2A1A0=101 D7 D6 D5 D4 D3 D2 D1 D0 DR THRE OE PE TSRE BI FE 接收奇偶错 接收缓冲区满 中止识别标志 发送移位器空 接收格式错(无正确的停止位) 接收重叠错 发送保持器空 FIFO中接收数据错误(16550)
3.发送保持寄存器THR和接收缓冲寄存器RDR DLAB=0,A2A1A0=000 D7 D0 D7 D0 …… 接收移位寄存器 RSR 发送移位寄存器 TSR 低位到高位从SIN引脚串行移位进来 低位到高位串行移位到SOUT引脚输出 接收数据寄存器RDR 发送保持寄存器THR CPU来的8位数据并行进THR 8位数据并行进CPU 发送方 接收方
4.波特率除数锁存器 (BRDL和BRDH) DLAB=1, A2A1A0=001(高)或000(低) 这是一个软件控制的分频器,输出的工作时钟频率为16倍的波特率。 除数寄存器值 = 基准时钟频率÷(16×波特率) INS8250芯片输入的基准时钟频率为1.8432MHz,若波特率为4800b/s,则波特率除数为0018H,DLH中应填00H,DLL中应填18H 。 注意:PC16550的基准时钟一般为18.432MHz。 思考题: 使用INS8250异步传输7位ASCII码,如果需要数据传输速率为2400字符/秒,使用1位奇偶校验位和1位停止位,波特率除数锁存器的值是多少?
5.中断识别寄存器IIR IIR是只读存储器。高5位对INS8250和PC16450全为0,以下是对PC16550 A2A1A0=010(读) D7 D6 D5 D4 D3 D2 D1 D0 IP ID1 ID2 0 未决中断指示 0-有 1-无 允许64字节FIFO(16750) 0-禁止 1-允许 超时中断 0-不超时 1-超时 FIFO使 用指示 (16550) 01-允许FIFO但不可用 11-允许FIFO 中断类型标识
6.中断允许寄存器IER DLAB=0,A2A1A0=001 D7 D6 D5 D4 D3 D2 D1 D0 I2E I0E 0 I1E I3E 0 类型1中断(发送保持器空) 1-允许 0-屏蔽 类型2中断(接收缓冲器满) 1-允许 0-屏蔽 进入睡眠模式 (16750) 类型3中断(接收出错) 1-允许0-屏蔽 类型0中断(MODEM状态改变) 1-运行 0-屏蔽 进入低功耗模式(16550)
7.MODEM控制寄存器MCR 用于设置对MODEM的联络控制信号和芯片自检。 A2A1A0=100 D7 D6 D5 D4 D3 D2 D1 D0 DTR 0 RTS OUT1 LOOP OUT2 0 请求发送 自动流量控制(16750) 数据终端就绪 辅助输出1 环路检测(内部自循环) 辅助输出2,PC用做中断 注意这里的OUTi位极性和OUTi引脚相反。
8.MODEM状态寄存器MSR 用于检测和记录来自MODEM的联络控制信号及其状态的改变的。 A2A1A0=110 D7 D6 D5 D4 D3 D2 D1 D0 DSR CTS TERI RLSD RLSD DSR CTS RI DSR位发生改变 收到“接收线载波检测” 收到“数传机就绪” CTS位发生改变 收到“振铃指示”后沿 (下降沿) 收到“振铃指示” 收到“清除发送” RLSD位发生改变
9.FIFO控制寄存器(FCR) A2A1A0=010(写)PC16550后才有 D7 D6 D5 D4 D3 D2 D1 D0 清除接收FIFO缓冲器 接收端中断触发器水平(MSB) 允许64字节FIFO (16750) 允许FIFO缓冲器工作 清除发送FIFO缓冲器 接收端中断触发器水平(LSB) 保留 DMA方式选择
触发器水平即是指示在中断产生之前,接收缓冲器应该装满多少个字节。触发器水平即是指示在中断产生之前,接收缓冲器应该装满多少个字节。
9.8.3 采用UART的异步通信适配器硬件逻辑 1.PC机的串行口
9.8.4 INS8250初始化 • 通过写除数寄存器(端口0和端口1)设置波特率 • 通过写线路控制寄存器(端口3)设置通信数据格式。 • 通过写MODEM控制寄存器MCR(端口4)设置MODEM控制字。 • 通过写中断允许寄存器(端口1)设置中断允许控制字。
mov dx,3fbh ;线路控制寄存器地址 mov al,80h out dx,al;使DLAB=1,以便下面写除数 ;寄存器 mov dx,3f8h ;低位除数寄存器 mov al,0ch ;9600波特率的除数低8位 out dx,al mov al,00 inc dx ;高位除数寄存器 out dx,al
mov al, 00011011b ;偶校验、1位停止位 ;8位数据位 mov dx,3fbh ;线路控制寄存器地址 out dx,al mov al,03h ; mov dx,3fch ;MODEM控制寄存器地址 out dx,al mov al,0 ;禁止中断 mov dx,3f9h ;中断允许寄存器地址 out dx,al
9.8.5 查询方式串行通信程序设计 1. 查询方式发送 初始化8250 读LSR N D5=1? Y 发送一个字符 N 发完? Y 结束
2. 查询方式接收 初始化8250 读LSR Y 有错? N N D0=1? 错误处理 Y 接收一个字符 N 收完? Y 结束
9.8.6 中断方式串行通信程序设计 1. 通信中断初始化 • 修改中断向量,按使用的端口COM1或COM2,接管中断0CH或中断0BH。 • 确定INS8250操作方式,设置中断允许寄存器相应位的允许或禁止,并允许中断操作(置MCR的D3=1)。 • 确定起止式通信协议,设置通信波特率及数据帧传输格式。 • 开放通信中断,对8259A中断控制器的屏蔽寄存器编程(OCW1),允许中断IRQ4或IRQ3。
2. 通信中断服务程序 • 首先读取中断识别寄存器,判断中断源,然后转向对应的处理子程序。判断中断源,应该按照中断优先级别次序进行。 • 当中断识别寄存器D2D1=11时,表明接收出错中断,需要再读取线路状态寄存器,分析错误原因,再进行错误处理。 • 可能出现多个中断源同时引发中断。因此,每处理完一种中断源后,应继续读取中断识别寄存器,检测D0是否为“0”,当D0=0时,表明还有未决中断,应该继续分析中断源并进行中断处理。 • 从中断程序返回的条件是中断识别寄存器的D0=1。
本章要点 • 串行通信的特点,调制解调器及其作用 • 串行通信的基本方式及其特点 • 异步起止式数据格式、各部分的规定、起/止位的作用 • 数据透明,BSC及HDLC实现数据透明的方法 • RS-232C接口标准各信号线的作用 • RS-232C接口近程通信的连接及其原理 • EIA电平的逻辑定义 • 串行通信接口的主要任务 • 8251A两个命令字的写入方式(如何区分) • 8251A的编程应用 • 作业: • P257.T1、T3、T13、T15