450 likes | 596 Views
第 7 章 可编程 定时 / 计数器. 7.1 可编程 定时 / 计数器 8253. 掌握 : 引线功能及计数启动方法 6 种工作方式及其输出波形 8253 的使用 : 芯片与系统的连接 芯片的初始化编程. 定时 / 计数器的用途. 可以实现 定时 与 计数 两个功能,可用于 系统时钟 DRAM 刷新定时 定时采样 实时控制 脉冲的计数. 定时. 计数. 如何实现定时?. 软件方法: 用一段程序实现延时 利用 程序循环 延迟指定的时间 缺点: CPU 占用率?延时精度?兼容? 硬件方法: 定时 / 计数器电路
E N D
7.1 可编程定时/计数器8253 掌握: • 引线功能及计数启动方法 • 6种工作方式及其输出波形 • 8253的使用: • 芯片与系统的连接 • 芯片的初始化编程
定时/计数器的用途 • 可以实现定时与计数两个功能,可用于 • 系统时钟 • DRAM刷新定时 • 定时采样 • 实时控制 • 脉冲的计数 • . . . . . . 定时 计数
如何实现定时? • 软件方法:用一段程序实现延时 • 利用程序循环延迟指定的时间 • 缺点:CPU占用率?延时精度?兼容? • 硬件方法:定时/计数器电路 • 利用脉冲计数在设定的时间输出定时信号 ● 8253是一种硬件定时/计数器芯片
定时:标准频率CLK/计数 累加或递减(计算频率:周期内计数)。 例 减法CNTER:先计数值预置计数值寄存器减法计数器,计数脉冲经CLK输入端时使计数器进行减法计数。计数器的当前内容--计数器输出寄存器CPU不会干扰计数过程(缓冲)。计数值=零的状态OUT引脚和状态寄存器的某一位(查询式I/O或中断式I/O来检测零值状态)。有到零停计/不停两种。 可硬件( GATE输入端)或软件控制定时/计数器的动作。 写 2个地址 定时/计数器基本工作原理 写 定时/计数脉冲 1 读 门控信号 对输入CLK信号(脉冲)加法或减法计数 读 输出信号 东南大学 5 典型T/C框图
一、外部引线及内部结构 • 8253概貌 • 3个16位的定时/计数器(通道) • 24引脚双列直插式 • 最高计数频率2MHz • TTL电平兼容 • 单电源+5V供电
外部引线及内部结构 CLK0 GATE0 OUT0 DB D7-D0 通道0 A1 A0 A1 8253 CLK1 GATE1 OUT1 A0 通道1 WR IOW IOR 片选信号 RD CLK2 GATE2 OUT2 CS 通道2
外部引线及内部结构 连接微机系统端的主要引线: • D7~D0 • CS • RD • WR • A1,A0 • 用于选择四个编址部件之一 A1 A0选 择 0 0 计数通道0 0 1 计数通道1 1 0 计数通道2 1 1 控制寄存器
外部引线及内部结构 计数通道的主要引线(每通道均相同): • CLKn时钟脉冲输入,计数器的计时基准。 • GATEn 门控信号输入,控制计数器的启停。 • OUTn计数器输出信号,不同工作方式下 产生不同波形。 (n = 0~2)
编址部件0 编址部件1 编址部件3 编址部件2 定时与计数有何区别? 8253的内部结构 16位\减1 16位\减1 8位 16位\减1
编程结构—程序员的观点 • 计数器(3个)——包括 • 控制寄存器(1个)—— 存放控制命令字(8位)(只写) • 占用4个地址— 3个计数器,1个控制寄存器 16位初值寄存器(只写) 16位计数寄存器 (减1计数器) 16位锁存寄存器(只读) (当前计数初值)
定时/计数的工作过程 1. 设置8253的工作方式(6种) 2. 设置计数初值到初值寄存器 3. 设置GATE门控信号,把‘门’打开,使CLK可通过之送入计数寄存器计数 4. 第一个CLK信号使初值寄存器的内容置入计数寄存器 5. 以后每来一个CLK信号,计数寄存器减1 6. 减到0时,OUT端输出一特殊波形的信号 注:不同的工作方式,GATE门控信号的开关‘门’的信号可能不同。
二、计数启动方式 程序指令启动————软件启动 外部电路信号启动——硬件启动 软件启动过程 硬件启动过程 GATE端保持为高电平 写入计数初值后的第2个 CLK脉冲的下降沿开始计数 软件启动过程 硬件启动过程 GATE端有一个上升沿 对应CLK脉冲的下降沿开始计数 GATE端有一个上升沿 对应CLK脉冲的下降沿开始计数
三、工作方式 • 方式0——计数结束中断 • 方式1——可重复触发的单稳态触发器 • 方式2——频率发生器 • 方式3——方波发生器 • 方式4——软件触发选通 • 方式5——硬件触发选通 一次工作:计数器工作一次,计数值减到0,即停止 工作状态 循环工作:计数器循环工作,计数值减到0,将计 数初值复制到计数器,继续工作
软件启动,不自动重复计数。 装入初值后OUT端变低电平, 计数结束OUT输出高电平。 (计数结束中断) 方式0
硬件启动,不自动重复计数。 装入初值后OUT端变高电平,计数开始OUT端变为低电平,计数结束后又变高电平。 方式1 (单稳态触发器)
软、硬件启动,自动重复计数。 装入初值后OUT端变高电平,计数到最后一个CLK时OUT输出负脉冲,并连续重复此过程。 方式2 (频率发生器) (软启动)
软、硬件启动,自动重复计数。 装入初值后OUT端变高电平,然后OUT连续输出方波 方式3 前 N/2或(N+1)/2 个CLK,OUT为高,后N/2或(N-1)/2 个CLK, OUT为低。 (方波发生器)
软件启动,不自动重复计数。 装入初值后输出端变高电平, 计数结束输出一个CLK宽度的负脉冲 (软件触发选通) 方式4
硬件启动,不自动重复计数。 OUT端波形与方式4相同 方式5 (硬件触发选通)
各种工作方式特点 • 方式0(计数结束中断) • 计数过程中,GATE端应保持高电平。 • 每写入一次初值计数一个周期,然后停止计数。 • OUT端输出是一个约(N+1)TCLK宽度的负脉冲。 • 计数过程中可随时修改初值重新开始计数。 • 方式1(单稳态触发器) • 门控信号GATE端的跳变触发计数,可重复触发。 • 若下一次GATE上升沿提前到达,则OUT端负脉冲拉宽为两次计数过程之和。 • 计数过程中写入新初值不影响本次计数。
各种工作方式特点 • 方式2(频率发生器) • GATE为计数的控制信号:GATE变低计数停止,再变高时的下一个CLK下降沿,从初值开始重新计数。 • 每个计数周期结束时(减到1时),OUT端输出一个TCLK宽度的负脉冲。 • 计数过程自动重复进行。 • 计数过程中修改初值不影响本轮计数过程。 • 方式3(方波发生器) • OUT输出方波,前半周期为高,后半周期为低。 • 计数过程中修改初值不影响本半轮计数过程。 • 其余的与方式2 类似。
各种工作方式特点 • 方式4(软件触发选通) • 计数过程中,GATE端应保持高电平。 • 每写入一次初值,计数一个周期,然后停止计数。 • 每个计数周期结束时(减到0时),OUT端输出一个TCLK宽度的负脉冲。 • 计数过程中修改初值不影响本轮计数过程。 • 方式5(硬件触发选通) • 写入初值时,GATE端应保持低电平。 • GATE每出现一次正脉冲,计数一个周期,然后停止计数。 • 每个计数周期结束时(减到0时),OUT端输出一个TCLK宽度的负脉冲。 • 计数过程中修改初值不影响本轮计数过程。
8253编程:6种工作模式 Mode0 软件触发,到0不自动重复(计数输出) Mode4 软件触发, 选通信号(负脉冲) Mode1 硬(GATE)触发单稳,不自动重复启动 Mode5 硬件触发, 选通信号(负脉冲) Mode2、3 软硬触发,自动重装(分频/方波) Gate控制 控制字 CW 计数初值 CLK输入 Counter OUT输出
四、控制字 • 用于确定各计数器的工作方式。 • 8253必须先初始化才能正常工作。 • 每个计数器都必须初始化一次。 • CPU通过OUT指令把控制字写入控制寄存器 OUT DX,AL OUT n,AL SC1 SC0 RW1 RW0 M2 M1 M0 BCD 1--计数值为BCD码格式 0--计数值为二进制格式 M2 M1 M0模式选择 0 0 0 模式0 0 0 1 模式1 1 0 模式2 1 1 模式3 1 0 0 模式4 1 0 1 模式5 ? 0 0---对计数器进行锁存 0 1---只读/写低8位字节 1 0---只读/写高8位字节 1 1---先读/写低8位字节, 再读/写高8位字节. 0 0---选计数器0 0 1---选计数器1 1 0---选计数器2 1 1---无意义
例: 使1号定时器,工作在方式0,计数初值0FF5h,二进制计数。试写出8253初始化程序段。 8253端口地址:40H,41H,42H,43H MOV AL,01110000B ;1号定时器,方式0 OUT 43H,AL MOV AX,0FF5H OUT 41H,AL ; 1号数据口 MOV AL,AH OUT 41H,AL
五、8253的应用 • 与系统的连接 • 设置工作方式 • 置计数初值 编程
与系统的连接示意图 CLK0 DB D0~D7 GATE0 D0~D7 OUT0 IOW WR 8253 CLK1 IOR 3组 RD GATE1 低位地址 A1-A0 A1 OUT1 A1 A0 A0 CLK2 高位地址 A15-A2 GATE2 译码器 CS OUT2 (决定8253的基地址) 8253占用4个接口地址: 计数器0 计数器1 计数器2 控制寄存器 线选法 全译码 部分译码
初始化程序流程 • 写入顺序: • 可按计数器分别写入控制字和初值。 • 也可先写所有计数器控制字,再写入它们的初值 写控制字 写计数值低8位 非必须 * 写计数值高8位
8253应用举例 • 采用8253作定时/计数器,其接口地址为0120H~0123H (计数器0、1、2及控制寄存器) • 输入8253的时钟频率为2MHz -----T=1/f=0.5us • 计数器0: 每10ms输出1个CLK脉冲宽的负脉冲--方式2 计数器1:产生10KHz的连续方波信号 --方式3 计数器2:启动计数5ms后OUT输出高电平 --方式0 • 画线路连接图,并编写初始化程序。
8253应用举例(续) SC1 SC0 RW1 RW0 M2 M1 M0 BCD • 确定计数初值 CNT0 (口地址0120H) :10ms/0.5us =20000 CNT1 (口地址0121H) : 2MHz/10KHz = 200 CNT2 (口地址0122H) : 5ms/0.5us =10000 • 确定控制字(口地址0123H) CNT0:方式2,16位计数值 00 11 010 0 B = 34 H CNT1:方式3,低 8位计数值 01 01 011 0 B = 56 H CNT2:方式0, 16位计数值 10 11 000 0 B = B0 H
8253应用举例(续) 软件启动 +5V 线路连接图: 8253 GATE0 GATE1 DB D0~D7 2MHz GATE2 WR IOW A15~A2 ? CLK0 IOR RD CLK1 CLK2 A1 A1 OUT0 A0 A0 OUT1 译码器 CS OUT2 0120 H ~ 0123H = 0000 0001 0010 0000B ~ 0000 0001 00100011 B
8253应用举例 初始化程序 MOV DX, 0123H MOV AL, 34H OUT DX, AL MOV DX, 0120H MOV AX, 20000 OUT DX, AL MOV AL, AH OUT DX, AL CNT0: CNT1: …… CNT2: …… 请同学们写出其它程序!
8253-5的应用举例 (一)用8253-5监视一个生产流水线 图中工件从光源与光敏电阻之间通过时,在晶体管的发射极上会产生一个脉冲,此脉冲作为8253计算器0的计数输入CLK0,当通道0计数满50后,由OUT0输出负脉冲,经反相后作为8259A的一个中断请求信号,在中断服务程序中,启动8253通道1计算器工作,由OUT1连续输出2000Hz的方波,持续5秒后停止输出。
设:8253的端口地址为40H、41H、42H和43H,8255A的端口地址为80H、81H、82H和83H。设:8253的端口地址为40H、41H、42H和43H,8255A的端口地址为80H、81H、82H和83H。 主程序为: MOV AL,15H ;通道0控制字00010101 OUT 43H,AL;通道0工作在方式2,BCD计数 MOV AL,50H ;计数初值 OUT 40H,AL STI ;开中断 LOP:HLT ;等待中断 JMP LOP
中断服务程序为: MOV AL,01H;通道1的GATE1置1,启动计数 OUT 80H,AL MOV AL,77H;通道1控制字01110111 OUT 43H,AL;通道0工作在方式3,BCD计数 MOV AL,50H OUT 41H,AL;计数初值低位 MOV AL,12H OUT 41H,AL;计数初值高位 CALL DL5S ;延时5S MOV AL,00H OUT 80H,AL;通道1的GATE1置0,停止计数 IRET
工作原理分析 ⑴计数器0用来产生实时日时钟信号,工作于方式3,计数初值为0,采用二进制计数方式,输出端OUT0作为中断请求信号IRQ0。 ⑵计数器1用来产生动态存储器刷新操作的定时控制信号。它工作于方式2,计数初值为18,OUT1端输出一个负脉冲序列,其脉冲周期约为18÷1.1931816MHz=15.08(μs)。 ⑶计数器2用于为系统中的扬声器发声时提供一个约为900Hz的方波信号。它也工作于方式3,计数初值为0533H(1331),GATE2接入一个来自系统板上8255A的PB0,作为扬声器发声时间的控制信号 。
2. 8253的初始化程序段 ⑴对计数器0的初始化程序: MOV AL,00110110B OUT 43H,AL MOV AL,0 OUT 40H,AL OUT 40H,AL ⑵对计数器1的初始化程序: MOV AL, 01010100B OUT 43H,AL MOV AL,18 OUT 41H,AL
⑶对计数器2的初始化程序: MOV AL,10110110B OUT 43H,AL MOV AX,0533H OUT 42H,AL MOV AL,AH OUT 42H,AL IN AL,61H MOV AH,AL OR AL,03H OUT 61H,AL
(三)8253在实时控制系统中的应用 将8253的两个计数器串联起来,使其中的一个计数器作为定时器,当分频器使用,将其OUT输出信号作为另一个计数器的CLK脉冲信号;而另一计数器只起计数作用,其OUT输出端作为中断请求信号。
MOV DX,233H MOV AL,00010100B OUT DX,AL MOV AL,230H MOV AL,00H OUT DX,AL MOV DX,233H MOV AL,01110110B OUT DX,AL MOV DX,231H
MOV AL,BYTE PTR TIME OUT DX,AL MOV AL,BYTE PTR TIME + 1 OUT DX,AL MOV DI,28H MOV AX,OFFSET RTIME CLD STOSW MOV AX,CS STOSW …
8253小结 • 包含3个16位计数器通道 • 4个编址部件:CNT0/1/2和控制寄存器 • 每个计数器通道工作前必须初始化: -- 控制字CW和计数初值n • 6种工作方式 -- 每种工作方式:启动方式、输出波形、是否可重复计数等各不相同