【汇编与接口】定时器总结

定时与计数

  1. 定时
    ① 一天24小时的计时,称为日时钟。
    ② 在监测系统中,对被测点的定时取样。
    ③ 在读键盘时,要去抖动。一般采用延迟一段时间(10ms-20ms)后再去读。

  2. 计数
    ① 对零件和产品的计数。
    ② 对大桥和高速公路上车流量的统计,等等。

  3. 定时与计数的关系
    定时的本质是计数,这里‘数’是时间单位,如s,ms,us,ns。
    因此,定时与计数本质上都是计数,但它们所计的‘数’来源是不同的。

微机系统中的定时类型

  1. 定时系统

(1)内部定时:

  • 产生运算器、控制器等CPU内部的控制时序
  • 是CPU硬件决定,固定不变,小ns级。

(2)外部定时:

  • 外设在实现某种功能时所需要的时序。如Centronics,A/D。
  • 可由硬件(外部定时器)实现,也可由软件(延时程序)实现。

(3)外部定时和内部定时是相互独立的两个定时系统。

  1. 时需配合
  • 内部定时固定不变,外部定时随外设而变
  • 对于微机系统,必须要依据计算机内部定时的规定来设计外部定时机构,使其既符合计算机内部定时的规定,又满足外部设备的工作时序要求,叫作时序配合。

外部定时方法及硬件定时器

定时方法

  1. 软件定时
    是利用CPU内部定时机构,运用软件编程去循环执行一段程序而产生的等待延时。
  • 优点:不需要增加硬件设备,只需编制相应的延时程序以备调用。
  • 缺点:①CPU执行延时程序增加了CPU的时间开销。延时时间越长,CPU的效率也越低。
    ②受CPU主频的影响,通用性差
  1. 硬件定时
    采用外部定时器进行定时。
  • 优点:①是独立于CPU的定时,不占用CPU时间,定时时间可长可短,使用灵活。
    ②定时准确,定时时间不受主机频率影响,具有通用性,得到广泛的使用
  • 缺点需要有硬件的支持

外部硬件定时器

  1. 不可编程定时器
  • 采用中小规模集成电路构成的定时电路,常见的定时器件有单稳触发器等,利用外接电容、电阻的组合,可实现一定范围的定时,电路简单。
  • 连接好后,定时间隔和范围不便改变,不灵活。
  1. 可编程定时器
  • 定时间隔和范围可由程序设定或改变,使用灵活。
  • 如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的信号线

  1. 数据总线D0-D7:为三态输入输出线。用于将8253与系统数据总线相连。
  2. 片选线CS:为输入信号,低电平有效。当为低电平时,CPU选中82C54,并可以对82C54进行读/写操作;当为高电平时,CPU没有选中82C54。CS由CPU输出的地址码经译码产生。
  3. 读信号RD:为输入信号,低电平有效。
  4. 写信号WR:为输入信号,低电平有效。
  5. 地址线A1,A0:这两根线接到系统地址总线的A1,A0上,用于片内寻址。

面向I/O设备的信号线
6. 计数器时钟信号CLK:CLK为输入的计时脉冲信号。
7. 计数器门控选通信号GATE:为输入的计时启动、允许/禁止信号。
8. 数器输出信号OUT:为定时到的输出信号。

内部结构

82C54内部模块:6个模块,结构如下图示

各组成部分的含义:

  1. 数据总线缓冲器:它是一个三态、双向8位寄存器,用于将8253与系统数据总线D0-D7 相连。
  2. 读/写逻辑:用于读/写控制和片选。
  3. 控制命令寄存器:它接收CPU送来的控制字。
  4. 计数器:3个独立的16位计数器(计数通道),其内部结构完全相同,均由16位计数初值寄存器减法计数器、以及当前计数器锁存器三部分组成

  1. 计数初值寄存器(16位)
    用于存放计数初值(定时常数、分频系数),其长度为16位,故最大计数值为65536(64KB)。在初始化时同减1计数器的初值一起装入。计数初值寄存器的计数初值,在计数过程中保持不变
  2. 减1计数器(16位)
    用于进行减1计数操作,每来一个时钟脉冲,它就作减1运算,直至将计数初值减为0
  3. 当前计数值锁存器(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的启动方式与停止方式

  1. 启动方式
  • 软件启动
    • GATE=1时,计数初值写入减1计数器,就开始计数,计数过程中要求GATE保持为1。
    • 由OUT指令实现
    • 82C54A的0、2、3、4方式采用软件启动
  • 硬件启动
    • 计数初值已经写到减1计数器中,由GATE信号的上升沿开始计数
    • 由外部信号控制
    • 82C54A的1、5方式采用硬件启动
  1. 停止方式
  • 强制停止:对于重复计数/定时过程,自动重装初值,计数反复进行,不能自动停止。可通过置GATE=0来中止计数。如2方式和3方式。
  • 自动停止:对单次计数或定时过程,一旦计数完毕则自动停止,无需外加中止信号。如0、1、4、5方式。如要求暂时中止计数,可置GATE=0。

小结:6种工作方式的比较

  1. 方式0和方式1:共同点是:输出OUT波形类似,OUT在计数开始时为0,并在计数过程中保持不变;在计数结束时变为1。并可作为中断请求信号,无自动重装载。不同点是:GATE对计数的影响及启动计数器的触发信号不同。0方式靠软件启动,1方式靠硬件启动。
  2. 2方式和3方式:共同点是:具有自动再装入的能力(减到0时自动装入)。所以,OUT可输出连续的波形。不同点在于:方式2在计数过程中输出高电平,每当减到1时输出一个宽度为1个TCKL的负脉冲。方式3在计数过程中,输出1/2初值的正负方波。
  3. 方式4和方式5:相同点是:OUT输出波形相同,在计数过程中为高电平,在计数结束后输出一负脉冲,并无自动装入的能力。不同点在于:两种方式的计数触发方式不同,方式4靠软件启动(写入计数初值),方式5靠硬件启动(GATE的上升沿)。

82C54A的计数初值计算及装入

同时装入初值寄存器和减法计数器,产生不同的定时。

  1. 计数初值的计算


2. 计数初值的装入

  • 8位时间常数可一次装入;16位时间常数分两次装入,先低后高
  • 重装:2方式和3方式具有自动重装载能力,其它方式需人工重装计数初值
  1. 计数初值的范围
  • 二进制码的范围是0000H-0FFFFH,BCD码的范围是0000-9999
  • 0000为最大值,因为82C54是先减1后判断,所以0000代表二进制数216=65536和十进制数的104=10000
  • 实际应用中,若计数初值大于单个寄存器的范围,则可将两个或多个计数器串联起来

82C54A的初始化

  • 初始化是根据用户的设计要求,利用方式命令写一段程序,以确定使用82C54A的哪个计数器通道、哪种工作方式、哪一种读写顺序及哪种计数码制
  • 若同时使用两个或三个通道,则需分别写两个或三个初始化程序段(因为三个通道独立),这些程序段使用同一个方式命令端口
  • 初始化内容:
  1. 设置方式命令字
  2. 设置计数初始值

定时/计数器的应用

两种情况:

  • 利用系统配置的定时/计数器资源。
  • 利用用户扩展的定时/计数器。

两者不同之处:

  • 端口地址不同。前者由系统指定,用户不能更改;后者由用户指定,用户可以更改。
  • 前者的工作方式、通道具体用途,已通过系统初始化确定,固定不变;后者的工作方式、通道用途,没有确定,用户设计时安排,使用灵活。

在微机系统中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		

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用汇编语言编写定时器的示例程序: ``` .MODEL SMALL ; 定义模型为小模型 .STACK 100H ; 定义栈大小为100H ; 定义常量 TIMER_COUNT EQU 1000 ; 定时器计数值,每1ms中断一次 .DATA ; 定义数据段,这里没有定义任何变量 .CODE ; 定义代码段 MAIN PROC MOV AX, @DATA ; 将数据段地址赋值给AX寄存器 MOV DS, AX ; 将数据段地址赋值给DS寄存器 ; 初始化定时器 MOV AL, 00110110B ; 0011表示选择通道0,0110表示工作模式3(square wave generator) OUT 043H, AL ; 将控制字写入端口43H MOV AX, TIMER_COUNT ; 将定时器计数值赋值给AX寄存器 OUT 040H, AL ; 将AX寄存器的值写入端口40H MOV AL, AH ; 将高8位赋值给低8位 OUT 040H, AL ; 将AL寄存器的值写入端口40H ; 开启中断 MOV AL, 00000011B ; 00000011表示开启中断 OUT 021H, AL ; 将控制字写入端口21H ; 无限循环 LOOP: NOP ; 等待中断 JMP LOOP ; 跳转到LOOP标签,继续循环 ; 程序结束 MOV AH, 4CH ; AH寄存器为4C表示程序结束 INT 21H ; 调用21H中断,结束程序 MAIN ENDP END MAIN ``` 上述程序使用了8253芯片的通道0,工作模式3(square wave generator),每1ms会产生一次中断,可以根据需要修改定时器计数值进行调整。程序中通过向端口40H和端口43H写入控制字和计数值,来初始化8253芯片。同时,通过向端口21H写入控制字,开启8259A中断控制器的中断。在无限循环中,使用NOP指令等待中断,中断时跳转到LOOP标签,继续循环。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值