580 likes | 857 Views
第九章 Intel 8253 定时器 / 计数器. 一、概述 二、计数 / 定时器的工作原理 三、可编程计数器 / 定时器 8253 四、 8253 的应用. 一、概述 1 、定时与计数器的概念 定时器: 在时钟信号作用下,进行定时的减 “ 1 ” 计数,定时时间到(减 “ 1 ” 计数回零),从输出端输出 周期均匀、频率恒定的 脉冲信号。 由上述可知,定时器强调的是精确的时间。. 定时举例: ①一天 24 小时的计时,称为日时钟。 ②在监测系统中,对被测点的定时取样。 ③在读键盘时,为去抖,一般延迟一段时间,再读。
E N D
第九章 Intel 8253定时器/计数器 一、概述 二、计数/定时器的工作原理 三、可编程计数器/定时器 8253 四、8253的应用 qiu
一、概述 1、定时与计数器的概念 定时器:在时钟信号作用下,进行定时的减“1”计数,定时时间到(减“1”计数回零),从输出端输出周期均匀、频率恒定的脉冲信号。 由上述可知,定时器强调的是精确的时间。 qiu
定时举例: ①一天24小时的计时,称为日时钟。 ②在监测系统中,对被测点的定时取样。 ③在读键盘时,为去抖,一般延迟一段时间,再读。 ④在微机控制系统中,控制某工序定时启动。 qiu
计数器: 在时钟信号作用下,进行减“1”计数,计数次数到(减“1”计数回零),从输出端输出一个脉冲信号。 • 计数举例: • ①对零件和产品的计数; • ②当外部时间发生的次数达到规定值后,向计算机发出中断请求。 计数操作可采用软件实现也可采用硬件实现,或者将二者结合使用。 qiu
2.定时信号的产生方法:硬件方法和软件方法。2.定时信号的产生方法:硬件方法和软件方法。 软件定时就是根据所需要的时间常数来设计一个延迟子程序,这样作的优点是节省硬件,缺点是耗费CPU的资源较多,降低了CPU效率,且编写软件略显麻烦,通常延迟时间较小且重复次数有限的情况下,使用该方法。 硬件定时 1.不可编程的硬件定时 是用元器件搭成的延迟电路。例如:LM555 2.可编程的硬件定时 用专用芯片——计数器/定时器,其优点是不占用CPU时间,且利用计数器/定时器产生中断信号,就可以建立多作业环境,以提高CPU效率,由于计数器/定时器开销不大,因此得到了广泛应用。 qiu
二. 计数/定时器的工作原理 • 计数/定时的功能 • 对外部事件发生次数进行计数 • 计算机系统经常用到定时信号,如DRAM刷新定时 计数和计时本质上是相同的,它们都是对一个输入脉冲进行计数,如果输入脉冲的频率一定,那么记录脉冲的个数与所需的时间是一一对应的关系。 例如输入脉冲频率为2MHz,那么计数2106 计时1秒 因此,使用同一个芯片,既能计数,又能计时——计时器/计数器 qiu
组成:四个寄存器和一个计数器 CLK 控制寄存器 控制寄存器:决定工作模式 状态寄存器:反应工作状态 预置计数值寄存器: 计数的初值 计数器输出寄存器: CPU从中读当前计数值 计数器:执行计数操作, CPU不能访问 预置计数值寄存器 GATE 计数器 OUT 计数器输出寄存器 状态寄存器 qiu
工作原理:对CLK信号进行减1计数 • 首先,CPU把控制字写入控制寄存器,计数初始值写入初值寄存器 • 计数从初值开始,每当CLK信号出现一次,计数值减1 • 当计数值减到0,从OUT端输出规定的信号 • CLK信号出现时,计数器是否减1,由门控信号GATE控制 qiu
CLK是计数输入信号,计数器对CLK端出现的脉冲个数进行计数CLK是计数输入信号,计数器对CLK端出现的脉冲个数进行计数 • CLK端可以输入外部事件 • CLK端可以接入固定频率的时钟信号,从而实现计时 • OUT信号在计数结束时发生变化 • 可将OUT作为外部设备的控制信号 • 可将OUT作为向CPU申请中断的信号 • CPU可以从计数器输出寄存器读出当前计数值。 • 读前,应向控制寄存器发送锁存命令 qiu
三、可编程计数器/定时器 8253 1.Intel 8253 定时器/计数器的基本性能参数 1)、一片8253内部有3个16位的计数器(相互独立) 2)、每个计数器的内部结构相同,可通过编程手段设置为6 种不同的工作方式来进行定时/计数 3)、每个计数器再开始工作前必须预制时间常数(时间初 始) 4)、每个计数器在工作过程中的当前计数值可被CPU读出. (注:时间常数也可在计数过程中更改) qiu
2. 8253的编程结构 8253 是24引脚双列直插式芯片,其中: D7~D0是数据线引脚,RD和WD分别是读写控制引脚,CS是片选信号。A1,A0是片内地址选择引脚。 8253的三个计数通道在结构上和功能上完全一样,每个通道均有两个输入引脚CLK和GATE,一个输出信号 引脚OUT。 qiu
CLK0 GATE0 OUT0 计数器 0 数据总线缓冲器 D0-D7 8 A0 读/写逻辑电路 A1 CLK1 GATE1 OUT1 计数器 1 内部总线 RD WR CS CLK2 GATE2 OUT2 计数器 2 控制寄存器 3.8253 定时器/计数器的内部结构框图 8253内部有6个模块 qiu
数据总线缓冲器 • 8253与数据总线的接口部件,是8位的三态双向缓冲器,CPU对8253读写的数据,控制及状态信息都通过这8条数据线传送,读写的内容包括: • CPU向8253传送的确定8253工作方式的控制字 • CPU向某一计数器装入计数初值 • CPU从某一计数器读出计数初值 qiu
读/写逻辑电路 • CS片选信号,低电平有效,有效时可以访问8253,为高电平时,数据总线缓冲器处在高阻状态。 • RD,WR读写控制信号,控制数据的传送方向,当RD有效时,数据由8253传向CPU (读当前计数值);当WR有效时,数据由CPU传向8253(写控制字和计数初值)。 • A1,A0接系统总线的A1,A0,用于选择8253的计数器和控制寄存器。 A1 A0 • 0 0 计数器0 • 0 1 计数器1 • 1 0 计数器2 • 1 1 控制寄存器 qiu
控制寄存器 它接受CPU送来的控制字。 计数器0,1,2 • 8253有3个独立的计数器/定时器,计数器0,1,2,每个计数器的内部结构相同,操作完全相同。 每个通道的外部均有两个输入信号CLK和GATE,一个输出信号OUT. • CLK时钟脉冲输入 • GATE门控制信号输入 • OUT输出信号 qiu
每个计数器内部都有三个16位寄存器CR,CE和OL。 • CR预置初始值寄存器 • 存放CPU写入的计数初值(也称时间常数)。CPU可以写,但不能读CR寄存器。CPU向CR写入计数初值后的第一个CLK脉冲下降沿,CR寄存器的内容被送到CE计数器单元内,随后CE开始工作。 • CE计数执行部件(可预置数减法计数器) • 接收CR送来的计数初值,在GATE的控制下,CLK进行减1计数,当计数终到时减1到0,该计数通道的OUT引脚发出OUT信号。CPU不能访问CE寄存器。 • OL输出锁存器 • 用来锁存某一时刻CE中的计数值。CPU可随时用IN指令读出该寄存器的当前计数值,但不能写该寄存器。 qiu
锁存后读出当前值 LSB MSB 16位当前计数值锁存器 CLK & 16位减一计数器 OUT GATE (减1至0时) 16位计数初值寄存器 LSB 装入/读出初值 MSB 8253 内部各计数器的结构 qiu
CS RD WR 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读出计数值 8253输入信号与各功能的对应关系 qiu
4. 8253编程 • 初始化 1)写入控制字 以选择器(3个计数器之一),确定工作方式(6种方式之一),指定计数器计数初值的长度和装入顺序以及计数值的码制(BCD或二进制码)。 2)按控制字要求写入计数初值 计数器初值计算:N=fCLK/fOUT qiu
初始化程序流程 写控制字 写计数值低8位 非必须 * 写计数值高8位 qiu
5、8253 的控制字格式: 数制 格式 D7 D6 D5 D4 D3 D2 D1 D0 0-二进制 1-BCD码 SC1 SC0 RW1 RW0 M2 M1 M0 BCD 000 方式0 001 方式1 *10 方式2 *11 方式3 100 方式4 101 方式5 工作方式 00 计数器锁存命令 10 只读/写高八位 01 只读/写低八位 11 先读/写低八位 再读/写高八位 读/写格式 00 选择计数器0 01 选择计数器1 10 选择计数器2 计数器选择 控制字写入控制字I/O地址(A1A0=11) qiu
关于控制字的说明: 1、8253只有一个工作方式控制字,但是对每个计数器而言,它们的工作方式控制字内容一定各不相同(前两位不同),所用各计数器的控制字需要分别设置,先后不计。 2、8253的工作方式控制字的特殊形式可用于对计数器的当前计数值进行锁存 3、在工作方式控制字被设置之后,随后必须紧接着给计数器预设置计数初值,计数器方可开始工作。 qiu
锁存计数器当前计数值控制字 D7 D6 D5 D4 D3 D2 D1 D0 SC1 SC0 RW1 RW0 M2 M1 M0 BCD 未用 00 计数器锁存命令 00 选择计数器0 01选择计数器1 10 选择计数器2 计数器选择 qiu
例1:选择2号计数器,工作在方式3 ,计数初值为533H(2个字节),采用二进制计数。其初始化程序段为 MOV DX,307H ;命令口 MOV AL,10110110B ;2号计数器的初始化命 令字 OUT DX,AL ;写入命令寄存器 MOV DX,306H ;2号计数器数据口 MOV AX,533H ;计数初值 OUT DX,AL ; 选送低字节到2号计数器 MOV AL,AH ; 取高字节送AL OUT DX,AL ; 后送高字节到2号计数器 qiu
例2:设三个计数器的端口地址为70H、71H、72H,控制寄存器端口地址73H。计数器0,工作模式2,仅使用低8位,初值为100,计数值使用二进制例2:设三个计数器的端口地址为70H、71H、72H,控制寄存器端口地址73H。计数器0,工作模式2,仅使用低8位,初值为100,计数值使用二进制 MOV AL, ? OUT 73H, AL MOV AL, 100 OUT 70H, AL 14H/1CH 例3:设三个计数器的端口地址为70H、71H、72H,控制寄存器端口地址73H。计数器1,工作模式1,使用16位,初值为1234H,计数值使用BCD MOV AL, ? OUT 73H, AL MOV AX, 1234H OUT ?, AL MOV AL, AH OUT ?, AL 73H 71H 71H qiu
读操作 1)发出锁存命令,使当前计数值锁存在OL中 2)读OL,获得当前计数值 例1:设三个计数器的CR/OL端口地址为70H、71H、72H,控制寄存器端口地址73H。读出计数器0的当前计数值,放在BX中 MOV AL, 0H OUT 73H, AL IN AL, 70H MOV BL, AL IN AL, 70H MOV BH, AL qiu
例2:要求读出并检查1号计数器的当前计数值是否是全“1”(假定计数值只有低8位),其程序段为例2:要求读出并检查1号计数器的当前计数值是否是全“1”(假定计数值只有低8位),其程序段为 MOV DX,307H ;命令口 L :MOV AL,01000000B ;1号计数器的锁存命令 OUT DX,AL ;写入命令寄存器 MOV DX,305H ;1号计数器数据口 IN AL,DX ;读1号计数器的当前计数值 CMP AL,0FFH ;比较 JNE L ;非全“1”,再读 HLT ; 是全“1”,暂停 qiu
写操作 • 写命令字 A1A0="11" • 写计数值,对各计数器口地址 • 设置初值命令用来给出计数的初始值,初值可为8位,也可为16位。如为16位,则要用两条输出指令完成初值设置。 qiu
5. 8253工作模式 8253作为一个可编程计数器/定时器,可以用6种工作模式,不论工作在那种模式,都会遵守下面几条基本规则: 1) 控制字写入寄存器时,所有控制逻辑电路立即复位,输出 端OUT进入初始状态。2) 初值写入后,要经过一个时钟上升沿和一个下降沿,计数 执行部件才开始进行计数。 3) 通常在时钟脉冲CLK的上升沿时,门控信号GATE被采样。 模式0,4中,门控信号为电平触发 模式1,5中,门控信号为上升沿触发 模式2,3中,门控信号为电平或上升沿触发4) 在时钟脉冲的下降沿,计数器作减1计数。 0是计数器所能容纳的最大初始值。 二进制时,0相当于2^16;BCD码时,0相当于10^4。 qiu
1、方式0——计数结束中断“一次有效” 1)计数器写入控制字后,在WR的上升沿相应的输出信号OUT就开始变成低电平。当计数器减到零时,OUT立即输出高电平。 2)写入计数初值后,必须在下一个时钟脉冲下降沿到来时,才开始计数。门控信号GATE为高电平时,计数器工作;为低电平时,计数器停止工作,计数值保持不变。 3)在计数器工作期间,如果重新写入新的计数值, 计数器将按新写入的计数值重新工作。 qiu
WR n=3 CLK ① GATE OUT 3 2 1 0 WR n=3 ② GATE OUT 3 2 2 2 1 0 n=9 n=3 WR ③ GATE OUT 1 2 0 9 8 3 qiu 8253的0方式时序波形
2.方式1 ----低电平输出(GATE信号上升沿重新计数) 方式1为可重复触发的单稳态触发器。 情况一: (1)写入控制字后,使输出OUT变成高电平; (2)写入计数初值后,计数器并不立即开始工作。门控信号GATE 有效的下一个输入时钟脉冲的下降沿,才开始计数; (3)直到计数器值减到零后,输出才变高电平。见图①。 情况二: 在计数器工作期间,当GATE又出现一个上升沿时,计数器重新 装入原计数初值并重新开始计数,见图②。 如果工作期间对计数器写入新的计数初值,则要等到当前的 计数值计满回零且门控信号再次出现上升沿后,才按新写入的计数 初值开始工作,见③。 qiu
WR n=3 CLK ① GATE OUT 3 2 1 0 WR n=3 ② GATE OUT 3 2 1 3 2 1 0 n=2 n=3 WR ③ GATE OUT 3 2 1 2 1 0 qiu 8253的方式1时序波形
3.方式2:分频器 方式2是一种具有自动装入时间常数(计数初值N) 的N分频器。 特点: 1)写入控制字后,使输出OUT变成高电平; 2)一次设置计数初值,计数器可自动重复进行减“1”计数操 作,减“1”计数回“0”,可从输出端输出一负脉冲信号。 qiu
WR n=3 CLK ① GATE OUT 1 1 3 2 3 2 WR n=3 ② GATE OUT 3 2 2 3 2 1 3 n=3 n=4 WR ③ GATE OUT 1 4 3 2 1 3 2 qiu 8253的方式2时序波形
4. 方式3 ----方波发生器 方式3工作方式与方式2基本相同,也具有自动装入时间常数(计数 初值)的功能,不同之处在于: (1)工作在方式3 ,引脚OUT输出的不是一个时钟周期的负脉 冲,而是占空比为1:1或近似1:1的方波;当计数初值为偶数时 输出在前一半的计数过程中为高电平,在后一半的计数过程中为 低电平。 (2)由于方式3输出的波形是方波,并且具有自动重装计数初 值的功能,因此,8253一旦计数开始,就会在输出端OUT输出连 续不断的方波。 qiu
WR n=4 CLK ① GATE OUT 4 2 4 2 2 4 WR n=4 ② GATE OUT 4 2 4 2 4 2 2 n=5 WR ③ GATE OUT 0 4 2 4 2 4 2 qiu 8253的方式3时序波形
5. 方式4 -----软件触发的选通信号发生器 方式4工作方式是一种由软件启动的计数方式,产生一个负脉冲作为选通信号。 1)即由写入计数初值来触发计数器开始工作 2)门控信GATE =1,允许计数器工作, GATE=0, 禁止计数器工作 3)在计数器工作期间,如果重新写入新的计数值, 计数器将按新写入的计数值重新工作。 qiu
WR n=3 CLK ① GATE OUT 1 3 2 0 WR n=3 ② GATE OUT 3 2 1 0 n=2 n=3 WR ③ GATE OUT 2 1 0 3 2 qiu 8253的方式4时序波形
6. 方式5 ------硬件触发选通信号发生器 方式5工作特点是由GATE上升沿触发计数器开始工作。 ① 在5方式工作方式下,当写入计数初值后,计数器并不 立即开始计数,而要由门控信号的上升沿启动计数。 ②在计数过程中(或者计数结束后),如果门控再次出现上升沿,计数器将从原装入的计数初值重新计数。 qiu
WR n=3 CLK ① GATE OUT 0 3 3 2 1 WR n=3 ② GATE OUT 3 2 3 2 1 0 n=2 n=3 WR ③ GATE OUT 3 2 1 2 1 0 qiu 8253的方式5时序波形
工作模式决定以下内容: • 1)门控信号的影响 • 高电平允许,当GATE=0,即使出现CLK,也不计数 • ——模式0,2,3,4 • 上升沿允许(上升沿触发) • ——模式1,5 • 2)OUT信号的状态 • 写入控制字后, OUT的状态 • 计数过程中, OUT的状态 • 计数终了, OUT的状态 • 3)计数操作可否重复 • 不可重复——模式0,4 • 自动重复——模式2,3 • 条件重复——模式1,5 qiu
6种工作模式主要区别: • 方式0: • 计数初值写入CR后,OUT由0到1跳变出现在n+1个时钟脉冲之后 • 延迟时间TD=(n+1)TCLK • 方式1: • 单脉冲宽度T=n TCLK • 方式2: • 对输入端n个时钟脉冲,在输出端仅出现一个时钟脉冲 • ——N分频计数器 qiu
方式3: • 例:计数器工作模式3,计数器初值15,时钟脉冲频率为2MHz,确定OUT端输出方波的特性。 • 解:TCLK=1/2MHz=500ns • 计数器初值15为奇数,输出分频波高电平宽度 • TCLK(N+1)/2=4s • 输出分频波低电平宽度 • TCLK(N-1)/2=3.5s • 方式4、5: • 触发后n+1个时钟脉冲之后输出端产生选通脉冲信号 qiu
四、8253的应用 例1:计数器0工作模式4,初始化计数器,使装入计数器10 s后产生选通信号(设时钟频率2MHz,8253端口地址为50H~53H)。 • 解:n+1=T/ TCLK=10/0.5=20 • n=19=13H • MOV AL, 18H • OUT 53H, AL • MOV AL, 13H • OUT 50H, AL qiu
例2: • 采用8253作定时/计数器,其接口地址为0120H~0123H。 • 要求计数器0每10ms输出一个CLK脉冲宽的负脉冲;用计数器1产生10KHz的连续方波信号,计数器2在定时5ms后产生输出高电平。输入8253的时钟频率为2MHz。 • 画线路连接图,并编写初始化程序。 qiu
计算计数初值: • CNT0:10ms/0.5us=20000 • CNT1:2 MHz/10KHz=200 • CNT2: 5ms/0.5us=10000 • 确定控制字: • CNT0:方式2,16位计数值 • CNT1:方式3,低8位计数值 • CNT2:方式0, 16位计数值 qiu
+5V 8253 GATE0 GATE1 DB D0~D7 2MHz GATE2 IOW WR CLK0 IOR RD CLK1 CLK2 A1 A1 A0 A0 OUT0 OUT1 译码器 CS OUT2 qiu
初始化程序 CNT0: MOV DX,0123H MOV AL,34H OUT DX,AL MOV DX,0120H MOV AX,20000 OUT DX,AL MOV AL,AH OUT DX,AL CNT1: …… CNT2: …… qiu