810 likes | 971 Views
第 9 章 常用外设与通信接口. 9.1 可编程并行接口芯片 82C55. 9.1.1 8255 的基本功能. 8255 具有 2 个独立的 8 位 I/O 口( A 口和 B 口)和 2 个独立的 4 位 I/O ( C 口上半部和 C 口下半部) ,提供 TTL 兼容的并行接口。作为输入时提供三态缓冲器功能,作为输出时提供数据锁存功能。其中, A 口具有双向传输功能。 8255 有 3 种工作方式 ,方式 0 、方式 1 和方式 2 ,能使用无条件、查询和中断等多种数据传送方式完成 CPU 与 I/O 设备之间的数据交换。
E N D
9.1 可编程并行接口芯片82C55 9.1.1 8255的基本功能 • 8255具有2个独立的8位I/O口(A口和B口)和2个独立的4位I/O(C口上半部和C口下半部),提供TTL兼容的并行接口。作为输入时提供三态缓冲器功能,作为输出时提供数据锁存功能。其中,A口具有双向传输功能。 • 8255有3种工作方式,方式0、方式1和方式2,能使用无条件、查询和中断等多种数据传送方式完成CPU与I/O设备之间的数据交换。 • B口和C口的引脚具有达林顿复合晶体管驱动能力,在1.5V时输出1mA电流,适于作输出端口。 • C口除用做数据口外,当8255工作在方式1和方式2时,C口的部分引脚作为固定的联络信号线。
9.1.2 8255的内部结构和外部引脚 1. 内部结构
9.1.3 8255的工作方式 1.方式0 方式0提供两个8位口(A和B)和两个4位口(PC7~PC4,PC3~PC0),任何一个口都可用做输入或输出(单向),由CPU用简单的I/O指令来进行读/写。 一般用于无条件传送的场合,也可以用做查询式传送。 习惯上将A口和B口作为数据口,将C口作为控制输出和状态输入口。
2.方式1 (A口和B口有此方式,单向) (1)方式1的输入 A口和B口方式l的输入组态
INTE为中断允许位,对应PC口寄存器(状态字)的D4位(INTEA)和D2位 (INTEB) ,可通过对PC口按位写方法设置; • PC2、PC4引脚作用:用作锁存数据口数据; • 中断条件:STB#(引脚)=1(无效),IBF=1、INTE=1; • PC6、7可作为数据线使用。
方式1下的输入过程: • 外设把数据送到8255端口 • 外设用选通信号STB#把数据打入端口的输入锁存器 • 输入缓冲器满信号IBF有效,CPU可查询该信号 • 如果INTE有效,8255将使INTR有效,申请中断 • CPU向8255发读信号RD#,从8255端口读数据 • 中断请求信号INTR变无效,然后IBF无效,外设可送下一个数据。
(2)方式1的输出 8255方式1输出组态
INTE为中断允许位,对应PC口寄存器(状态字)的D6位(INTEA)和D2位 (INTEB) ,可通过对PC口按位写方法设置; • PC2、PC6引脚作用:用作对OBF#的回应; • 中断条件:ACK# (引脚)=1(无效), OBF#=1(无效)、INTE=1; • PC4、5可作为数据线使用。
方式1下的输出过程: • CPU发WR#信号,向8255送一个数据 • WR#使INTR无效,OBF#有效,通知外设可取数据 • 外设接到数据后,向8255回送ACK#信号 • OBF#无效,接着ACK#无效,其上升沿引发INTR有效,向CPU发中断申请,请求发送新数据。
3.方式2 双向I/O,只有A口有此方式 8255方式2组态
9.1.4 8255的控制字与初始化编程 1.工作方式控制字(写,A1A0=11 ) 8255工作方式控制字
例9.1 某系统要求使用8255的A口工作于方式1作输入,B口工作于方式0作输出,C口上半部输入,下半部输出。8255端口地址为60H-63H。 控制字为:10111000B=0B8H 初始化程序为: MOV AL,0B8H OUT 63H,AL
2.C口按位置/复位控制字(写,A1A0=11 ) C口按位置/复位控制字 例9.2 如上例,若A口工作于方式1作输入,要使用中断传送方式,则应当写PC4的按位置位字: MOV AL,00001001B OUT 63H,AL
方式1下8255状态字中INTE位的置位和复位 • ⊙ 若允许PA口输入中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00001001B ;置PC4=1,允许中断请求 • OUT DX,AL • ⊙ 若禁止PA口输入中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00001000B ;置PC4=0,禁止中断请求 • OUT DX,AL • ⊙ 若允许PA口输出中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00001101B ;置PC6=1,允许中断请求 • OUT DX,AL
⊙ 若允许PB口输入中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00000101B ;置PC2=1,允许中断请求 • OUT DX,AL • ⊙ 若禁止PB口输入中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00000100B ;置PC2=0,禁止中断请求 • OUT DX,AL • ⊙ 若允许PB口输出中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00000101B ;置PC2=1,允许中断请求 • OUT DX,AL
例9.3 下图采用一个8255芯片和软盘控制器相连,箭头标明了I/O的方向,根据该图,试写出8255的初始化程序。设8255端口地址为0300-0303H。 8255用作软盘基本接口
A口工作在方式2,PC4-PC7作应答联络信号线,PC3用作A组中断请求,B口和PC0-PC2作输出,工作在方式0。 工作方式控制字为:11XXX000B 初始化程序为: MOV DX,303H MOV AL,0C0H OUT DX,AL MOV AL,00001001B OUT DX,AL ;PC4置位,开放输入中断 MOV AL,00001101B OUT DX,AL ;PC6置位,开放输出中断
例9.4 某应用系统以8255A作为接口,采集一组开关S7~S0的状态,然后通过一组发光二极管LED7~LED0显示开关状态,(Si闭合,则对应LEDi亮,Si断开,则对应的LEDi灭)电路连接如下图,已知8255A、B两组均工作在方式0。例9.4 某应用系统以8255A作为接口,采集一组开关S7~S0的状态,然后通过一组发光二极管LED7~LED0显示开关状态,(Si闭合,则对应LEDi亮,Si断开,则对应的LEDi灭)电路连接如下图,已知8255A、B两组均工作在方式0。 • 写出8255四个端口的地址。 • 写出8255工作方式控制字。 • 写出实现给定功能的汇编语言程序。
LED7 D7~D0 D7~D0 PA7 IOW# WR# LED0 RD# IOR# PA0 A9 G1 CS# Y0 # AEN G2A# 8255A A8 74LS138 A7 & G2B# S7 A6 A5 PB7 A4 C S0 A3 B A A2 PB0 A1 A1 A0 A0
答: • A口、B口、C口和控制口的地址分别是320H、321H、322H和323H。 • A口工作在方式0输出,B口工作在方式0输入,C口空闲,所以其控制字是10000010b=82H • 程序如下: MOV AL, 82H ;置方式字 MOV DX, 323H ;置控制端口地址 OUT DX, AL L1: MOV DX, 321H ;置B口地址 IN AL, DX ;读开关状态(1断,0通) NOT AL ;状态取反 MOV DX, 320H ;置A口地址 OUT DX, AL ;输出(1亮,0灭) JMP L1
思考题: 如果上题要求修改成:不用查询方式,而是每50ms来一次中断,在中断中读B口,输出A口,请问电路和程序要怎么改动?假设系统提供一个2KHz的脉冲,8254和8259的地址同PC机器。
打印机接口在STB#有效时,接收数据,而在BUSY有效时,表示打印机忙,不能接收数据。 例9.5 假设利用8255的A口方式0与打印机相连,将内存缓冲区BUFF中的字符打印输出。
# # 打印机时序 返回
.DATA BUFF DB ‘HELLO,WORLD!’,13,10,‘$’ PORTA EQU 60H PORTB EQU 61H PORTC EQU 62H PORTCN EQU 63H .CODE START: MOV AX,@DATA MOV DS,AX MOV SI,OFFSET BUFF
;8255初始化,A口方式0输出,C口上半部输入 MOV AL,88H OUT PORTCN,AL ;C口下半部输出 MOV AL,01H ;置位PC0,STB无效 OUT PORTCN,AL WAIT:IN AL,PORTC ;读打印机状态 TEST AL,80H ; 若“忙”则等待 JNZ WAIT MOV AL,[SI] CMP AL,‘$’ JZ PRINT_OVER OUT PORTA, AL ;数据送出
MOV AL, 00H ;产生选通信号,打印机接收数据,开始打印。 OUT PORTCN ,AL MOV AL,01H OUT PORTCN ,AL INC SI JMP WAIT PRINT_OVER: MOV AH,4CH INT 21H END START 看图
9.2 串行接口 9.2.1 串行通信的基本概念 1. 串行通信 串行通信是将数据的各个位一位一位地,通过单条1位宽的传输线按顺序分时传送,即通信双方一次传输一个二进制位。串行通信与并行通信是两种基本的数据通信方式。 发送方在发送前要将并行数据转成串行数据,接收方接收后要完成串行数据到并行数据的转换。
与并行通信相比,串行通信的优势 • 传输距离长,可达到数千公里 • 长距离内串行数据传送速率会比并行数据传送速率快,串行通信的通信时钟频率较并行通信容易提高。 • 抗干扰能力强,串行通信信号间的互相干扰完全可以忽略。 • 费用低。
T R T T R R T R R T 2. 数据传送方式 • 单工方式 • 半双工方式 • 全双工方式
3. 波特率与收/发时钟 波特率:单位时间内传送的二进制数据的位数,以位/秒(b/s)表示,也称为数据位率。它是衡量串行通信速率的重要指标。 收/发时钟直接决定了通信线路上数据传输的速率,对于收/发双方之间数据传输的同步有十分重要的作用。 一般在发送端是由发送时钟的下降沿使送入移位寄存器的数据串行移位输出。而接收端则是在接收时钟的上升沿作用下将传输线上的数据逐位打入移位寄存器。
为了提高串行通信的抗干扰能力,往往用多个时钟调制一位二进制数据,调制一位二进制数据的收/发时钟个数称为波特率系数n。为了提高串行通信的抗干扰能力,往往用多个时钟调制一位二进制数据,调制一位二进制数据的收/发时钟个数称为波特率系数n。 收/发时钟频率与波特率之间的关系: 收/发时钟频率=n×波特率 一般n取1, 16, 32和64等。对于异步通信,常采用n=16;对于同步通信,则必须取n =1。
4. 串行通信基本方式 异步串行通信 在通信的数据流中,字符间异步,字符内部各位间同步。异步通信方式的“异步”主要体现在字符与字符之间通信没有严格的定时要求。然而,一旦传送开始,收/发双方则以预先约定的传输速率,在时钟的作用下,传送这个字符中的每一位。
同步串行通信 数据流中的字符与字符之间和字符内部的位与位之间都同步。同步串行通信是以数据块(字符块)为信息单位传送,而每帧信息包括成百上千个字符,因此传送一旦开始,要求每帧信息内部的每一位都要同步。
0 1 0 0 0 0 0 1 0 0 1 后出 D0 先出 D7 Out 比如ASCII 字符 ‘A’, 二进制是0100 0001(8位),它们在起始位和1位停止位之间传送,并使用了1位偶校验位。
为了确保异步串行通信传输正确: 1)采用相反极性的起始位和停止位/空闲位提供准确的时间基准 2)接收器采用比传送波特率更高频率的时钟来控制采样时间,以提高采样的分辨能力和抗干扰能力。 3)接收器在每位的中心采样,以获得最大的收/发时钟频率偏差容限
例题: 异步传输7位ASCII码,如果需要数据传输速率为240字符/秒,使用1位奇偶校验位和1位停止位,则: 1)波特率应该是多少? 2)有效数据位传输位是多少? 3)传输效率是多少? 答: 1)波特率是 (7位数据位+1位起始位+1位校验位+1位停止位)×240 =2400b/s 2)有效数据位传输位是 :7×240=1680b/s 3)传输效率是:1680/2400=70%
9.2.3 串行接口RS-232C标准 1. 串行通信系统 数据终端设备DTE——数据源和目的地 数据通信设备DCE——使数据符合线路要求
3. 常用的RS-232C连接 最简单连接(3线连接)
4. 电气特性 1) 应保证电平在±(5~15)V之间 对于数据线:逻辑“1”(MARK)= -3V~ - 15V, 逻辑“0” (SPACE) = +3V~+15V 对于控制信号:接通状态(ON)即信号有效 的电平 = +3V~15V 断开状态(OUT)即信号无效 的电平= -3Ⅴ~ - 15V。
2) 必须进行电平转换 RS-232C接口采用的是负逻辑,其逻辑电平与TTL电平不一样,不能兼容。因此,为了实现与TTL电路的连接,必须进行电平转换。 目前可以使用新型电平转换芯片MAX232和MAX232A(高速)双组RS-232C发送/接收器,以及MC1488, MC1489实现TTL电平与RS-232C电平双向转换。