本文主要是介绍【汇编与接口】定时器总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 定时与计数
- 微机系统中的定时类型
- 外部定时方法及硬件定时器
-
- 可编程定时/计数器82C54A
- 82C54A的外部连接特性与内部结构
- 外部连接特性
- 内部结构
- 82C54A的命令字
- 方式命令
- 锁存命令
- 读回命令(8253不具有这种功能)
- 状态字
- 82C54的工作方式与功能
- 0方式:事件计数器
- 1方式:可编程单稳态触发器
- 2方式:分频器
- 3方式:方波发生器
- 4方式:软件触发选通
- 5方式:硬件触发选通
- 82C54的输出基本波形
- 82C54的启动方式与停止方式
- 小结:6种工作方式的比较
- 82C54A的计数初值计算及装入
- 82C54A的初始化
- 定时/计数器的应用
-
定时与计数
-
定时
① 一天24小时的计时,称为日时钟。
② 在监测系统中,对被测点的定时取样。
③ 在读键盘时,要去抖动。一般采用延迟一段时间(10ms-20ms)后再去读。
-
计数
① 对零件和产品的计数。
② 对大桥和高速公路上车流量的统计,等等。
-
定时与计数的关系
定时的本质是计数,这里‘数’是时间单位,如s,ms,us,ns。
因此,定时与计数本质上都是计数,但它们所计的‘数’来源是不同的。
微机系统中的定时类型
- 定时系统
(1)内部定时:
- 产生运算器、控制器等CPU内部的控制时序
- 是CPU硬件决定,固定不变,小ns级。
(2)外部定时:
- 外设在实现某种功能时所需要的时序。如Centronics,A/D。
- 可由硬件(外部定时器)实现,也可由软件(延时程序)实现。
(3)外部定时和内部定时是相互独立的两个定时系统。
- 时需配合
- 内部定时固定不变,外部定时随外设而变
- 对于微机系统,必须要依据计算机内部定时的规定来设计外部定时机构,使其既符合计算机内部定时的规定,又满足外部设备的工作时序要求,叫作时序配合。
外部定时方法及硬件定时器
定时方法
- 软件定时
是利用CPU内部定时机构,运用软件编程去循环执行一段程序而产生的等待延时。
- 优点:不需要增加硬件设备,只需编制相应的延时程序以备调用。
- 缺点:①CPU执行延时程序增加了CPU的时间开销。延时时间越长,CPU的效率也越低。
②受CPU主频的影响,通用性差
- 硬件定时
采用外部定时器进行定时。
- 优点:①是独立于CPU的定时,不占用CPU时间,定时时间可长可短,使用灵活。
②定时准确,定时时间不受主机频率影响,具有通用性,得到广泛的使用 - 缺点需要有硬件的支持
外部硬件定时器
- 不可编程定时器
- 采用中小规模集成电路构成的定时电路,常见的定时器件有单稳触发器等,利用外接电容、电阻的组合,可实现一定范围的定时,电路简单。
- 连接好后,定时间隔和范围不便改变,不灵活。
- 可编程定时器
- 定时间隔和范围可由程序设定或改变,使用灵活。
- 如Intel 82c54A。
可编程定时/计数器82C54A
定时原理
定时器三要素:
① 稳定、准确的震荡频率。
② 控制定时开始。
③ 定时时间到后输出的波型。
82C54A的外部连接特性与内部结构
外部连接特性
(1)面向CPU的信号线:
- 数据线:D0-D7
- 地址线:CS(片选信号)
A0、A1(片内端口地址) - 读/写线:RD(I/O读),WR(I/O写)
(2)面向I/O设备的信号线
- 时钟信号:CLK0-CLK2(输入),用于计数脉冲
- 门控信号:GATE0-GATE2(输入),用于定时/计数的启动/停止、允许/禁止
- 输出信号:OUT0-OUT2(输出),用于定时/计数完成后的输出
面向CPU的信号线
- 数据总线D0-D7:为三态输入输出线。用于将8253与系统数据总线相连。
- 片选线CS:为输入信号,低电平有效。当为低电平时,CPU选中82C54,并可以对82C54进行读/写操作;当为高电平时,CPU没有选中82C54。CS由CPU输出的地址码经译码产生。
- 读信号RD:为输入信号,低电平有效。
- 写信号WR:为输入信号,低电平有效。
- 地址线A1,A0:这两根线接到系统地址总线的A1,A0上,用于片内寻址。
面向I/O设备的信号线
6. 计数器时钟信号CLK:CLK为输入的计时脉冲信号。
7. 计数器门控选通信号GATE:为输入的计时启动、允许/禁止信号。
8. 数器输出信号OUT:为定时到的输出信号。
内部结构
82C54内部模块:6个模块,结构如下图示
各组成部分的含义:
- 数据总线缓冲器:它是一个三态、双向8位寄存器,用于将8253与系统数据总线D0-D7 相连。
- 读/写逻辑:用于读/写控制和片选。
- 控制命令寄存器:它接收CPU送来的控制字。
- 计数器:3个独立的16位计数器(计数通道),其内部结构完全相同,均由16位计数初值寄存器、减法计数器、以及当前计数器锁存器三部分组成
- 计数初值寄存器(16位)
用于存放计数初值(定时常数、分频系数),其长度为16位,故最大计数值为65536(64KB)。在初始化时同减1计数器的初值一起装入。计数初值寄存器的计数初值,在计数过程中保持不变。 - 减1计数器(16位)
用于进行减1计数操作,每来一个时钟脉冲,它就作减1运算,直至将计数初值减为0 - 当前计数值锁存器(16位)
用于锁存减1计数器的内容,以供读出和查询。由于减法寄存器的内容不断变化,需先锁存才能读出。
82C54A的命令字
82C55A有3个命令字。3个命令字是:方式命令、锁存命令和读回命令。其中方式命令是必须的,其它两个命令根据需要使用。
注意:这三个命令字使用同一个端口,按方式命令在先,其它命令在后的循序写入端口。
方式命令
- 初始化定时/计数器82C54A
- 选定计数通道及其工作方式、读/写字节的顺序以及计数码制
例:使用计数器T1工作在4方式,向通道写时间常数3F8H,二进制计数。设307H是命令寄存器的地址,305H是定时器1的地址,则初始化程序段为:
MOV DX,307H ;命令口
MOV AL,01111000B ;方式字
OUT DX,AL
MOV DX,305H ;T1数据口
MOV AL,0F8H ;低8位计数值
OUT DX,AL
MOV AL,03H ;高8位计数值
OUT DX,AL
锁存命令
将减1寄存器的内容锁存到输出寄存器中,以供CPU读取。
锁存命令格式:
读当前计数值为什么要先锁存计数值?
减1计数器是16位的,而定时器的数据线是8位的,必须读两次才能读出16位数据,在两次读操作时可能使减1计数器的内容发生变化。
例:要求在计数器通道1的计数过程中读取当前的计数值,并把读取的计数值装入到AX寄存器中。设4个端口的地址为:304H(通道0),305H(通道1),306H(通道2),307H(命令寄存器)
MOV DX,307H
MOV AL,0100XXXXB ;锁存计数器1
OUT DX,AL
MOV DX,305H
IN AL,DX ;读低字节
MOV BL,AL
IN AL,DX ;读高字节
MOV AH,AL
MOV AL,BL
读回命令(8253不具有这种功能)
读回命令与前面的锁存命令不同,它既能锁存计数值又能锁存状态信息,而且一条读回命令可以锁存3个计数通道的当前计数值与状态。
读回命令格式:
注意:读回命令只是一个锁存的功能,要读回计数值和状态还要发一条读命令。
含义:
D1,D2,D3用于选择3个计数器
1:选中,0:未选中;
D4,D5用于选择读当前状态还是当前计数值
0:要读取,1:不读取
例:
- 若读取计数器2的当前计数值,
则读回命令=11011000B - 若读取计数器2的当前状态,
则读回命令=11101000B - 若读取计数器2的当前计数值和状态,
则读回命令=11001000B - 读取三个计数器的当前计数值和状态,
则读回命令=11001110B
状态字
状态字中的低6位D0-D5与方式字中的低6位是相同的;
D6位计数器的输出状态,1:输出引脚为逻辑1,0:输出引脚为逻辑0
D7表示是否有空计数值,1:空计数值,0:计数值有效
82C54的工作方式与功能
82C54的工作方式:有6种工作方式,不同的工作方式主要体现在输出波形、计数过程、初值装入,启动方式、停止方式、以及典型应用上。
0方式:事件计数器
- 软件启动:写入计数初值,启动计数器开始计数。OUT变为低电平,并维持直至减法计数器减到0
- 计数结束,OUT产生上升沿(可用于申请中断),停止工作,维持高电平直至再次写入新的计数值
- 门控信号GATE用于开放和禁止计数。当GATE=1时允许计数。当GATE=0时,禁止计数
- 计数过程中可随时修改初值重新开始计数
例:使计数器T1工作在0方式,进行16位二进制计数,计数初值的高低字节分别为0AH和35H。其初始化程序段为
MOV DX,307H ;命令口
MOV AL,01110000B ;方式字
OUT DX,AL
MOV DX,305H ;T1数据口
MOV AL,35H ;计数值低字节
OUT DX,AL
MOV AL,0AH ;计数值高字节
OUT DX,AL
1方式:可编程单稳态触发器
- 硬件启动:GATE出现0->1的跳变后开始计数,OUT变为低电平
- OUT输出的负脉冲,其宽度可由程序控制(通过计数初值)
- 在写入控制字和初始化计数值之后,计数器处于待命状态
- 在一个单稳脉冲期间,将一个新计数值写入计数器,当前单稳态不受什么影响
- 计数结束,自动停止,OUT变为高电平,并维持直至GATE再次启动
例:使计数器T2 工作在1方式,进行8位二进制计数,并设计数初值的低8位为0E0H。
MOV DX,307H ;命令口
MOV AL,10010010B ;方式字
OUT DX,AL
MOV DX,306H ;T2数据口
MOV AL,0E0H ;低8位计数值
OUT DX,AL
2方式:分频器
- 软件启动:写入计数初值后,开始计数
- 计数器计数期间,输出OUT为高电平,计数器减到1时,输出一个CLK宽度的负脉冲,并自动重新装入原计数初值,开始下一轮计数,如此反复
- 门控信号GATE用于开放和禁止计数。当GATE=1时允许计数。当GATE=0时,禁止计数
- 分频系数是计数初值。改变计数初值,即可获得不同频率的OUT脉冲
- 计数过程中修改初值不影响本轮计数过程
- 计数结束,不能自动停止,需外加停止信号
例:使计数器T0 工作在2方式,进行16位二进制计数,计数初值0100H。其初始化程序段为
MOV DX,307H ;命令口
MOV AL,00110100B ;方式字
OUT DX,AL
MOV DX,304H ;T0数据口
MOV AL,00H ;低8位计数值
OUT DX,AL
MOV AL,01H ;高8位计数值
OUT DX,AL
3方式:方波发生器
- 软件启动:写入计数初值后,开始启动计数
- 产生占空比为1:1或接近1:1的连续方波,方波的周期等于计数初值×时钟脉冲周期。前 N/2或(N+1)/2 个CLK,OUT为高,后N/2或(N-1)/2 个CLK,OUT为低。
- 计数结束后,自动重装,继续下一轮计数。
- 计数过程中修改初值不影响本轮计数过程。
- 门控信号GATE用于开放和禁止计数。当GATE=1时允许计数。当GATE=0时,禁止计数。
- 计数结束,不能自动停止,需外加停止信号。
4方式:软件触发选通
- 软件启动:写入计数初值,开始计数,OUT输1
- 单负脉冲发生器,不自动重复计数
- 减1计数到0时,OUT输出一个宽度为一个时钟周期的负脉冲,并停止工作,直至再次写入一个新的计数值
- 计数过程中修改初值不影响本轮计数过程
- 门控信号GATE用于开放和禁止计数。当GATE=1时允许计数。当GATE=0时,禁止计数。
5方式:硬件触发选通
- 硬件启动:写入计数初值后,由GATE启动计数,OUT输出1
- 单负脉冲发生器,不自动重复计数
- 减1计数到0时,OUT输出一个宽度为一个时钟周期的负脉冲,并停止工作
- 计数过程中修改初值不影响本轮计数过程
82C54的输出基本波形
82C54的启动方式与停止方式
- 启动方式
- 软件启动
- GATE=1时,计数初值写入减1计数器,就开始计数,计数过程中要求GATE保持为1。
- 由OUT指令实现
- 82C54A的0、2、3、4方式采用软件启动
- 硬件启动
- 计数初值已经写到减1计数器中,由GATE信号的上升沿开始计数
- 由外部信号控制
- 82C54A的1、5方式采用硬件启动
- 停止方式
- 强制停止:对于重复计数/定时过程,自动重装初值,计数反复进行,不能自动停止。可通过置GATE=0来中止计数。如2方式和3方式。
- 自动停止:对单次计数或定时过程,一旦计数完毕则自动停止,无需外加中止信号。如0、1、4、5方式。如要求暂时中止计数,可置GATE=0。
小结:6种工作方式的比较
- 方式0和方式1:共同点是:输出OUT波形类似,OUT在计数开始时为0,并在计数过程中保持不变;在计数结束时变为1。并可作为中断请求信号,无自动重装载。不同点是:GATE对计数的影响及启动计数器的触发信号不同。0方式靠软件启动,1方式靠硬件启动。
- 2方式和3方式:共同点是:具有自动再装入的能力(减到0时自动装入)。所以,OUT可输出连续的波形。不同点在于:方式2在计数过程中输出高电平,每当减到1时输出一个宽度为1个TCKL的负脉冲。方式3在计数过程中,输出1/2初值的正负方波。
- 方式4和方式5:相同点是:OUT输出波形相同,在计数过程中为高电平,在计数结束后输出一负脉冲,并无自动装入的能力。不同点在于:两种方式的计数触发方式不同,方式4靠软件启动(写入计数初值),方式5靠硬件启动(GATE的上升沿)。
82C54A的计数初值计算及装入
同时装入初值寄存器和减法计数器,产生不同的定时。
- 计数初值的计算
2. 计数初值的装入
- 8位时间常数可一次装入;16位时间常数分两次装入,先低后高
- 重装:2方式和3方式具有自动重装载能力,其它方式需人工重装计数初值
- 计数初值的范围
- 二进制码的范围是0000H-0FFFFH,BCD码的范围是0000-9999
- 0000为最大值,因为82C54是先减1后判断,所以0000代表二进制数216=65536和十进制数的104=10000
- 实际应用中,若计数初值大于单个寄存器的范围,则可将两个或多个计数器串联起来
82C54A的初始化
- 初始化是根据用户的设计要求,利用方式命令写一段程序,以确定使用82C54A的哪个计数器通道、哪种工作方式、哪一种读写顺序及哪种计数码制
- 若同时使用两个或三个通道,则需分别写两个或三个初始化程序段(因为三个通道独立),这些程序段使用同一个方式命令端口
- 初始化内容:
- 设置方式命令字
- 设置计数初始值
定时/计数器的应用
两种情况:
- 利用系统配置的定时/计数器资源。
- 利用用户扩展的定时/计数器。
两者不同之处:
- 端口地址不同。前者由系统指定,用户不能更改;后者由用户指定,用户可以更改。
- 前者的工作方式、通道具体用途,已通过系统初始化确定,固定不变;后者的工作方式、通道用途,没有确定,用户设计时安排,使用灵活。
在微机系统中82C54:
- 通道0用于日时钟的中断请求。
- 通道1用于DRAM的刷新请求。
- 通道2用于扬声器的发声。
系统的应用配置如下:
例题
例1:利用计数通道2产生896HZ的方波使扬声器发声。
初值的计算:
T=1.19318MHZ/896HZ=1331=533H
MOV AL,10110110B ;初始化方式字
OUT 43H,AL
MOV AX,533H ;初值为533H
OUT 42H,AL ;先低后高
MOV AL,AH
OUT 42H,AL
例2:计数通道0每55ms产生一次中断请求
初值的计算:
T=1.19318MHZ/(1/55ms)≈65536
MOV AL,00110110B ;初始化方式字
OUT 43H,AL
MOV AX,0H ;初值为00H(最大值)
OUT 40H,AL ;先低后高
MOV AL, AH
OUT 40H,AL
例3:计数通道1每15us请求一次DMA传送
初值的计算:
T=1.19318MHZ/(1/15us )≈12H
MOV AL,01010100B ;初始化方式字
OUT 43H,AL
MOV AL,12H ;初值为12H
OUT 41H,AL
这篇关于【汇编与接口】定时器总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!