480 likes | 711 Views
8.4 8253 可编程定时计数器. 概述. 实现定时和计数有两种方法:硬件定时和软件定时。 软件定时是利用 CPU 每执行一条指令都需要几个固定的指令周期的原理,运用软件编程的方式进行定时。 硬件定时,是利用专门的定时电路实现精确定时。这种定时方式又可分为简单硬件定时和利用可编程接口芯片实现定时。. CLK. 0. D. -D. GATE. 7. 0. 0. OUT. 0. RD. WR. CLK. 1. A. 0. GATE. A. 1. 1. OUT. 1. CLK. 2. GATE. 2. OUT. 2.
E N D
概述 实现定时和计数有两种方法:硬件定时和软件定时。 • 软件定时是利用CPU每执行一条指令都需要几个固定的指令周期的原理,运用软件编程的方式进行定时。 • 硬件定时,是利用专门的定时电路实现精确定时。这种定时方式又可分为简单硬件定时和利用可编程接口芯片实现定时。
CLK 0 D -D GATE 7 0 0 OUT 0 RD WR CLK 1 A 0 GATE A 1 1 OUT 1 CLK 2 GATE 2 OUT 2 1. 8253的组成与功能 数据总线 计数器 8 缓冲器 0 号 内 部 读 / 写 计数器 数 逻辑 1 号 据 CS 总 控制字寄 计数器 线 存器 2 号 8253内部结构框图
结构特点 减法计数器 计数器 控制寄存器 控制逻辑 16位初值寄存器 16位计数寄存器 存放控制命令字
D 8 0 D 7 1 CLK 9 0 D 计数器 6 2 GATE 11 0 D 5 0 号 3 OUT 10 数据线 0 D 4 4 D 3 5 D 2 CLK 6 15 1 计数器 D 1 GATE 7 14 1 RD 1 号 T 22 OU 13 1 WR 23 A 19 控制线 0 A CLK 2 1 2 计数器 18 CS GATE 21 2 16 2 号 Vcc T OU 24 2 17 地 电源线 12 8253的引脚配置
连接系统端的主要引线: D0----D7 CS RD WR A0,A1 A1 A0 0 0 CNT0 0 1 CNT1 1 0 CNT2 1 1 控制寄存器
连接外设端的主要引线: CLK ----------- 时钟脉冲输入 GATE ---------- 门控信号输入 OUT ------------ 定时输出
8253计数器内部逻辑 • 三个独立的16位计数器 • 控制字寄存器 • 读/写逻辑
CS A1 A0 WR RD 功 能 0 0 0 0 1 选中计数器0# 对计数器寄存器CR送初值 1 0 读输出锁存器OL当前值 0 0 1 0 1 选中计数器1# 对计数器寄存器CR送初值 1 0 读输出锁存器OL当前值 0 1 0 0 1 选中计数器2# 对计数器寄存器CR送初值 1 0 读输出锁存器OL当前值 0 1 1 0 1 选中控制寄存器 由控制字格式中SC1,SC0位决定属于哪个计数器 8253端口地址及操作功能
D D D D D D D D 7 6 5 4 3 2 1 0 读写操作 0= 二进制 00= 锁定当前计数值 1= 二—十进制 01= / 8 读 写计数器低 位 工作方式选择 10= 8 读写计数器高 位 000= 0 方式 11= / 先读 写计数器低 位 8 001= 1 方式 再 / 8 位 读 写计数器高 010= 2 方式 011= 3 方式 通道控制字寻址 100= 4 方式 00= 0 通道 控制寄存器 101= 5 方式 01= 1 通道 控制寄存器 10= 2 通道 控制寄存器 11= 不用 2. 8253的控制字、写/读操作及初始化编程 8253的控制字格式
8253的写/读操作及初始化编程-8253的写操作 • 写入计数器的控制字,规定其工作方式及相应功能; • 写入计数初值。 例如,选择0#计数器,工作于方式3,计数初值为1234H,BCD计数方式;2#计数器,工作方式2,计数初值为61H,采用二进制计数方式,设8253的端口地址为40~43H。其初始化编程如下: MOV AL,00110111B ;对0#计数器送工作方式字 OUT 43H,AL MOV AX,1234H ;送计数初值 OUT 40H,AL ;先送低8位 MOV AL,AH ;再送高8位 OUT 40H, AL MOV AL,10010100B ;对2#计数器送工作方式字 OUT 42H,AL MOV AL,61H ;送计数初值 OUT 42H,AL
8253的写/读操作及初始化编程-8253的读操作 • 直接读操作 • 锁存后读计数值 例如,要求读出并检查2#计数器的计数值是否为“55AAH”若非“55AAH”则等待再读,当为“55AAH”后程序可继续执行,则程序片断如下: COUNT EQV 040H ;设0#计数器的符号地址为040H ┆ LPCN:MOV AL,10000100B ;对2#计数器送锁存命令,仅使RL1,RL0=00 OUT COUNT+3,AL IN AL,COUNT+2 ;读2#计数器当前计数值 MOV AH,AL ;低8位暂存AH中 IN AL,COUNT+2 ;读高8位 XCHG AH,AL ;16位计数值存AX中 CMP AX,55AAH ;计数值写55AAH相比较 JNE LPCN ;若不相等则继续等待
计数启动方式 软件启动 硬件启动 GATE端为高电平 置入计数初值后的第2个CLK脉冲的下降沿 GATE端有一个上升沿 对应CLK脉冲的下降沿
写 CW WR (设计数初值为 ) 3 3. 8253的工作方式和时序 • 方式0——计数结束产生中断方式 CLK GATE (允许计数高电平) 写计数值 2 1 3 OUT 0 GATE 2 1 3 OUT 2 2 0 8253方式0的波形
软件启动,不自动重复计数。 装入初值后输出端变低电平, 计数结束输出高电平
例:设8253计数器通道0工作于方式0,用8位二进制计数,其计数值为50,二—十进制,则它的初始化程序段如下:例:设8253计数器通道0工作于方式0,用8位二进制计数,其计数值为50,二—十进制,则它的初始化程序段如下: MOV AL,11H ;设置控制字 OUT 43H,AL ;写入控制字寄存器 MOV AL,50 ;设置计数初值 OUT 40H,AL ;写入计数初值寄存器
CLK CW LSB WR GATE 开始计数 OUT 3 2 1 0 GATE OUT 3 2 1 3 2 1 0 不停计数 重新开始计数 3. 8253的工作方式和时序 • 方式1——外触发的单稳脉冲方式 方式1的波形
硬件启动,不自动重复计数 装入初值后输出端变高电平, 计数开始输出低电平,结束后又变高
例:设计数器通道1工作于方式1,按二进制计数,计数初值为40H,它的初始化程序段为:例:设计数器通道1工作于方式1,按二进制计数,计数初值为40H,它的初始化程序段为: MOV AL,62H ;工作方式控制字 OUT 43H,AL MOV AL,40H ;送计数初值 OUT 41H,AL
CLK WR GATE 高电平 1 OUT GATE OUT 3. 8253的工作方式和时序 • 方式2——计数分频工作方式 CW LSB 3 2 1 3 2 1 自动重复计数 禁止计数 3 3 2 1 重新开始计数 方式2的工作波形
软、硬件启动,自动重复计数。 装入初值后输出端变高电平, 计数到最后一个脉冲时输出低电平
例:设8253计数器0工作于方式2,按二进制计数,计数初值为0304H。例:设8253计数器0工作于方式2,按二进制计数,计数初值为0304H。 MOV AL,00110100B ;设控制字,通道0,先读/写高8位;再读写低8位,方式2,二进制。 OUT 43H,AL MOV AL,04H ;送计数值低字节 OUT 40H,AL MOV AL,03H OUT 40H,AL ;送计数值高字节
CLK WR GATE 高电平 1 OUT (N= ) 奇数 OUT (N= ) 偶数 3. 8253的工作方式和时序 • 方式3——方波发生器工作方式 CW LSB 2 1 5 4 3 5 4 3 自动重复计数 4 3 2 1 4 3 2 1 方式3的工作波形
软、硬件启动,自动重复计数 装入初值后输出端变高电平, 输出对称方波
例:设8253计数器2工作在方式3,按二—十进制计数,计数初值为4,则它的初始化程序段如下:例:设8253计数器2工作在方式3,按二—十进制计数,计数初值为4,则它的初始化程序段如下: MOV AL,10010111B ;计数器2,只读/写低8位,工作方式3,二~十进制 OUT 43H,AL ;控制字送控制字寄存器 MOV AL,4 ;送计数初值 OUT 42H,AL
CLK CW LSB WR GATE 1 高电平 OUT CLK 3 2 1 0 1 禁止计数 GATE 3 2 1 0 OUT 3 2 1 重新开始计数 3. 8253的工作方式和时序 • 方式4——软件触发选通方式 方式4的工作波形
软件启动,不自动重复计数。 装入初值后输出端变高电平, 计数结束输出一个CLK宽度的低电平
例:设8253计数器1工作于方式4,按二进制计数,计数初值为3,则初始化程序段为:例:设8253计数器1工作于方式4,按二进制计数,计数初值为3,则初始化程序段为: MOV AL,058H ;设置控制字寄存器 OUT 43H,AL ;送控制字 MOV AL,3 ;置计数初值 OUT 41H,AL ;送计数初值
CLK CW LSB WR GATE 开始计数 3 2 1 0 1 OUT 不停计数 GATE 3 2 1 0 OUT 3 2 1 重新开始计数 3. 8253的工作方式和时序 • 方式5——硬件触发选通方式 方式5的工作波形
硬件启动,不自动重复计数 波形与方式4相同
例:设8253的通道1工作于方式5,按二进制计数,计数初值为4000H,则它的初始化程序段为:例:设8253的通道1工作于方式5,按二进制计数,计数初值为4000H,则它的初始化程序段为: MOV AL,01101010B ;通道1,只读写高字节,方式5,二进制计数。 OUT 43H,AL MOV AL,40H OUT 41H,AL ;送计数初值
工作方式 GATE信号状态及影响 低电平或高电平变为低电平 上升沿 高电平 0 禁止计数 — 允许计数 1 — (1)开始计数 (2)下一个时钟后,输出为低电平 — 2 (1)禁止计数 (2)输出立即为高电平 开始计数 允许计数 3 (1)禁止计数 (2)输出立即为高电平 开始计数 允许计数 4 禁止计数 — 允许计数 5 开始计数 —
4. 8254与8253的区别 • 允许计数脉冲(CLK)频率范围不同 • 内部结构有所不同 • 8254提供了同时锁存三个计数器的当前计数值和状态信息的操作
5. 8253的应用 与系统的连接 芯片初始化 置计数初值 编程
与系统的连接示意 8253 DB D0~D7 IOW WR CLK GATE IOR RD 外设 OUT A1 A1 A0 A0 高位地址 译码器 CS
初始化程序流程 写入顺序: 可以计数器为单位,也可先写所有计数器控制字,再写入初值 写控制字 写计数值低8位 写计数值高8位
8253应用例 • 采用8253作定时/计数器,其接口地址为0120H~0123H。 • 要求计数器0每10ms输出一个CLK脉冲宽的负脉冲;用计数器1产生10KHz的连续方波信号,计数器2在定时5ms后产生输出高电平。输入8253的时钟频率为2MH。 • 画线路连接图,并编写初始化程序。
8253应用例 • 计算计数初值: CNT0:10ms/0.5us=20000 CNT1:2 MHz/10KHz=200 CNT2: 5ms/0.5us=10000 • 确定控制字: CNT0:方式2,16位计数值 CNT1:方式3,低8位计数值 CNT2:方式0, 16位计数值
8253应用例 +5V 8253 GATE0 GATE1 DB D0~D7 2MHz GATE2 IOW WR CLK0 IOR RD CLK1 CLK2 A1 A1 A0 A0 OUT0 OUT1 译码器 CS OUT2
8253应用例 初始化程序 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: ……
在IMB PC/XT机中采用8088CPU,系统板上使用了一片8253计数/定时器。8253的片选信号是由系统板上I/O译码电路LS74138中产生,与片内地址线A1,A0相配合。8253四个端口的地址范围为040H~05FH。编程时采用40H~43H作为四个端口(0#、1#、2#计数器及控制寄存器)的地址。其中1#计数器(CNT1)用于DRAM的定时刷新之用,不能再作它用。0#计数器用于为系统的电子钟提供时间基准,它的输出端作为中断源,接至8259的IR0中断申请端。2#计数器(CNT2)主要用来作为机内扬声器的音频信号源,可输出不同频率的方波信号。三个计数器的输入时钟脉冲频率均为1.19MHz。下面介绍三个计数器与系统的关系及其初始化程序。
1.0#计数器(CNT0) 用作系统时钟,端口地址40H GATE0端接+5V,处于常启状态。该计数器向系统日时钟提供定时中断。计数初值预置为0,以方式3工作。这样一来,OUT0以1.1931815MHz/65536=18.2Hz的频率输出一方波序列。它直接连到系统的中断控制器8259A的中断请求端IRQ0。换言之,0级中断每次间隔55ms或每秒中断18.2次,此中断请求用于维护系统的日历时钟。 系统上电时,BIOS中对0#计数器产生55ms方波定时中断的初始化程序如下: MOV AL,00110110B ;选0#计数器,方式3,写高低字节二进制计数 OUT 43H,AL MOV AL,0 ;预置计数初值=65536 OUT 40H,AL ;写低字节 OUT 40H,AL ;写高字节
2.1#计数器 用于对动态RAM的刷新控制,端口地址为41H。 GATE1端始终接+5V,处于常启状态。该计数器向DMA控制器定时提出动态存储器刷新请求。它选用方式2工作。计数初值预置为18。这样,OUT1以(1.1931816MHz/18=66.2878kHz)的频率输出一负脉冲序列,即OUT1每隔15.0857μs向DMA提出一次DMA请求DRQ0,由DMA的通道0完成存储器一行的刷新。系统上电时,BIOS对1#计数器产生15μs DMA请求信号的初始化程序为: MOV AL,01010100B ;选1#计数器,方式2,写低字节,二进制 OUT 43H,AL ;写控制字 MOV AL,18 ;预置计数初值=18=12H OUT 41H,AL ;写低字节
3.2#计数器 2#计数器端口地址为42H,该计数器用于控制发声。其输出OUT2通过与门和与非驱动器连接到扬声器。扬声器主要用于提示诊断机器错误和用户操作失误。但由于8253的可编程性以及发声的可控制性,利用这些特性可以编程控制PC扬声器唱出美妙的音乐。 发声系统受8255A的端口B的PB1和PB0控制,PB0控制2#计数器GATE端,高电平允许减1计数工作,PB1与OUT2共同接到与门的输入端,与门输出接到与非驱动器控制驱动扬声器,这样就可以用PB1、PB0(即端口61H的D1、D0)控制发声系统。现利用2#计数器产生1kHz方波,并驱动扬声器发声,程序编制如下:
BEEP: PROC NEAR MOV AL,10110110B ;2#计数器、方式3、16位二进制计数; OUT 43,AL MOV AX,1190 ;产生1kHz方波的初值; OUT 42H,AL ;写入低位字节 MOV AL,AH OUT 42H,AL ;写入高位字节 IN AL,61H ;从8255的B口(地址号=61H)读数据 MOV AH,AL ;暂存AH中 OR AL,00000011B ;使B口中PB0、PB1置1,其余位不变,打开GATE2和与门控制端输出,使扬声器发声 OUT 61H,AL SUB CX,CX ;CX初值清0,作为最大延时循环程序的次数,(10000H=65536)
LP1: LOOP LP1 ;延时程序 DEC BL ;BL中内容为发声持续时间的多少 JNZ LP1 ;BL=1发短音(约0.5s),BL=6发长音(约3s) MOV AL,AH ;取回8255状态 OUT 61H,AL ;恢复8255的B口值,停止发音(关扬声器) RET ;过程结束,返回
6. 8253的读操作 (1)读之前先停止计数 (2)读之前先送计数值锁存命令
7. PC/XT机中8253的应用 (1)计数器0:用于产生实时时钟信号 (2)计数器1:用于产生动态存储器刷新的地址更新信号 (3)计数器2:产生扬生器的发音驱动信号