310 likes | 551 Views
第 11 章 定时器和计数器. 11.1 定时计数器 8253 概述 11.2 定时计数器 8253 的控制字 11.3 定时计数器 8253 的工作方式 11.4 定时计数器 8253 的初始化 11.5 定时计数器 8253 的应用. 11.1 定时计数器 8253 概述. 微机系统中,常常需要定时中断、定时检测、定时扫描,实际应用中,常常要求对外部事件计数, IBM PC 微机系列时钟计时、 DRAM 刷新的定时、扬声器音调控制等都需要定时控制技术。
E N D
第11章 定时器和计数器 11.1 定时计数器8253概述 11.2 定时计数器8253的控制字 11.3 定时计数器8253的工作方式 11.4 定时计数器8253的初始化 11.5 定时计数器8253的应用
11.1 定时计数器 8253 概述 微机系统中,常常需要定时中断、定时检测、定时扫描,实际应用中,常常要求对外部事件计数,IBM PC 微机系列时钟计时、DRAM 刷新的定时、扬声器音调控制等都需要定时控制技术。 定时控制有 3 种方法:软件定时、硬件定时和可编程的定时器。 (1)软件定时:利用微处理器执行一段延时程序来实现,因为执行程序的每条指令本身就需要时间,那么一段程序的执行时间是可计算的固定值,通过正确地挑选指令、安排循环次数就能实现,这样显然降低了CPU 的利用率。 (2)硬件定时:采用集成电路的数字电路分频器,将系统时钟分频来产生所需的定时信号,也可用简易的定时电路,通过改变电阻、电容来控制时间。 (3)可编程的定时器:采用硬件软件相结合的办法,用可编程的定时芯片构成灵活、方便的定时电路。
Intel 8253 定时器,通过记录高精度晶体振荡信号个数, 输出准确的时钟间隔,定时器内部的计数电路,如果记录外设 提供的随机性的脉冲信号,就能反映脉冲的个数,因此又称为 计数器。 11.1.1 定时计数器 8253 的内部结构 定时计数器 8253 有 3 个独立的 16 位计数器通道,由 24 根引脚组成芯片,内部结构见图11.1。 1.数据总线缓冲器 8 位双向三态缓冲器,连接 8253 与 CPU 数据总线,CPU 过它向 8253 进行读写操作,初始化编程时,CPU 写入控制字, 向某通道写入计数值,从某通道读出计数值。 2.读写控制电路 接收 CPU 输入的控制信号,对整个芯片的工作进行控制。
图11.1 3.控制寄存器 接收 CPU 写入的方式控制字,对 3 个计数器的工作方式进行定义,它只能接收 CPU 的写入信息,不能读出。 4.计数器 8253 的 3 个独立的计数器通道,计数器0、计数器1、计数器2,结构完全相同,每个计数器内有一个 16 位的预制寄存器,存放初值;一个 16 位的输出锁存器,在写入了锁存命令时,锁定计数器的当前值;一个 16 位的能进行预制值的减法计数器,其值不断递减,计到0 时,从 OUT 端输出一个脉冲信号。
11.1.2 定时计数器 8253 芯片的引脚 8253 由 24 根引脚组成的双列直插式芯片,图11.2。 (1)数据线 D7-D0 :双向三态,连接 CPU 的数据总线。 (2)读信号:输入线,低电平有效,输入有效的低电平时,CPU 从 8253 中读取数据。 (3)写信号 :输入线,低电平有效,输入有效的低电平时,CPU 可向 8253 写入数据、或写入命令字。 (4)片内寄存器选择信号A1、A0 :输入线,对 8253 内部的 3 个 计数器、1 个控制寄存器进行选择,见表 11.1 。 (5)片选信号 :输入线,低电平有效,输入有效的低电平时选中 8253。 (6)电源线 VCC:接 +5 V 的电源。地线 GND 。
图11.2 (7)输入脉冲信号 CLK:计数器对这个引脚的脉冲数目进行计数,通道每收到 1 个脉冲,通道的计数器值减 1。 (8)门控制信号 GATE :输入有效的高电平时,允许计数器计数;输入无效的低电平时,计数器停止计数工作。 (9)输出信号 OUT:当通道的计数器计到 0 时,通道对应此引脚向外输出一个脉冲,用于实现控制,波形取决于定义的工作方式。 返回本章目录
11.2 定时计数器 8253 的控制字 8253 在初始化时,CPU 向其内部的控制字寄存器,写入一 个控制字,规定 8253 的工作方式,格式见11.3。 (1)D0 数制选择位:D0= 0时,采用二进制;D0= 1时,采 用十进制。 (2)D3D2D1 工作方式位:每个通道有 6 种工作方式; D3D2D1= 000时,方式0;D3D2D1= 001时,方式1;D3D2D1 = × 10 时,方式2;D3D2D1=×11时,方式3;D3D2D1= 100时,方式 4;D3D2D1 = 101时,方式5。 (3)D5D4 数据读/写格式:D5D4= 00时,计数器锁存输入的 命令;D5D4= 01时,8 位计数只读写低字节;D5D4= 10时,只读 写高字节;D5D4= 11时,16 位计数先读写高字节,后读写低 节。
见11.3 (4)D7D6 计数器选择位:3 个通道共用一个控制寄存器,地址为 A1A0 = 11,用此决定写入的控制字是哪个通道的控制字;D7D6 = 00 时,为 通道0,选择 计数器0;D7D6 = 01时,为 通道1,选择 计数器1;D7D6 = 10 时,为 通道2,选择 计数器2。 返回本章目录
11.3 定时计数器 8253 的工作方式 8253 有 6 种工作方式,由方式控制字来决定,过程为: (1)向 8253 写入方式控制字: 设定工作方式。 (2)向 8253 的预制寄存器: 设定计数初值。 (3)对于方式1、方式5 :需要硬件启动,通道的 GATE 引脚 送一个上升沿,其它方式,不需要启动,直接进入下一步。 (4)CLK 引脚输入一个下降沿:将预制寄存器的初值存入到 减1计数器中。 (5)计数器开始计数: 每当 CLK 出现一个下降沿,同时 GATE出现一个高电平,减 1 计数器就减 1。
(6)通道的 计数器减到 0 时 :一次计数过程结束,OUT 端口输出一个脉冲。对于 方式0、方式1、方式4、方式5,一般情况下计数器停止工作,当提供硬件启动信号、或重新设定初值计数器才重新开始工作;对于 方式2、方式3 计数器计数到 0 后,预制寄存器自动将初值送到 减1计数器,进入下次计数过程,通过写入控制字来停止计数器的工作。
1.方式0:计数结束中断,图 11.4 当一个计数器通道设置为 方式0 后( 上升沿),通道对应的 OUT 输出低电平,写入 计数初值后,计数器开始计数,OUT 仍输出低电平,以后 CLK 引脚每输入一个时钟下降沿,计数器减 1,直到 计数器 计数0 时,OUT 输出高电平,作为中断请求信号,OUT 的高电平保持到下一次计数开始。 GATE 输入信号可用来控制计数过程,高电平时,才允许计数,低电平时,暂停计数,GATE 升为高电平时,接着重新计数。计数期间,给计数器装入新的计数初值,则按新值重新开始计数过程。
2.方式1:可编程序的单拍脉冲,见图 11.5。 当 CPU 写入控制字( 上升沿),OUT 输出高电平,CPU 继续写入初值,等待 GATE 控制启动脉冲信号,若高电平启动后,GATE 立即变为低电平,OUT 输出低电平,计数器开始计数,直到 计数为 0,OUT 输出一个脉冲信号,发出一次中断信号,这次计数过程完毕。 3.方式2:频率发生器,见图 11.6 当 CPU 输入 方式2 控制字后,OUT 为高电平,写入初始值,计数器开始对时钟个数计数,OUT 保持高电平,计数到 1 时,OUT 变为低电平,经过 1 个 CLK 脉冲,又变为高电平,且重新开始计数,如此反复连续工作,OUT 的输出,将时钟脉冲分频。
4.方式3:方波发生器,图 11.7 方式3 与 方式2 类似,方式3 一半高电平,一半低电平,因此,方式3 的 OUT 输出一个方波。CPU 设置控制字,写入初值,计数器开始计数,到一半时,OUT 输出由高电平变为低电平,继续 计到 0,由低电平变为高电平,重新开始计数,反复进行。 5.方式4:软件触发选通信号,图 11.8 写入 方式4 后,OUT 输出高电平,写入计数值开始计数(即软件启动);计数器 计到0 时,OUT 输出低电平,经过一个 CLK 时钟后,OUT又变为高电平,计数器停止工作;本次计数完成。重新输入计数值后,才开始下一次的计数。
6.方式5:硬件触发选通信号,见图 11.9 写入 方式5 后,OUT 输出高电平,写入计数值,GATE 上升沿启动计数过程(硬件启动),计数到 0 后,OUT 输出低电平,经过一个 CLK 脉冲,OUT 恢复高电平,停止计数。 返回本章目录
11.4 定时计数器 8235 的初始化 1.初始化的步骤 (1)写入通道控制字,规定通道的工作方式。 (2)写入计数值。若规定只写入计数值的低 8 位,高 8 位 自动置 0。若规定只写入计数值的高 8位,低 8位自动置 0。若 是 16 位的计数值,先写入低 8 位,后写入高 8 位。 例如:定时计数器 8235 的通道1,工作方式为1,按二十 进计数,计数值为 5060H,端口地址为 F8-FBH,进行初始化。 程序段为: MOV AL,73H ;73=01110011,通道0方式1BCD码 OUT 0FBH,AL ; 写入方式控制字,对照图11.3 MOV AL,60H ;先写入低8位计数值 OUT 0FBH,AL MOV AL,50H ;后写入高8位计数值 OUT 0FBH,AL
2.锁存的方法 8253 在计数过程中,CPU 可用输入指令,读取 8253 的任一通道的当前计数 16位值,分两次来读取进行锁存,瞬间计数值会发生变化 (1)利用GATE 信号使计数过程暂停,然后再读取。 (2)向 8253 控制字地址送一个计数锁存命令,然后再读取 例如:读取 通道2 的计数值 程序段为: MOV AL,80H ;计数器1的锁存命令,对照图11.3 OUT 0FBH,AL ;写入控制字寄存器中 IN AL,0F9H ;读取低8位 MOV CL,AL ;读出的值存入CL中 IN AL,0F9H ;读取高8位 MOV CH,AL ;读出的值存入CH中 需要说明,计数值锁存命令是控制字的一种特殊形式,D7D6 决定通道号,D5D4= 00,锁存标志低 4 位全 0,因此,通道0 的锁存命令为 00H,通道1 的锁存命令为 40H,通道2 的锁存命令为 80H。 返回本章目录
11 . 5 定时计数器 8253 的应用 PC 微机用一片 8253,图 11.10 通道0 用于日时钟计时,通道1 进行DRAM 动态刷新,通道 2 控制扬声器发声。计数器0、计数器1、计数器2 的地址分别是 40H、41H、42H,控制字的端口地址43H,每个通道的 CLK 输入为 1.19318MHZ,GATE门控制总为高电平启动状态, OUT0 的输出脉冲用于时钟计时,OUT1 的输出脉冲用于DRAM 的动态刷新,OUT2 的输出脉冲用于控制扬声器发声,。 1.计数器0 实现定时中断 MOV AL,36H ;00110110B,计数器 0 ,工作方式 3, 二进制 OUT 43H,AL ;写入方式控制字 MOV AL,0 ;计数 65536 OUT 40H,AL ;先写入低 8位 OUT 40H,AL ;后写入高 8位
OUT0 的输出频率为 1.19318MHZ / 65536 = 18.206HZ 的方波,GATE0 接 +5,OUT0 输出方波不断产生,连接到 IRQ0 用于中断请求,即每秒产生 18.206 次中断,实现日时钟计时功能,18 次中断计时 1 秒。 2.计数器1 实现 DRAM 动态刷新,图 11.10 PC 机要求 2ms 内对 DRAM 芯片的 128 行,进行全部刷新,因此,2ms/128 = 15.6μS 发一次刷新信号,将 计数器2 设置成 方式2,计数初值 18,每隔 18×0.838μS =15.084μS 产生一次刷新脉冲(1个 CLK脉冲 =1/1.19318MHZ = 0.838μS),就能满足要求。 初始化程序段为: MOV AL,54H ; 01010100B,计数器1,工作方式2 ,二进制 OUT 43H,AL ;写入方式控制字 MOV AL,18H ;计数值 OUT 41H,AL ;写入计数值
3.计数器2实现扬声器发声,图 11.10 计数器2 的 OUT2 输出连接扬声器,只要输出一定频率的方波,滤波后产生正弦波,能推动扬声器发声,并行接口 PB1 位控制发声,此时,计数器2 不工作,OUT2 输出高电平,PB0 位通过 GATE2 控制 计数器2 的计数过程,输出 OUT2 信号产生扬声器发声的声调,子程序为: BEEP PROC MOV AL,10110110B ;计数器2,工作方式3,二进制 OUT 43H,AL ;先低后高写入16位计数值 MOV AX,0533H ; 1.19318MHZ/1331D= 896HZ OUT 42H,AL MOV AL,AH
OUT 42H,AL ;高8位 IN AL,61H ;读并行接口8255B MOV AH,AL OR AL,03H ;8255的PB0、PB1置1 OUT 61H,AL ;PB1的端口地址61H SUB CX,CX DELAY:LOOP DELAY ;延时 DEC BL ;发声长短 JNZ DELAY MOV AL,AH ;恢复8255B口 OUT 61H,AL RET BEEP ENDP 本章结束 返回目录
表11.1 8253 端口选择 返回5
图11.1 定时计数器8253内部结构 返回3 返回4
图11.2 定时计数器8253的引脚图 返回5 返回6
图 11.3 定时计数器8253的控制字格式 返回7 返回8 返回15 返回16
图11.4 工作方式0波形图 返回11
图11.5工作方式1波形图 返回12
图11.6工作方式2频率发生器波形图 返回12
图11.7工作方式方波发生器波形图 返回13
图11.8工作方式4软件触发选通图 返回13
图11.9工作方式5硬件触发选通图 返回14
图11.10 8253在PC微机应用 返回17 返回18 返回19