360 likes | 618 Views
第 8 章 可编程接口芯片及应用. 主要内容 : 可编程定时器/计数器芯片 8253 / 8254 可编程并行接口芯片 8255A 串行通信及可编程串行接口芯片 8251A 模/数与数/模转换技术及接口. 8.1 可编程定时器 / 计数器芯片 8253/8254. 定时信号的产生 1. 软件定时 方法:根据所需时间常数设计一个延迟子程序。 优点:节省硬件 缺点:执行延时程序期间 CPU 一直被占用,降低了 CPU 效率,不易提供多作业环境。 适用:延时时间较短、重复次数有限的情况。. 2. 硬件定时
E N D
第8章 可编程接口芯片及应用 主要内容: • 可编程定时器/计数器芯片8253/8254 • 可编程并行接口芯片8255A • 串行通信及可编程串行接口芯片8251A • 模/数与数/模转换技术及接口
8.1 可编程定时器/计数器芯片8253/8254 定时信号的产生 1.软件定时 方法:根据所需时间常数设计一个延迟子程序。 优点:节省硬件 缺点:执行延时程序期间CPU一直被占用,降低了CPU效率,不易提供多作业环境。 适用:延时时间较短、重复次数有限的情况。
2.硬件定时 方法:利用专门的定时/计数器作为主要硬件,在简单软件控制下,产生准确时间延迟。 优点:定时/计数器与CPU并行工作,不占CPU时间,利用定时/计数器产生中断信号,可以建立多作业环境,大大提高了CPU利用率。 适用:广泛应用。
8253/8254是Intel公司生产的一种通用的计数/定时器CTC,也称为可编程序间隔定时器PIT,它是采用NMOS工艺由单一+5V电源供电的双列直插式封装24引脚芯片。8253/8254芯片两者的外形引脚及功能都是兼容的,仅是工作的最高频率有所不同,以满足不同的接口要求。例如:8253/8254是Intel公司生产的一种通用的计数/定时器CTC,也称为可编程序间隔定时器PIT,它是采用NMOS工艺由单一+5V电源供电的双列直插式封装24引脚芯片。8253/8254芯片两者的外形引脚及功能都是兼容的,仅是工作的最高频率有所不同,以满足不同的接口要求。例如: 8253 (2MHz)、 8253-5 (5MHz ), 8254 (8MHz)、 8254-5 (5MHz )、 8254-2 (10MHz)。
WR RD WR CS RD CS 8.1.1 8253的结构及功能 1. 8253的引脚 D 1 24 CLK V D ~D 7 0 CC 7 0 D 23 2 6 GATE 0 # 0 D 22 3 5 OUT 0 D 21 4 4 8253 D 20 5 A 3 CLK 1 1 D 19 6 A 2 0 1 # 8253 GATE 1 D 18 7 CLK 1 A 2 OUT 0 1 17 8 D OUT 0 2 16 9 CLK GATE A 0 2 1 15 10 CLK OUT CLK 2 0 1 14 11 GATE GATE GATE 2 # 0 1 2 13 12 GND OUT OUT 1 2 图8.1 8253引脚及功能结构
(1) 数据总线缓冲器 是8253用于和CPU数据总线连接的8位、双向、三态缓冲器,CPU读写8253的所有数据都经过该缓冲器。 ◎ CPU用输出指令向8253写入方式控制字至控制寄存器、写入计数值至某个计数器,都是经数据总线缓冲器和8253内部总线传送的。 ◎ CPU用输入指令读某个计数器值时,该计数器的现行计数值经8253内部总线和数据总线缓冲器传送到系统数据总线上,读入CPU。
(2) 读/写逻辑 是8253内部操作的控制部件 ◎ 接收系统总线输入信号,转换成8253内部操作的各种控制信号 ◎ 选择读写操作的对象(某计数器或控制寄存器-由A0、A1决定) ◎ 决定内部总线上数据的传送方向(输入还是输出—由WR、RD决定)
(3) 控制寄存器 ◎ 8253初始化时接收CPU写入的控制字 ◎ 控制字指定计数器的工作方式,选择以二进制或二—十进制计数等 ◎ 该寄存器为只写寄存器
(4) 计数器0、计数器1、计数器2 ◎ 三个计数器结构完全相同、操作完全独立 ◎ 每个计数器内部包含:一个16位计数初值寄存器(CR)、计数执行部件(CE)、一个16位输出锁存器 (OL)和一个控制寄存器 ◎ 每个计数器外部有两个输入端(CLK、GATE)和一个输出端(OUT)
3. 计数器的内部结构 计数器 0 控制寄存器 CRL 计数初值寄存器(CR) CRH 减1计数器(CE) CEH CEL 输出锁存寄存器(OL) OLH OLL
4. 8253的工作过程 (1) 由CPU向控制寄存器写入控制字,以确定工作方式; (2) 由CPU向计数器寄存器写入计数初值或定时常数; (3) 计数单元从计数器寄存器中获得初值,在CLK端输入的计数脉冲控制下进行减1计数(CLK决定计数速率);
(4) 减到0时,该状态由OUT输出或由状态寄存器的某一位表示,以作为中断请求信号或供查询方式使用,也可将OUT 连到一个I/O设备上,去启动一个I/O操作; (5) 任何时候都可以将计数单元的当前值送到输出锁存器被CPU读取而不干扰计数器继续计数; (6) 门脉冲GATE是由设备送来的,作为对时钟脉冲的控制信号,门脉冲对时钟的控制方法有多种,以形成多种工作方式。
8.1.2 8253的编程 8253在工作之前,用户首先要为某一计数器(计数器02)写入控制字以确定其工作方式;写入定时/计数初值;在定时/计数工作过程中,有时还需要读取某计数器当前的计数值。 1. 8253的控制字格式 8253的控制字格式如下图所示。
D7 D6D5 D4D3 D2 D1D0 SC1 SC0 RL1 RL0 M2 M1 M0 BCD D D D D D D D D 7 6 5 4 3 2 1 0 计数器选择 读写格式 工作方式 数制 0 —二进制计数 00 —选择计数器0 1— 十进制计数 01 —选择计数器1 10 —选择计数器2 000 —方式0 11 —非法 001 —方式1 00 —将减1计数器CE中的数据 ×10 —方式2 锁存到OL中(锁存功能) ×11 —方式3 100 —方式4 01 —对计数器的低8位读或写 101 —方式5 10 —对计数器的高8位读或写 11 —计数器16位操作(先低8 位,后高8位读或写)
2. 8253的读/写操作 对8253的读/写操作不仅要用到RD和WR控制信号,还要根据计数/定时工作的要求利用门控信号GATE和锁存功能来控制8253的读/写操作。 ⑴ 读操作。所谓读操作是指读出计数器的计数值至CPU中。有两种读数方法: ① 直接读出(停读)。直接用输入指令读取所选择的端口计数器值。 ② 锁存读出(飞读)。锁存计数值以供读取,是专为在计数过程中读数据而设计的。
⑵ 写操作 所谓写操作是指CPU对8253写入控制字或计数初值。 3. 初始化编程 8253投入工作之前,CPU要对它进行初始化编程。初始化编程的步骤为: ① 写入计数器的控制字,规定其工作方式及相应功能; ② 写入计数初值。
例如,若选择0#计数器,工作在方式3,计数初值为2354H,十进制计数方式;或选择l#计数器,工作在方式2,计数初值为18H,二进制计数方式。并设8253端口地址为4043H。例如,若选择0#计数器,工作在方式3,计数初值为2354H,十进制计数方式;或选择l#计数器,工作在方式2,计数初值为18H,二进制计数方式。并设8253端口地址为4043H。 则根据上述各计数器的功能,其初始化编程如下: 0#计数器的控制字为:37H 1#计数器的控制字为:54H 0 0110 1 11 SC1 SC0 RL1 RL0 M2 M1 M0 BCD 0 1010 1 00
对0#计数器初始化编程 MOV AL,37H ;对0#计数器送控制字。 OUT 43H,AL MOV AL,54H ;送初值的低8位。 OUT 40H,AL MOV AL,23H ;送初值的高8位。 OUT 40H,AL 对1#计数器初始化编程。 MOV AL,01010100B ;对1#计数器送控制字。 OUT 43H,AL MOV AL,18H ;计数初值送低8位。 OUT 41H,AL
当采用“飞读”的方法读取1#计数器的计数值时,可采用如下程序片段:当采用“飞读”的方法读取1#计数器的计数值时,可采用如下程序片段: MOV AL,01000100B ;对1#计数器送锁存控制字。 OUT 43H,AL IN AL,41H ;读低8位。 MOV CL,AL ;读取的计数值存于CL中。 当计数值为16位时,则“飞读”时还应读取高8位锁存器中的计数值。即: IN AL,41H ;读低8位。 MOV CL,AL IN AL,41H ;读高8位。 MOV CH,AL
8.1.3 8253的工作方式及时序图 8253定时器/计数器的每个计数器都有六种可编程选择的工作方式。对于每一种工作方式,由时钟输入信号CLK确定计数器递减的速率。门控信号GATE用于允许或禁止CLK信号进入计数器,或者根据工作方式用作计数器的启动信号。计数结束时,在输出线OUT上产生一个标志信号,该信号可编程定义为脉冲、恒定电位或周期信号。
区分六种工作方式的主要标志有三点: 一是输出波形不同; 二是启动的触发方式不同; 三是计数过程中门控信号CATE对计数操作的影响不同。 现在分别讨论不同工作方式的特点。
WR 1.方式0 —计数结束产生中断方式 CW N=5 CLK GATE OUT 5 4 3 2 1 0
WR CW N=3 CLK GATE OUT 3 2 2 2 1 0
WR 2.方式1——可编程单次脉冲 CW N=2 CLK GATE 2 1 0 2 1 OUT 图8.7 方式1的波形
WR 3.方式2——分频工作方式 CW N=3 CLK GATE 2 1 3 2 1 3 3 OUT T =N*T OUT CLK 图8.8 方式2的波形
WR 4.方式3——方波发生器 CW N=4 CLK GATE 3 2 1 4 3 4 2 OUT T =N*T OUT CLK 图8.9 方式3的波形
WR 5.方式4——软件触发选通 CW N=4 CLK GATE 3 2 1 0 4 OUT
WR 6.方式5——硬件触发选通 CW N=4 CLK GATE 4 3 2 1 0 OUT
8.1.4 8254与8253的区别 8254是8253的改进型,它们的引脚定义与排列、硬件组成等基本上是相同的。因此8254的编程方式与8253是兼容的,凡是使用8253的地方均可用8254代替。 ① 允许最高计数脉冲(CLK)的频率不同。8253的最高频率为2 MHz,而8254允许的最高计数脉冲频率可达10 MHz(8254为8 MHz,8254−2为10 MHz)。
② 8254每个计数器内部都有一个状态寄存器和状态锁存器,而8253没有。 ③ 8254有一个读回命令字,用于读出当前减1计数器CE的内容和状态寄存器的内容,而8253没有此读回命令字。
8.1.5 8253应用举例 例8.2 使用8253计数器2产生频率为40 kHz的方波,设8253的端口地址为0040H0043H,已知时钟端CLK2输入信号的频率为2 MHz。试设计8253与8088总线的接口电路,并编写产生方波的程序。 8253与8088总线的接口电路如下图所示。
RD WR CS G 1 G 2B G 2A CLK D 0 0 … D ~ D GATE 7 0 0 D OUT 7 0 CLK 1 RD 8253 GATE WR 1 OUT A A 1 0 0 2MHz CLK A A 2 1 1 GATE 2 A 20kHz A OUT 2 2 Y 0 A B 3 A C 4 74LS138 A 5 & A 6 A 7 A 8 A 9 ≥1 … A 15 & IO/M
1.工作方式控制字 2. 计数初值 计数初值=输入频率/输出频率 =2000000Hz /40000Hz =50 =0032H D7 D6 D5 D4 D3 D2 D1 D0 SC1 SC0 RL1 RL0 M2 M1 M0 BCD 1 1 1 1 0 1 1 0
根据上述要求2#计数器应设置成方式3工作状态,按双字节传送的50分频计数值应为0032H。此时,2#计数器的初始化程序如下:根据上述要求2#计数器应设置成方式3工作状态,按双字节传送的50分频计数值应为0032H。此时,2#计数器的初始化程序如下: MOV AL,11110110B ;对2#计数器送控制字。 OUT 43H,AL MOV AL,32H ;送低8位计数值32H。 OUT 42H,AL XOR AL,AL ;送高8位计数值00H。 OUT 42H,AL