260 likes | 480 Views
第八章 可编程定时 / 计数器 8253 及其应用. 第一节 Intel8253-PIT 的工作原理. 一 . 8253 的功能. 习题: 8 - 4 , 8 - 5. 计算机系统中,实现定时或延时有三种方法:软件定时、不可编程的硬件定时、可编程的硬件定时器。 8253 为可编程的硬件定时 / 计数器。. 1. 主要功能 * 具有 3 个独立的 16 位计数器通道; * 每个计数器均可按二进制或二 — 十进制计数; * 每个计数器的计数速率高达 2MHz ; * 每个通道有 6 种工作方式,可由程序设置和改变;* 所有的输入输出都与 TTL 兼容。.
E N D
第八章 可编程定时/计数器8253及其应用 第一节 Intel8253-PIT的工作原理 一. 8253的功能 习题:8-4,8-5 计算机系统中,实现定时或延时有三种方法:软件定时、不可编程的硬件定时、可编程的硬件定时器。8253为可编程的硬件定时/计数器。 1. 主要功能 * 具有3个独立的16位计数器通道; * 每个计数器均可按二进制或二—十进制计数; * 每个计数器的计数速率高达2MHz; * 每个通道有6种工作方式,可由程序设置和改变;* 所有的输入输出都与TTL兼容。
内部数据总线 数据总线 缓冲 器 CLK0 计数器 0 GATE0 OUT0 D7 ~ D0 CLK1 RD WR A0 A1 读/写 逻辑 计数器 1 GATE1 OUT1 CS 控制字 寄存器 计数器 2 CLK2 GATE2 OUT2 8253内部结构 二. 8253的内部结构 *数据总线缓冲器(传送信息) 写控制字, 写时常, 读计数值 *读写逻辑 *控制字寄存器(存放控制字) *三个计数器(减法器) 3个独立的16位减法器,可作定时/计数器使用; 计数器按二/BCD方式减法计数,从预常减到零时,OUT端输出一信号。
内部数据总线 数据总线 缓冲 器 CLK0 计数器 0 GATE0 OUT0 D7 ~ D0 CLK1 RD WR A0 A1 读/写 逻辑 计数器 1 GATE1 OUT1 CS 控制字 寄存器 计数器 2 CLK2 GATE2 OUT2 8253内部结构 三.8253 的引线 * 数据线(D7~D0) * 地址线:选择内部寄 存器; * 控制线:完成片选和 读写操作。 CLK:输入脉冲线; GATE:门控信号输入线; GATE=0 禁止计数, GATE=1 允许工作; OUT:输出引脚; 当计数到“0”时,OUT 端输出一信号。
D7 D6 D5 D4 D3 D2 D1 D0 计数器 读/写格式 工作方式 数制 00 选择计数器0 01 选择计数器1 10 选择计数器2 11 非法选择 00 计数器锁存命令 10 只读/写最高有效字节(高八位) 01 只读/写最低有效字节(低八位) 11 先读写最低有效字节然后读写最高有效字节 000 方式0 001 方式1 *10 方式2 *11 方式3 100 方式4 101 方式5 四. 8253-PIT的控制字 在8253的初始化编程中,由CPU向8253的控制字寄存器写入一个控制字来规定8253的工作方式。 0=二进制 1=BCD
五. 8253-PIT的工作方式 1. 方式0 * CW写入,OUT=0; * 写入时常,通道开始计数; * 计数到零,OUT=1; * 计数器只计数一遍; * OUT是N+1个CLK后变高; * 计数过程中,GATE=0, 计数暂停; * 计数过程中可改变计数值; * 8253无中断控制,可用OUT信号作为中断请求。
方式1(可编程单稳) * 写入控制字OUT=1,写入常数不计数; * GATE启动计数,OUT=0; * 计数到,OUT=1。 *单拍脉冲宽度为N; *由GATE重新启动; *计数中,可重新启动; *计数中,可改变计数值,再次启动有效。
方式2(速率发生器) * 写入控制字OUT=1; * 写入常数立即对CLK计数; * 计数到1,OUT=0; * 一个CLK周期后,OUT=1,重新计数。 * 通道连续工作不需重置时常; * 计数过程中,GATE=0,计数暂停,GATE变高后重新计数; * 计数过程中可改变计数值;新的计数值在下一次有效。
方式3(方波速率发生器) * 与方式2的区别在于:输出为周期是N个CLK脉冲的方波。 * 若计数值为偶数,每个CLK使计数值减2,计到0,OUT改变状态,重装计数值开始新的计数。 *若计数值为奇数,第一个脉冲先减1,以后,每个CLK使计数值减2,计到0 时,OUT改变状态,重装计数值后,第一个脉冲减3,以后,每个CLK使计数值减2,计到0时,OUT改变状态。 *GATE信号控制计数过程; *计数过程中写入新的计数值将在半周期结束时装入计数器。
3. 8253的方式控制字为: 00 11 011 1 例:要求计数器0工作于方式3,输出方波的频率为2KHz,计数脉冲的频率为2.5MHz,采用BCD计数,试写出初始化程序段。 1. 8253的端口地址为:80H,81H,82H,83H。 2. 常数计算:TC = 2.5MHz/2KHz=1250 4. 初始化程序段: MOV AL,37H OUT 83H,AL MOV AL,50H OUT 80H,AL MOV AL,12H OUT 80H,AL
方式4(软件触发选通) * 写入控制字OUT=1; * 写入常数立即对CLK计数; * 计数到0,OUT=0; * 一个CLK周期后,OUT=1,计数器停止计数。 * 计数器只计数一遍; * OUT是N+1个CLK后变低; * 计数过程中,GATE=0, 计数暂停; * 若在计数过程中,改变计数值,则按新的计数值重新开始计数。
方式5(硬件触发选通) * 写入控制字OUT=1; * 写入常数后,由GATE的上升沿启动计数; * 计数到0,OUT=0; * 一个CLK周期后,OUT=1,计数器停止计数。 * 计数器只计数一次; * OUT是N+1个CLK后变低; * 在 计数过程中出现的GATE脉冲, 将使 计数器重新开始计数,对输出状态没有影响; * 若在计数过程中改变计数值,只要没有GATE信号触发,不影响计数过程。有新的GATE信号触发则按新的计数值开始计数。
六. 8253-PIT工作方式小结 1. 输出端OUT的初始状态 只有方式0是在写入控制字后输出为低,其它均为高; 2. 计数值的设置 任一种方式,只有在写入计数值后才能开始计数,方式0、2、3、4在写入计数值后,计数自动开始,方式1、5需外部触发,才开始计数。
3. 门控信号的作用-----GATE输入总是在CLK输入时钟的上升沿被采样。在方式0,2,3,4中,GATE输入是电平起作用。在方式1,2,3,5中 GATE输入是上升沿起作用的。
4. 在计数过程中改变计数值 立即有效是写入计数值后的下一个CLK脉冲后,新的计数值开始起作用。 5.计数到0后计数器的状态 计数器减到0后并不停止,在方式0,1,4,5,计数器减到0后从FFFF/9999继续计数。方式2,3是连续计数,计数器自动装入计数值后,继续计数。
七. 8253-PIT的编程 8253-PIT初始化编程的步骤: 1.写入通道控制字,规定通道的工作方式;(A1A0=11) 2. 写入计数值(由控制字的D7D6确定通道号)。 ①若规定只写入低8位,则写入的为计数值的低8位,高8位自动置0; ②若规定只写入高8位,则写入的为计数值的高8位,低8位自动置0; ③若是16位计数值,则分两次写入,先写入低8位,再写入高8位。
0 0 1 1 0 0 1 1 第二节 Intel8253-PIT的应用举例 例1:某8253端口地址为F8H~FBH,欲用通道0以方式1,按BCD计数,计数值为5080。 1.确定通道控制字; 2.计数值的低8位为80; 3.计数值的高8位为50。 在计数过程中,8253读计数器现行值的方法:(将计数值存入内部锁存器) 初始化程序为: MOV AL,33H OUT 0FBH,AL MOV AL,80H OUT 0F8H,AL MOV AL,50H OUT 0F8H,AL MOV AL,03H ;计数器0的锁存命令 OUT 0FBH,AL;写入控制寄存器 IN AL,0F8H ;读低8位 MOV CL,AL ;存入CL中 IN AL,0F8H ;读高8位 MOV CH,AL ;存入CH中
例2:用8253产生各种定时波形。 74LS138 A9 A8 1MHz方波 G1 CLK0 CLK1 CLK2 A7 A6 5V A4 A3 A0 C BA GATE0 OUT0 2KHz方波 8086 CPU GATE1 OUT1 A5 M/IO 1ms的负脉冲 GATE2 OUT2 D7—D0 单脉冲 A1 A0 RD WR A2 A1 RD WR Y4 G2B G2A D7—D0 CS
例2:用8253产生各种定时波形。要求: (1)通道0输出频率为2KHz的方波; (2)通道1产生宽度为1ms的负脉冲; (3)通道2以硬件方式触发,输出单脉冲时常为26。 已知:8253基地址为310H,3通道所用时钟脉冲频率为1MHz。 分析:通道0工作于方式3,控制端GATE0接+5V,时间常数N0=1MHz/2KHz=500; 通道1工作于方式1,由控制端GATE1的正跳变触发,OUT1的宽度为时常,单次触发,时间常数N1=1ms/0.001ms=1000; 通道2工作于方式5,由控制端GATE2的正跳变触发,可连续触发,时间常数N2=26。
;通道0初始化程序 MOV DX,316H MOV AL, 00110111B OUT DX,AL MOV DX,310H MOV AL,00H OUT DX,AL MOV AL,05H OUT DX,AL ;通道2初始化程序 MOV DX,316H MOV AL, 10011011B OUT DX,AL MOV DX,314H MOV AL,26H OUT DX,AL ;通道1初始化程序 MOV DX,316H MOV AL, 01110011B OUT DX,AL MOV DX,312H MOV AL,00H OUT DX,AL MOV AL,10H OUT DX,AL
+5V GATE0 GATE1 D7-D0 WR RD A1 A0 CS WR RD A2 A1 D8-D15 2MHz CLK0 OUT0 CLK1 OUT1 M/ IO 译码 A0-A7 例3:8253控制LED。要求:LED点亮10秒,熄灭10秒 分析: 8253的地址线与CPU高8位数据线D8——D15相连,8253的各端口的地址为81H、83H、85H、87H。 OUT1输出占空比为1:1的方波, 8253端口1工作在方式3。 时钟频率为2MHz时,16位计数通道的最大定时时间为: 0 .5s65536=32.768ms 级连:通道0输出400Hz脉冲(时常5000),通道1输出0.05Hz方波(时常8000)。
;通道0初始化程序 MOV AL, 00110101B OUT 87,AL MOV AL,00H OUT 81,AL MOV AL,50H OUT 81,AL ;通道1初始化程序 MOV AL, 01110111B OUT 87,AL MOV AL,00H OUT 83,AL MOV AL,80H OUT 83,AL
+5V +5V D7-D0 OUT0 WR RD A1 A0 CS +5V INTR WR RD A2 A1 GATE1 CLK1 M/IO 译码 AB 例4:用8253设计一个自动计数系统(计数500向CPU提出中断申请)。 8253端口地址: F0H, F2H, F4H, F6H, 8253工作方式:计数器1工作于方式0,按BCD计数,先读写低字节,后读写高字节。
;通道1初始化程序 MOV AL, 01110001B OUT 0F6H, AL MOV AL, 99H OUT 0F2H, AL MOV AL, 04H OUT 0F2H, AL 当前计数值的读取 (1)利用GATE控制信号,使计数器停止计数。故干扰了计数过程,需要硬件电路配合。 (2)利用计数器锁存命令锁存现行计数值,就可从相应的计数器通道中读取计数值。 ;读通道1计数值程序 MOV AL, 01000000B OUT 0F6H, AL IN AL, 0F2H MOV AH, AL IN AL, 0F2H XCHG AH, AL
GATE0 GATE1 GATE2 IRQ0 18.2Hz OUT0 5V PB0 D Q C Q U21 D S Q C CLR U73 CLK0 CLK1 CLK2 DRQ0 66.2878KHz PCLK 2.38636MHz OUT1 A1 A0 IOR IOW T/C CS DACK0BRD RESETDRV OUT2 A1 A0 RD WR T/C2 OUT 896Hz D7—D0 D7—D0 CS 第三节 Intel8253-PIT在PC/XT机中的应用 方式3,n =0 方式2,n =18 方式3,n =1331 40H---43H