550 likes | 733 Views
第 9 章 可编程定时 / 计数器 8253 及其应用. 9.1 定时 / 计数的基本概念 9.2 8253 的工作原理 9.3 8253 的应用举例. 9.1 定时 / 计数的基本概念. 所谓定时(计数)就是通过硬件或软件的方法产生一个时间基准,以此来实现对系统的定时或延时控制。 实现定时或延时有三种主要方法: 软件定时 纯硬件定时 可编程的硬件定时器 / 计数器. 1. 软件定时 方法: 由于执行每条指令都需要时间,故可循环执行某一段指令产生延迟时间。 特点:
E N D
第9章 可编程定时/计数器8253及其应用 9.1 定时/计数的基本概念 9.2 8253的工作原理 9.3 8253的应用举例
9.1 定时/计数的基本概念 所谓定时(计数)就是通过硬件或软件的方法产生一个时间基准,以此来实现对系统的定时或延时控制。 实现定时或延时有三种主要方法: 软件定时 纯硬件定时 可编程的硬件定时器/计数器
1. 软件定时 方法: 由于执行每条指令都需要时间,故可循环执行某一段指令产生延迟时间。 特点: 这种方法由于要完全占用CPU的时间,因而降低了CPU的利用率,但硬件开销少,使用灵活。
例:某一LED灯控系统,要求控制LED灯亮0.5s后熄灭。例:某一LED灯控系统,要求控制LED灯亮0.5s后熄灭。 选择软件定时法,控制程序段如下: SUB CX,CX MOV AL,01H ; 灯亮控制码 OUT PORT,AL ;PORT为端口地址 L: LOOP L ;循环216次,约0.5秒 MOV AL,00H ;灯灭控制码 OUT PORT,AL LOOP指令执行占17个时钟周期,设时钟=2MHz,时钟周期=0.5us, 0.5us*17* 216= 0.5s。
2. 纯硬件定时 方法: 采用固定的电路,如可以采用小规模集成电路555,外接电阻和电容构成单稳延时电路。 特点: 定时电路简单,而且通过改变电阻和电容,可以使定时在一定的范围内调整。 但使用不灵活。
3. 可编程硬件定时器/计数器 是目前在控制系统中广泛使用的方法,它通过编程来控制电路的定时值及定时范围。 在计算机系统中,象定时中断、定时检测、定时扫描等等都是用可编程定时器来完成定时控制的。 特点: 功能强,使用灵活,定时时间精确(由软件设置),提高CPU的利用率。
Intel 系列的8253、8254就是常用的可编程定时/计数器。 8253的主要性能: * 具有3个独立的16位计数器通道; * 每个计数器均可按二进制或二—十进制计数; * 每个计数器的计数速率高达2MHz (8254为10MHZ) ; * 每个通道有6种工作方式,可由程序设置和改变; * 所有的输入输出都与TTL兼容。 可用在多种场合,如方波发生器、分频器、实时时钟、事件计数等方面。
9.2 Intel8253的工作原理 一、 8253的内部结构和引脚信号 内部结构 ⑴数据总线缓冲器 它与CPU的数据总线相连,是8位双向三态缓冲器。CPU通过这个缓冲器对8253进行读/写操作。 ⑵读/写控制逻辑 有CS、RD、WR、A0、A1信号。 ⑶控制字寄存器 只能写入,初始化时由CPU写入控制字来设置计数器的工作方式。 ⑷计数器 3个独立的结构相同的16位减法器,可作定时/计数器使用;计数器可按二进制/BCD方式减法计数,从预置值减到零时,OUT端输出一信号。
外部引脚 D 1 24 V 7 CC D 2 23 WR 6 D 3 22 RD 5 D 4 21 CS 4 D 5 20 A 3 1 D 6 19 A 8253 2 0 D 7 18 CLK 1 2 D 8 17 OUT 0 2 CLK 9 16 GATE 0 2 OUT 10 15 CLK 0 1 GATE 11 14 GATE 0 1 GND 12 13 OUT 1 图9.2 Intel 8253的外部引脚图
GATE:门控信号,当GATE为低电平时,禁止计数器工作; GATE为高电平时,才允许计数器工作。 CLK:计数脉冲输入。 OUT:脉冲输出。当计数到“0”时,从OUT端输出信号,输出信号的波形取决于工作方式。 CS、RD、WR、A0、A1共同结合,用于对8253进行端口操作,如表9-1所示。
A1 A0 寄存器选择和操作 0 1 0 0 0 写计数器0 0 1 0 0 1 写计数器1 0 1 0 1 0 写计数器2 0 1 0 1 1 写控制字寄存器 0 0 1 0 0 读计数器0 0 0 1 0 1 读计数器1 0 0 1 1 0 读计数器2 0 0 1 1 1 无操作(三态) 1 × × × × 禁止(三态) 0 1 1 × × 无操作(三态) 表9-1 8253的端口选择
二、8253的控制字 D D D D D D D D 7 6 5 4 3 2 1 0 SC SC RL RL M M M BCD 1 0 1 0 2 1 0 (数制选择) (计数器选择) 0:二进制(0000~FFFFH) 00:选择计数器0 1:BCD (0000~9999H) 01:选择计数器1 10:选择计数器2 11:非法选择 (工作方式选择) 000: 方式0 001: 方式0 (读/写格式) X10:方式2 00:计数器锁存命令 X11:方式3 01:读/写高8位 100 :方式4 10:读/写低8位 101: 方式5 11:先读/写低8位,再读/写高8位 图9.3 8253的控制字
SC1、SC0:这两位决定这个控制字是哪一个计数器的控制字。SC1、SC0:这两位决定这个控制字是哪一个计数器的控制字。 RL1、RL0:设置数据读/写格式。在读取计数值时,可令RL1、RL0=00,先将写控制字时的计数值锁存,然后再读取。 M2、M1、M0:设置每个计数器的工作方式。 BCD:用于选择每个计数器的计数制。在二进制计数时,计数初值的范围是0000H~FFFFH,其中0000H是最大值,代表65536。在BCD码计数时,计数初值的范围中0000 ~ 9999H,其中,0000是最大值,代表10000。
三、8253的工作方式 Intel 8253的每个计数器都有6种工作方式。 6种方式的主要区别是:输出的波形不同,计数过程中GATE信号对计数操作的影响不同,启动计数器的触发方式不同等。 1. 方式0—计数结束中断方式 该方式的波形如图9.4所示,这种方式的特点是:
*CW写入,OUT=0; * 写入时常,通道开始计数; * 计数到零,OUT=1; * 计数器只计数一遍; * OUT是N+1个CLK后变高; * 计数过程中,GATE=0, 计数暂停; * 计数过程中可改变计数值; * 可用OUT信号作为中断请求。 图9.4 方式0波形图
CW=10 H N=3 N=2 WR CLK GATE OUT 3 2 1 2 1 0 方式0计数过程中改变计数初值
方式0特点: ①写入控制字后,OUT输出端变为低电平。当写入计数初值后,计数器开始减1计数(相当于软件触发启动) 。直到计数到0时,OUT输出变为高电平。期间共记录n+1个脉冲,即: Tout > n • TCLK (该方式作定时用时不够准确) 但此信号可用于向CPU发出中断请求。 ②计数器只计数一遍。当计数到0时,不恢复计数初值,不开始重新计数,且输出一直保持为高电平。只有在写入新的计数值时,OUT才变低,并开始新的计数。
③GATE是门控信号,GATE=1时允许计数,GATE=0时,禁止计数。在计数过程中,如果GATE=0则计数暂停,当GATE=1后接着计数。③GATE是门控信号,GATE=1时允许计数,GATE=0时,禁止计数。在计数过程中,如果GATE=0则计数暂停,当GATE=1后接着计数。 ④在计数过程中可改变计数值。
2. 方式1—可编程单稳态输出方式 * 写入控制字OUT=1,写入常数不计数; * GATE上升沿启动计数,OUT=0,硬件触发; * 计数到,OUT=1。 *单拍脉冲宽度为N; *由GATE重新启动; *计数中,可重新启动; *计数中,可改变计数值,再次启动时有效。 图9.5 方式1的波形图
方式1特点: ①写入控制字后,输出OUT将保持为高电平,计数由GATE上升沿触发启动(相当于硬件触发启动)。GATE启动之后,OUT变为低电平,当计数到0时,OUT输出高电平,从而在OUT端输出一个负脉冲,负脉冲的宽度为n个(计数初值)CLK的脉冲宽度。 Tout = n • TCLK(定时准确) ②当计数到0后,不用送计数值,可再次由GATE脉冲启动,输出同样宽度的负的单脉冲。
③在计数过程中,可改变计数初值,此时计数过程不受影响。如果再次触发启动,则计数器将按新输入的计数值计数。③在计数过程中,可改变计数初值,此时计数过程不受影响。如果再次触发启动,则计数器将按新输入的计数值计数。 ④在计数未到0时,如果GATE再次启动,则计数初值将重新装入计数器,并重新开始计数。
3. 方式2——比率发生器(分频器) * 写入控制字OUT=1; * 写入常数立即对CLK计数; * 计数到1,OUT=0; * 一个CLK周期后,OUT=1,重新计数。 * 通道连续工作不需重置时间常数; * 计数过程中,GATE=0,计数暂停,GATE变高后重新计数; * 计数过程中可改变计数值;新的计数值在下一次有效。 图9.6 方式2波形图
方式2的特点是: ①写入控制字后,输出将变为高电平。写入计数值后,计数立即开始。在计数过程中输出始终为高电平,直至计数器减到1时,输出将变为低电平。经过一个CLK周期,输出恢复为高,且计数器开始重新计数。因此,它能够连续工作,输出固定频率的脉冲。 ②如果计数值为N,则每输入N个CLK脉冲,输出一个脉冲。因此,相当于对输入脉冲的N分频。通过对N赋不同的初值,即可在输出端得到所需的频率,起到频率发生器的作用。
③计数过程可由门控脉冲控制。 GATE=1允许计数,当GATE=0时,暂停计数;当GATE变高自动恢复计数初值,重新开始计数。 ④在计数过程中可以改变计数值,这对正在进行的计数过程没有影响。但在计数到1时输出变低,经过一个CLK周期后输出又变高,计数器将按新的计数值计数。
4. 方式3 —方波发生器 方式3的波形如图9.7所示。它的特点是: ①输出为周期性的方波。若计数值为N,则输出方波的周期是N个CLK脉冲的宽度。 图9.7 方式3波形
②与方式2的区别在于:输出为周期是N个CLK脉冲的方波。②与方式2的区别在于:输出为周期是N个CLK脉冲的方波。 ③若计数值为偶数,则输出对称方波。每个CLK使计数值减2,计到0,OUT改变状态,重装计数值开始新的计数。如果计数值为奇数,则前(N+1)/2个CLK脉冲期间输出为高电平,后(N-1)/2个CLK脉冲期间输出为低电平。 ④GATE信号能使计数过程重新开始。GATE=1允许计数,GATE=0禁止计数。停止后OUT将立即变高开,当GATE再次变高以后,计数器将重新装入计数初值,重新开始计数。
5. 方式4——软件触发选通 方式4的波形如图9.8所示,这种方式的特点是: ①写入控制字后,输出为高电平。写入计数值后立即开始计数(相当于软件触发启动),当计数到0后,输出一个时钟周期的负脉冲,计数器停止计数。只有在输入新的计数值后,才能开始新的计数。 ②当GATE=1时,允许计数,而GATE=0,禁止计数。GATE信号不影响输出。 ③在计数过程中,如果改变计数值,则按新计数值重新开始计数。如果计数值是16位,则在设置第一字节时停止计数,在设置第二字节后,按新计数值中开始计数。
6.方式5——硬件触发选通 方式5的波形如图9.9所示,这种方式的特点是: ①写入控制字后,输出为高电平。在设置了计数值后,计数器并不立即开始计数,而是由门控脉冲的上升沿触发启动。当计数到0时,输出一个CLK周期的负脉冲,并停止计数。当门控脉冲再次触发时才能再计数。 ②在计数过程中如果再次用门控脉冲触发,则使计数器重新开始计数,此时输出还保持为高电平,直到计数为0,才输出负脉冲。 ③如果在计数过程中改变计数值,只要没有门控信号的触发,不影响计数过程。当有新的门控脉冲的触发时,不管是否计数到0,都按新的计数值计数。
四、 8253工作方式小结 6种方式各有特点,适用于不同的应用场合。方式0,1相似,方式2,3相似,方式4,5相似。 1. 输出端OUT的初始状态 只有方式0是在写入控制字后输出为低,其它均为高; 2. 计数值的设置 任一种方式,只有在写入计数值后才能开始计数,方式0、2、3、4在写入计数值后,计数自动开始,方式1、5需外部触发,才开始计数。 方式0、1、4初始化后仅有效一次。方式2、3、5会在计数器减为0时,自动将初值再装入。
3. 门控信号的作用:GATE输入总是在CLK输入时钟的上升沿被采样。在方式0,2,3,4中,GATE输入是电平起作用。在方式1,2,3,5中 GATE输入是上升沿起作用的。
9.3 8253的应用举例 8253的初始化编程步骤 接通电源时8253处于未定义状态,必须首先对其进行初始化,初始化步骤(分别对每个计数器进行): ①写控制字。 ②写计数初值,如果计数值是16位的,则先写低8位再写高8位。 * 对3个通道的编程没有先后顺序的规定,只要符合先写入控制字,后写入计数初值的规定即可。
例:设一个8253在某系统中的端口地址40H—43H,如果要将计数器0设置为工作方式3,计数初值为3060H,采用二进制计数法,则初始化方法如下:例:设一个8253在某系统中的端口地址40H—43H,如果要将计数器0设置为工作方式3,计数初值为3060H,采用二进制计数法,则初始化方法如下: • MOV AL,36H ;设置控制字00110110(计数器0,方式3,写两个字节,二进制计数) • OUT 43H,AL ;写入控制寄存器 • MOV AX,3060H ;设置计数值 • OUT 40H,AL ;写低8位至计数器0 • MOV AL,AH • OUT 40H,AL ;写高8位至计数器0
0 0 1 1 0 0 1 1 8253的应用举例 例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
例3:8253控制LED。要求:LED点亮10秒,熄灭10秒。例3:8253控制LED。要求:LED点亮10秒,熄灭10秒。 +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 分析:8253的地址线与CPU高8位数据线D8——D15相连,8253的各端口的地址为81H、83H、85H、87H。OUT1输出占空比为1:1的方波,周期20秒。 8253端口1工作在方式3。 时钟频率为2MHz时,16位计数通道的最大定时时间为: 0 .5s65536=32.768ms 分频系数:2MHz/0.05Hz =40,000,000 级连:通道0输出400Hz脉冲(时常5000),通道1输出0.05Hz方波(时常8000)。
因单通道最大分频系数为65536,所以需用几个通道级连的方法来解决这个问题。因单通道最大分频系数为65536,所以需用几个通道级连的方法来解决这个问题。 通道0:CLK0:接2MHz时钟信号,方式2,N0=5000; 通道1:CLK1:接OUT0,方式3,N1=8000; ;通道0初始化程序 MOV AL, 00110101B OUT 87H,AL MOV AL,00H OUT 81H,AL MOV AL,50H OUT 81H,AL ;通道1初始化程序 MOV AL, 01110111B OUT 87H,AL MOV AL,00H OUT 83H,AL MOV AL,80H OUT 83H,AL
+5V +5V D7-D0 OUT1 WR RD A1 A0 CS +5V 8259IR0 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 ;方法2读通道1计数值程序 MOV AL, 01000000B OUT 0F6H, AL IN AL, 0F2H MOV AH, AL IN AL, 0F2H XCHG AH, AL 当前计数值的读取 (1)利用GATE控制信号,使计数器停止计数。故干扰了计数过程,需要硬件电路配合。 (2)利用计数器锁存命令锁存现行计数值,就可从相应的计数器通道中读取计数值。
8253在IBM PC/XT机的应用 在IBM PC/XT机中,8253主要提供系统时钟中断、动态RAM的刷新定时及喇叭发声控制等功能。8253的初始化是在计算机启动时由BIOS完成的。 从8284时钟发生器来的频率2.386364MHZ经二分频后作为8253三个计数器的时钟输入,8253在IBM-PC/XT中的端口地址为40H—43H,这三个计数器在系统中的初始化程序如下:
⑴计数器0用于定时中断(约55ms) OUT0(f=1.19318MHz/65536=18.2Hz的方波)经系统板上的IRQ0送到8259的IR0,使计算机每秒钟产生18.2次的中断(即每隔55ms申请一次),CPU可以此作为时间基准。如计65536次中断就为1小时。 MOV AL,36H ;计数器0,方式3,写两个字节,二进制计数 OUT 43H,AL ;控制字送控制字寄存器 MOV AL,0 ;计数值为最大值 OUT 40H,AL ;写低8位 OUT 40H,AL ;写高8位
⑵计数器1用于定时(15μs)DMA请求 8253通道1和8237通道0构成刷新电路, 8253通道1每隔15us请求一次DMA读操作。 f=1/15us=66666.67Hz, 故分频系数= 1193180Hz/66666.67Hz=18(即初值) MOV AL,54H ;计数器1,方式2,只写低8位,二进制计数 OUT 43,AL MOV AL,12H ;初值为18 OUT 41H,AL
⑶计数器2用于产生约900HZ的方波送至扬声器 MOV AL,B6H ;计数器2,方式3,写两字节,二进制计数 OUT 43,AL MOV AX,0533H ;计数初值为533H OUT 42H,AL ;写低8位 MOV AL,AH OUT 42H,AL ;写高8位
9.4 Intel 8254简介 Intel8254是Intel 8253的改进型,它们在操作方式及引脚排列上完全相同。 相比8253,8254主要改进的内容是: 1.计数频率高 8254的计数频率可由直流至6MHz,8254-2可高达10MHz。而8253最高只能达到2.6MHz。