640 likes | 777 Views
第八章 接口电路. 掌握并行接口 8255A 的主要特性、工作方式和初始化编程方法 掌握定时 / 计数器 8253 的主要特性、工作方式和初始化编程方法 理解 D/A 及 A/D 转换器接口方法 理解串行通信概念和 8251 初始化编程方法. 8-1 接口概述. 接口就是 CPU 与外部设备之间的连接部件,是 CPU 与外界进行信息交换的中转站。 接口的功能 数据缓冲 : 数据口和状态口 接收与执行 CPU 命令: 命令口 信号转换 : 电平、电流的转换以及时序的转换 设备选择 : 高位地址用于片选,低位对片内寻址 中断管理
E N D
第八章 接口电路 • 掌握并行接口8255A的主要特性、工作方式和初始化编程方法 • 掌握定时/计数器8253的主要特性、工作方式和初始化编程方法 • 理解D/A及A/D转换器接口方法 • 理解串行通信概念和8251初始化编程方法
8-1 接口概述 • 接口就是CPU与外部设备之间的连接部件,是CPU与外界进行信息交换的中转站。 • 接口的功能 • 数据缓冲 :数据口和状态口 • 接收与执行CPU命令:命令口 • 信号转换 :电平、电流的转换以及时序的转换 • 设备选择 :高位地址用于片选,低位对片内寻址 • 中断管理 • 数据宽度转换:移位寄存器 • 可编程:灵活地改变接口的工作方式
8-2 可编程并行通信接口 8255A 1、并行接口电路: • I/O设备要与微处理器进行数据传输,一般都采用接口电路与之相连,通常采用的有串行和并行通信接口。 • 并行接口电路中每个信息位有自己的传输线,一个数据字节各位可并行传送,速度快,控制简单。由于电气特性的限制,传输距离不能太长。 • 一个并行接口中包括状态寄存器、控制寄存器和输入输出缓冲寄存器。 • 8255A是通用的可编程并行接口芯片,功能强,使用灵活。适合一些并行输入/输出设备的使用。
2、8255A并行接口逻辑框图 C P U 接 口 外设 接 口
8-2 可编程并行通信接口 8255A ① 三个独立的数据端口 • 三个独立的数据端口是口A、口B、口C,都是8位的数据端口,用来完成和外设之间的信息交换。 • 口A有一个8位的数据输入锁存器和一个8位的数据输出锁存和缓冲器,即A端口适用于双向的数据传输。 • 口B与口C分别有一个8位的数据输入缓冲器和一个8位的输出锁存和缓冲器,即B端口和C端口作输出端口时数据可以锁存,作输入端口时不能对数据实现锁存。 • 在实际应用中,口A与口B通常作为独立的输入端口和输出端口,口C的8条线分成两个4位的端口,分别作为口A与口B在传输时的控制信号线。 • 口C的8条线可独立进行置1/置0的操作。
8-2 可编程并行通信接口 8255A • ② A组控制电路和B组控制电路:由它们内部的控制寄存器接收CPU输出的方式控制命令字,然后分别决定两组的工作方式。A组控制口A和口C的高4位,B组控制口B和口C的低4位。 • ③ 读写控制逻辑电路:由CPU的地址线A1和A0、8255A的片选信号CS#、RD#和WR#信号组合后产生控制命令。内有控制寄存器,接收CPU输出的命令字,决定两组的工作方式。 • ④ 数据总线缓冲器:三态双向的8位数据总线缓冲器,它是8255A与系统总线的接口,8255A与CPU之间的所有信息传输都要经过此。 • ⑤一些控制信号: • CS# 选片信号 RD# 读信号 WR# 写信号 • ⑥端口寻址:口A、口B、口C及控制字口共占4个端口号。
8-2 可编程并行通信接口 8255A 3、8255A的三种工作方式 • 方式0:基本输入/输出方式,不需要固定的应答式联络信号,输出是锁存的,输入不锁存。A、B、C端口均可设成此模式。 • 方式1:选通的输入/输出方式,此时A端口和B端口进行输入/输出时,端口C的某些位作为控制或状态信息。 • 方式2:带选通的双向传输方式(单一的8位总线上既能发送又能接收),输入和输出都是锁存的,只有端口A可设成此方式。此时C端口的PC7-PC3作为端口A的控制信号和状态信息使用。
端口A工作在方式1的输入方式 端口B工作在方式1的输入方式 PA 7~0 PB 7~0 PC 4 PC 5 PC 3 PC 1 PC 0 PC 2 INTEA INTEB STBA STBB IBFA IBFB INTRA INTRB PC 6~7 I/O
端口A工作在方式1的输出方式 端口B工作在方式1的输出方式 PA 7~0 PB 7~0 PC 6 PC 7 PC 3 PC 1 PC 0 PC 2 INTEA OBFA ACKA INTEB ACKB OBFB INTRA INTRB PC 4~5 I/O
8-2 可编程并行通信接口 8255A 4、8255A的工作方式选择
8-2 可编程并行通信接口 8255A • 例:要求8255A的A端口作输入,B端口作输出, C端口的PC7~PC4作输出,PC3作输入,A组工作在方式0,B组工作在方式1, 8255A占用的端口地址为 F8H~ FBH,写出初始化指令。 答: 方式控制字 = 1 0 0 1 0 1 0 1 B = 95H MOV AL,95H ;方式控制字 MOV DX,0FBH ;控制字寄存器端口为FBH OUT DX , AL
5、8255A的实际应用电路 利用8255A驱动多位显示的LED显示器 • 各位七段LED数码管公用一个段驱动,也称段码口 • 每位七段LED数码管的公共端连接一个位驱动,控制各位数码管的点燃,又称位码口。 • 可以采用8255A的A口数据线用作8个数码管公用的段控制线(阳极),B口数据线用作对8个数码管的阴极控制。
段码口 : : a …. g a …. g a …. g a …. g a …. g a …. g a …. g a …. g com com com com com com com com 位码口 A 口 B 口
问题: 假设8255A占用的端口地址为3F0H~3F3H,请问: • 8255A与CPU如何连接? • 此时, A端口和B端口工作在什么方式? CPU如何对8255A进行初始化? 答: 口A和口B应工作在方式0的输出方式。 工作方式控制字 = 1 0 0 0 0 0 0 0 B = 80H MOV AL,80H ;方式控制字 MOV DX,3F3H ;控制字寄存器端口为3F3H OUT DX , AL
WR WR RD RD CS M 8086 CPU A口 A0 A0 A1 A1 RESET RESET B口 8255A A2 A3 A4 A5 A6 A7 A8 A9 IO/
利用8255A的8×8小键盘接口电路 +5V +5V …… +5V +5V PA0 PA1 … … … 8255A PA6 PA7 R0 R1 …… R6 R7 PB0 PB1 … PB6 PB7 L0 L1 … L6 L7
8-2 可编程并行通信接口 8255A 5、8255A的按位“置位/复位”功能
8-2 可编程并行通信接口 8255A • 例:要使端口C的PC3置位,PC7复位的控制字各为多少,如何通过程序实现? 8255A占用的端口地址为 F8H~ FBH。 答: PC3置位的控制字 = 0 0 0 0 0 1 1 1 B = 07H PC7复位的控制字 = 0 0 0 0 1 1 1 0 B = 0EH MOV AL,07H MOV DX,0FBH ;控制字寄存器端口为FBH OUT DX , AL MOV AL,0EH OUT DX , AL
例题: • 8255A的工作方式控制字和C口的按位置位/复位控制字有何区别?若将PC2脚上输出高电平,其控制口地址是303H,程序段应是如何? • 工作方式控制字是对8255A的三个端口的工作方式及功能进行控制,写在程序的开头,控制字最高位D7=1; • C口的按位置位/复位控制字只对C口的某一位输出高电平或低电平(置位或复位)进行控制,不能同时对几位操作,控制字最高位D7=0。 • PC2置位的程序为:MOV DX,303H MOV AL,05H OUT DX,AL
8-3 可编程串行通信接口 8251A 8-3-1 串行通信的基本概念 • 串行通信中两种基本的通信方式:同步方式和异步方式。 • 异步通信方式:用一个起始位表示字符的开始,用停止位表示字符的结束,它们之间是真正的数据位,由此构成一个数据帧。 • CPU与外设之间必须规定统一的字符编码形式。 • CPU与外设之间必须规定好数据信号传送速率 • 波特率:单位时间内线路状态变化(电信号变化)的数目, 单位是波特。 • 同步通信方式:在数据块传送时,采用同步传送,在数据块开始处用同步字符来指示。 • 同步传送的速度高于异步的,但要求有时钟来实现发送端和接收端之间的同步。
8-3 可编程串行通信接口 8251A • 串行通信中数据传送方向:单工、半双工和全双工。 • 串行通信的信号常常要通过调制解调器进行传送。 • 调制器:把数字信号转换为模拟信号 • 解调器:将模拟信号还原为数字信号 • 调制方法:频率调制FM、幅度调制AM、相位调制PM
串行I/O的实现 • 软件实现 • 硬件UART---通用非同步(异步)接收器/发送器 • 输入时,由RXD来的串行数据先进入移位寄存器,然后并行输入给缓冲器(变成并行的),由数据总线输至CPU。 • 输出时,由CPU来的并行数据由缓冲器接收,然后送至移位寄存器,由TXD一位一位移位输出(变成串行的) • 串行通信的校验方法: 奇偶校验(异步通信)、循环冗余校验(同步通信) • 串行接口标准RS-232C (异步) 用于计算机与Modem、键盘或终端之类的设备之间
例题: • 什么叫波特率?在一个异步通信系统中,如果数据速率为2400波特,数据格式为8个数据位,1个校验位,2个停止位,那么每秒钟能传送多少个字符? • 为什么同步传输比异步传输效率高? • 波特率是指单位时间内线路状态变化(电信号变化)的数目,用波特做单位。 • 异步传输要有一位起始位,一个字符为1位起始位、8个数据位,1个校验位,2个停止位,共12位,每秒钟可以传送字符2400/12=200个。 • 异步传输中,每个字符要用起始位和停止位作为字符的开始和结束的标志,占用了时间;同步传输不需要起始位和停止位,所以比异步传输效率高。
例题: • 现利用一个异步通信系统传送英文资料,系统的速率为1200波特,待传送的资料位5000个字符,假设系统采用ASCII码传送,不用校验位,1个停止位,问至少需要多少时间才能传送完全部资料? • 每个字符用9位,总计需要传送的位数为9*5000=45000 • 所需的时间为45000/1200=37.5秒。
1、8251A内部结构框图 ①I/O缓冲器:通过8位数据线与CPU数据总线相连,包括 状态缓冲器、发送数据/命令缓冲器、接收数据缓冲器。 ②读写控制逻辑:接收与读写有关的控制信号,由CS#、C/D#、RD#和WR#信号组合后产生出8251A所执行的操作。 ③发送器:接收 CPU送来的并行数据,加上起始位、奇偶校验位和停止位,从TxD引脚发送。包括数据输出寄存器和发送移位寄存器及控制电路。 ④接收器:接收 RxD脚上的串行数据,并把它转换为规定格式并行数据,存放在接收数据缓冲器中。包括接收移位寄存器和数据输入寄存器及控制电路。 ⑤调制控制逻辑:专为调制解调器提供控制信号。
2、8251A 初始化编程 • 8251A占用2个端口地址。(C/ D端接地址线,控制/数据端) • 偶地址用于数据端口,输入/输出合用; • 奇地址用于控制端口,状态/控制合用。 • 合用的信号,用RD#和WR#来区分。 • 8251A可工作在同步方式,也可工作在异步方式。在初始化时向控制口写入方式选择字,规定其工作方式。 • 例如:要求8251A作为外同步通信接口,数据位8位,2个同步字符,偶校验。 其方式选择字为:7CH(0 1 1 1, 1 1 0 0 B) • 例如:要求8251A作为异步通信,波特率因子为64,字符长度为8位,奇校验,2个停止位。 其方式选择字为: DFH(1 1 0 1, 1 1 1 1 B)
8251A 同步方式下方式选择字的格式 D7 D6 D5 D4 D3 D2 D1 D0 D5 D3 D2 0 0 D7 D6 D4 同步字符数目 0 0 0 5位数据 双同步字符 0 1 6位数据 1 单同步字符 1 0 7位数据 1 1 8位数据 内同步检测 0 (SYNDET为出) 禁止奇偶校验 0 外同步检测 1 (SYNDET为入) 1 允许奇偶校验 0 奇校验 1 偶校验
8251A 异步方式下方式选择字的格式 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D3 D2 B2 B1 D4 S2 S1 EP PEN 仃止位数目 0 无 效 0 0 0 0 0 5 同步 方 式 允 1 位 0 1 0 1 6 0 1 1x 1 许 1 0 7 1 0 16x 1 1/2 位 1 0 校 1 1 8 1 1 64x 2 位 1 1 禁 0 止 数据位 0 波特率因子 奇 校 验 校 1 偶 校 验
2、8251A 初始化编程 8251A的三个控制字: • 方式选择控制字:在初始化时向控制口写入方式选择字,规定8251A的工作方式。 • 命令控制字:初始化在写入方式选择字后,接着要向控制口写入命令字,直接启动工作,使8251A的处于规定的工作状态,以准备接收或发送数据。 • 状态寄存器:是反映8251A内部工作状态的寄存器,只能读出,不能写入。状态字可以被CPU读入后用以控制CPU与8251之间的数据交换。
D7 D6 D5 D4 D3 D2 D1 D0 EH IR RTS ER SBRK RxE DTR TxEN 置“1”为搜索同步字符 请求发送,置“1”后RTS#输出0 送终止符,置“1”后TxD输出0 数据终端就绪,置“1”后 DTR#输出0 置“1”后8251内部复位 清除错误标志,置“1”后清PE、OE、FE 1:接收允许0:屏蔽 1:发送允许0:屏蔽 8251A 命令字的格式 • 内部软件复位命令为40H。 • 正常通信状态,D3、D6为0。 • 写同步接收命令字时,D7、D4、D2同时为1。
复位操作 送方式字 是 同步方式 ? 否 送第一个同步字符 否 双同步 ? 送命令字 是 是 送第二个同步字符 复 位 ? 否 传送数据 否 传递完 ? 是 2、8251A 初始化编程
8-4 可编程定时/计数器 8253 1、8253的主要功能 • 一个芯片上有3个独立的16位的计数器通道。 • 每个计数器都可以单独作为定时器或计数器使用,都可以按照二进制或十进制来计数。 • 每个通道都有6种工作方式,可以通过程序设置或改变。 • 单一的+5V电源,所有的输入、输出都是TTL电平,便于与外围接口电路相连接。 • 每个计数器的速率高达2MHz。 • 计数是用外部被记录的脉冲做时钟,定时是用已知的准确的固定周期的信号作时钟。
数据总线缓冲器:是8253与CPU数据总线连接的8位的双向三态缓冲器,8253与CPU之间进行数据传送时的所有信息都要经过数据总线缓冲器,主要有:数据总线缓冲器:是8253与CPU数据总线连接的8位的双向三态缓冲器,8253与CPU之间进行数据传送时的所有信息都要经过数据总线缓冲器,主要有: • CPU对8253初始化编程时,写入8253的控制字 • CPU向某一个通道写入计数值 • CPU从某一个通道读取当前的计数值 • 读/写控制逻辑:接收CPU输出到8253的 RD#、WR#、CS#、A1、A0信号,经过逻辑控制电路的组合产生出对8253要进行的操作。 • 控制字寄存器:8位寄存器,只能写入,不能读出。在初始化8253时,CPU写入8253的控制字就存放在其中。 • 3个计数器:每个计数器内部都包含一个16位的可预置初始值寄存器、一个减法计数器和一个锁存器。
3、8253的控制字 D7 D6 D5 D4 D3 D2 D1 D0 SC1 SC0 RL1 RL0 M2 M1 M0 BCD 计数器0 0 0 0 1 0 计数器1 二进制格式 计数器2 BCD码格式 1 0 1 1 1 不定义 0 0 0 0 0 MODE0 锁存计数值 读/写低8位 1 0 0 1 MODE1 0 读/写高8位 1 X 1 0 MODE2 0 先读/写低8位 后读/写高8位 1 1 X 1 1 MODE3 1 0 0 MODE4 1 0 1 MODE5 MODE5
4、8253初始化编程 • 设置控制字:由CPU向8253的控制字寄存器输出一个控制字,用来选择计数器并设置其工作方式和计数格式。 • 设置初始值:给计数器写入初始值。 • 对某个计数器预置初始值之前,必须先写入控制字。 • 给计数器写入初始值,要符合控制字中规定的格式。 • 如果是16位初值,要用2条输出指令 • (先送低字节,后送高字节) • 如果是8位,在8253内部全部当作16位双字节, 缺少的字节补0。
8253通过2位地址线A1、A0,对三个计数器和控制字寄存器进行寻址,即8253占用4个设备号。 例:8253的端口地址位0F8H ~0FBH,现要用计数器0,工作在方式0,按二进制计数,计数值为0FFEH。 写出初始化程序。 MOV AL ,30H ;控制字 OUT 0FBH,AL ;送控制口 MOV AL ,0FEH ;计数值低8位 OUT 0F8H ,AL ;送计数器0 MOV AL ,OFH ;计数值高8位 OUT 0F8H,AL ;送计数器0
5、8253的6种工作方式 • 方式0(计数最后一个数时中断) • 方式1(可编程序的单拍脉冲) • 方式2(速率发生器、分频器) • 方式3(方波速率发生器) • 方式4(软件触发选通) • 方式5(硬件触发选通)
方式0(计数结束产生中断的计数器) • 控制字送出,OUT保持为低。 • 写入计数值后自动开始计数。 • 计数到0时,输出变高,产生中断,并停止计数。
方式1(可编程序的单拍脉冲) 输出单个宽度为 计数值N的负脉冲 • 控制字送出,OUT保持为高。 • 写入计数值后,等待门控脉冲的触发启动,在启动之后的下一个CLK脉冲的下降沿开始计数,输出由高变低; • 计数到0时,输出变高,停止计数;等下一次 门控脉冲的再次触发启动
方式2(速率发生器、分频器) 每N个CLK中输出单个宽度为CLK周期的负脉冲 • 写入计数值后立即计数,而且能连续工作; • 计数到1时,输出变低; • 再一个CLK周期,输出恢复为高,且计数器开始重新计数。
方式3(方波速率发生器) • 写入计数值后立即计数; • 计数值为偶数时,输出对称方波。 • 先 N/2 个CLK的高电平,后 N/2 个CLK的低电平。
方式3(方波速率发生器) • 写入计数值后立即计数; • 计数值为奇数时,输出不对称方波。 • 先(N+1)/ 2个CLK的高电平,后(N-1)/ 2个CLK的低电平。
方式4(软件触发选通) • 写入计数值后立即计数(软件启动); • 计数到0,输出变低; • 再一个CLK周期,输出变高,停止计数,即计数是一次性的。
方式5(硬件触发选通) • 写入计数值后,由门控脉冲的上升沿触发启动计数; • 计数到0,输出变低; • 再一个CLK周期,输出变高,停止计数; • 等下一次门控脉冲的触发再次启动计数。
工作方式的简单比较: • 方式0、2、3、4是在写入计数值后立即计数,方式1和5需要外部触发启动,才开始计数。 • 方式1与方式5工作方式基本相同,方式1输出宽度为N个CLK周期的负脉冲,方式5输出宽度为1个CLK周期的负脉冲。 • 方式2和方式3是连续计数,方式0、1、4、5都是一次计数,要继续工作,需要重新启动。 • 方式0和4由再次写入计数值(软件)启动 • 方式1和5由再次的门控信号(硬件)启动 • 方式2、4、5都是输出宽度为1个CLK周期的负脉冲,方式2是连续工作,方式4由软件启动,方式5由硬件启动。
例题: • 用8253A通道0对外部脉冲计数,每计满10000个产生一次中断。问该通道应工作在什么方式? • 请写出工作方式控制字及计数值。 • 通道0应工作在方式0,即计数到零产生中断。 • 此时的工作方式的控制字为30H。 • 计数器的计数初值为2710H(10000D)。
例题: • 用8253A通道1作为DRAM的刷新定时器,DRAM要求在2ms对全部128行存储单元刷新一遍。假定计数器用的时钟频率为2MHz,问该通道应该工作在什么方式? • 请写出工作方式控制字及计数值(用16进制数表示)。 • 通道1应工作在方式2,即频率发生器方式。 • 此时的工作方式的控制字为54H。 • 计数器的时钟频率为2MHz,则计数周期为0.5μs 两行刷新的最大时间间隔为 2ms/128= 15.6 μs 频率发生器的计数值 15.6 / 0.5 =31.2 ,取31D 即计数值为1FH。