340 likes | 550 Views
第 7 章 可编程定时器 / 计数器 8253-5 ( PIT ). 又叫“可编程间隔定时器”,可实现延时控制、定时和计数。 计数和定时信号的产生可采用三种方法: 1. 、硬件的计数器 / 定时器,不占用 CPU 的时间,可多任务并行工作。 1 )固定的数字逻辑电路实现:通用性和灵活性差; 2 )可编程的:灵活性好,较通用。 2 、软件实现:通用性和灵活性好。. 7.1 可编程定时器 / 计数器的工作原理. 如图 7-1 , 控制寄存器(可写) 计数初值寄存器 CR (可写) 计数执行单元 CE 计数输出锁存器 OL (可读) 状态寄存器(可读)
E N D
第7章 可编程定时器/计数器8253-5(PIT) • 又叫“可编程间隔定时器”,可实现延时控制、定时和计数。 • 计数和定时信号的产生可采用三种方法: • 1.、硬件的计数器/定时器,不占用CPU的时间,可多任务并行工作。 • 1)固定的数字逻辑电路实现:通用性和灵活性差; • 2)可编程的:灵活性好,较通用。 • 2、软件实现:通用性和灵活性好。
7.1 可编程定时器/计数器的工作原理 • 如图7-1, • 控制寄存器(可写) • 计数初值寄存器CR(可写) • 计数执行单元CE • 计数输出锁存器OL(可读) • 状态寄存器(可读) • 计数器:由设置的计数初值,在门控脉冲GATE控制下,对CLK脉冲开始减1计数,当减到0,输出一个信号OUT,并置状态寄存器,供查询用。此信号可启动I/O操作或作为中断请求。
定时器:由设置的计数初值,在门控脉冲GATE控制下,对CLK脉冲开始减1计数,当减到0,输出一个脉冲,再从初值减1计数,连续输出一系列定时间隔的脉冲,间隔Tout=Tclk*计数初值N (或Fout=Fclk/N)。 • 通过控制寄存器可设置多种工作方式。
7.2 8253-5的结构和功能 • 计数速率可达2.6MHz,可编程设置6种工作方式. • 适用于: • 1、方波频率发生器 • 2、分频器 • 3、实时时钟 • 4、事件计数器 • 5、程控单脉冲发生器
结构 • 结构框图及引脚排列如图7-2, • 1、与CPU的连接信号: • D7~D0:双向数据线。 • RD-、WR-:读、写信号 • CS-:片选信号,由A2~A15译码产生 • A0、A1:片内寄存器寻址,选择3个计数器和控制寄存器。 • 2、结构 • 1)3个计数器:结构相同、工作独立,工作方式由控制字设定。
包括:16位的计数初值寄存器CR(可写)、计数执行单元CE(减法计数寄存器)和计数输出锁存器OL(可读);8位的控制寄存器。包括:16位的计数初值寄存器CR(可写)、计数执行单元CE(减法计数寄存器)和计数输出锁存器OL(可读);8位的控制寄存器。 • 有三条信号线: • 计数输入CLK:输入定时基准和计数脉冲; • 输出信号OUT:指示计数完成,输出脉冲波形; • 门控输入GATE:允许/禁止计数、启动/停止计数。起输出信号的同步作用(参见表7-6) • 2)数据总线缓冲器:写控制字、装入计数初值和读取计数值。
3)读写逻辑:有A1、A0、CS-、RD-、WR-组合决定功能,见表7-1。3)读写逻辑:有A1、A0、CS-、RD-、WR-组合决定功能,见表7-1。 • 4)控制字(工作方式)寄存器:由A1A0=11选中。规定第一次写入为控制字,此后写入为命令。 • 3、控制字寄存器的格式:见表7-2~7-5
7.3 8253-5的工作方式 • 一、规定: • 1)控制字写入时,立即复位; • 2)写计数初值后,到下一个时钟下降沿才开始计数; • 3)对于给定的方式,对GATE的触发方式有具体的规定: • 电平触发:在时钟脉冲上升沿对门控信号电平进行采样,GATE至少保持一个Tclk宽度;
上升沿触发:门控脉冲上升沿使边沿触发器置位,在下一个时钟脉冲上升沿被采样,GATE可很窄,可正脉冲也可负脉冲。上升沿触发:门控脉冲上升沿使边沿触发器置位,在下一个时钟脉冲上升沿被采样,GATE可很窄,可正脉冲也可负脉冲。 • 4)OUT波形都是在CLK的下降沿产生电平的变化。 • 二、六种方式 设计数初值N=4,如图... • 1、方式0——计数结束中断 • GATE=0,计数器停止计数,GATE=1,重新开始计数,直到计数结束,OUT为高电平,再次启动要重新输入计数值,GATE不影响OUT电平。
2、方式1——硬件可重触发单稳态方式 • 基本和方式0相似,但输出单稳态是用GATE上升沿重触发的,OUT低电平宽度等于计数时间(NTclk)。 • 3、方式2——速率发生器(分频方式) • 输出的负脉冲宽度等于Tclk(简写为T),频率是CLK的N分之一,GATE为低电平时停止计数。 • 4、方式3——方波方式 • 输出的负脉冲宽度等于NT/2,频率是CLK的N分之一,GATE为低电平时停止计数。
若输入计数初值时偶数,则OUT在计数前一半为高,后一半为低电平;若输入计数初值时偶数,则OUT在计数前一半为高,后一半为低电平; • 若输入计数初值时奇数,则OUT在(N+1)T/2前为高,后(N-1)T/2为低电平。 • 5、方式4——软件触发选通方式 • 基本同方式0,但计数结束输出一负脉冲,宽度为T,每次靠软件设置计数初值才能计数,GATE为低电平时停止计数,但OUT不变。 • 6、方式5——硬件触发选通方式 • 基本同方式1,但计数结束输出一负脉冲,宽度为T,用软件设置一次计数初值后,每次要靠门控脉冲上升沿选通才能计数。
7.4 8253-5的初始化 • 一、写入方式控制字 • 用OUT指令,地址:CS-=0,A1A0=11 • 二、写入计数初值 • 按控制字中的RL1RL0的规定写,可8位或16位,若为16位,要分两条输出指令;且要满足BCD位的规定。 • 用OUT指令,地址:CS-=0, • A1A0=00 计数器0 • 01 计数器1 • 10 计数器2
三、读计数值 有两种方法: • 1、直接读计数器端口 • 先用GATE无效或阻断时钟输入,以保证稳定读出。 • 用IN指令,地址:同二。 • 2、锁存计数器的当前计数值 • 1)锁存命令:RL1RL0=00,用OUT指令,地址:A1A0=11。 • 2)读出,用IN指令,同二。 • 注意:必须读完控制字中RL1RL0规定的字节数,才能保证下次的正确读写。
7.5 8253-5的应用举例 • 例:8253在IBM-PC机中的应用 • 在系统中作定时信号用。 • 1、硬件连接 逻辑图见图7-5 • D7~D0、RD-、WR-,CS-接Y2,A1A0片内寄存器寻址,端口地址:040H~043H • 3个计数器的CLK的频率为1.193186MHz,是PCLK经二分频后产生的. • GATE0和GATE1=1(常启状态),GATE2由8255的B口(PB0允许发声)控制开启。 • OUT0——8259的日时钟中断IRQ0;
OUT1——D触发器的时钟,二分频后锁存器的输出作8237的DREQ0;OUT1——D触发器的时钟,二分频后锁存器的输出作8237的DREQ0; • OUT2——8255的PC5(代表音调),同时经75477到8255的PC4(代表发声数据),供CPU检测用。 • 2、各计数器的功能: • (1)计数器0:产生系统日时钟信号,工作于方式3,计数初值为0,控制字为36H,OUT0的输出频率为1193181.6/65536=18.2Hz的方波脉冲序列,即每隔1/18.2=55ms产生一次中断请求,计时并时钟显示.
(2)计数器1:产生动态存储器刷新请求,工作于方式2,计数初值为18(12H),控制字为54H,(2)计数器1:产生动态存储器刷新请求,工作于方式2,计数初值为18(12H),控制字为54H, • OUT1的输出频率=1193181.6/18=66.2878KHz的负脉冲序列, 即每隔1/66287.8=15.08us向8237A的DREQ0请求,进行一行的刷新操作. • (3)计数器2:为扬声器提供约900Hz的方波信号,工作于方式3,计数初值为0533H(1331),控制字为B6H,OUT2输出频率为1193181.6/1331=894Hz的方波信号. • 3、编程步骤 • 1)初始化:写入方式控制字; • 写入计数初值; • 2)控制程序
(1)对计数器0的初始化程序 • MOV AL,36H • OUT 43H,AL • MOV AL,0 • OUT 40H,AL • OUT 40H,AL • (2)对计数器1的初始化程序 • MOV AL,54H • OUT 43H,AL • MOV AL,12H(或18D) • OUT 41H,AL
(3)对计数器2的初始化程序 • MOV AL,B6H ;若要1KHz的方波信号,计数 • OUT 43H,AL ;初值为多少?如何编程? • MOV AX,0533H • OUT 42H,AL • MOV AL,AH • OUT 42H,AL • (4)控制程序 使PB1PB0=11 • IN AL,61H • MOV AH,AL • OR AL,03H • OUT 61H,AL
例:三个计数通道组合应用 • 应用电路如图7-6所示。设置如下: • 通道0:方式2,计数初值为1000D • 通道1:方式1,计数初值为500D • 通道2:方式3,计数初值为2000D • 外接时钟CLK为2.5MHz • 画出CLK0~2,GATE0~2及OUT0~2波形,计算OUT的重复周期和时间,并写出初始化程序。
解题分析 • (1)fCLK0=fCLK2=fCLK= 2.5MHz • T=1/f=400ns • 通道2:方式3,计数初值为2000,输出方波。TOUT2=2000T=800us • 通道1:方式1,计数初值为500,输出单脉冲。因 TCLK1= TOUT2 • TOUT1=500 TCLK1 =400000us • 通道0:方式2,计数初值为1000,输出一串负脉冲。TOUT2=1000T=400us,但持续时间t为TOUT1 =400000us=400ms • OUT为OUT0的反相波形,如图7-7 • TOUT =400ms,tOUT=400us
(2)初始化程序:设端口地址为80H~83H • MOV AL,00110101B;通道0,方式2 • OUT 83H,AL • MOV AL,00H ;分两次送 • OUT 80H,AL • MOV AL,10H • OUT 80H,AL • MOV AL,01110011B;通道1,方式1 • OUT 83H,AL • MOV AL,00H ;分两次送 • OUT 81H,AL • MOV AL,05H • OUT 81H,AL
MOV AL,10110111B;通道2,方式3 • OUT 83H,AL • MOV AL,00H • OUT 82H,AL • MOV AL,20H • OUT 82H,AL • …… • (3)讨论 • 若为二进制计数,如何改?
例:8253在实时控制系统中的应用 • 如图7-8,作采样周期发生器。计数器输出作定时中断信号IRQ2,再连到8259的IR2上。 • 1、采样周期发生器的设计原理 • 采样周期一般在0.5s~几十s。 • 而对一个计数器,用1.19MHZ的CLK,N取最大65536时,OUT周期也只有约55ms。 • 故要多个计数器串联使用。前级作分频器用。
1、硬件连接 • 如图7-8所示。fCLK0=2*fPCLK • IBM-PC机的CPU是8088。与CPU的连接: • 数据线:DB7~DB0——D7~D0 • 地址线:AB0——A0,AB1——A1 • AB9~AB2=10001100——CS • 端口地址为230H~233H • 控制线:IOR——RD • IOW——WR • 8253连接:GATE0、1——+5V,计数器0输出OUT0作CLK1,PCLK二分频后输入CLK0,OUT1——IRQ2
2、软件编程 • 分析:中断类型码:0AH • 中断服务程序的程序名为RTIME • 中断向量地址=0A*4=0028H • 计数器0:工作方式2,N=0(二进制低字节=256) • 计数器1:工作方式3,N=TIME(二进制16位) • (1)8253初始化程序 • MOV DX,233H ;初始化计数器0 • MOV AL,00010100B • OUT DX,AL • MOV DX,230H • MOV AL,0 • OUT DX,AL
MOV DX,233H;初始化计数器1 • MOV AL,01110110B • OUT DX,AL • MOV DX,231H • MOV AL,BYTE PTR TIME;8位分别送 • MOV DX,AL • MOV AL,BYTE PTR TIME+1 • OUT DX,AL • (2)中断服务程序首地址送中断向量表 • MOV DI,28H • CLD • MOV AX,OFFSET RTIME
STOSW • MOV AX,SEG RTIME • STOSW • …...
8253定时/计数器实验 • 编程将8253定时器0设置为方式3(方波),定时器1设置为方式2(分频),定时器0输出的脉冲作为定时器1的时钟输入。定时器2设置为方式2(分频),用示波器观察各对应引脚之间的波形关系。