第九章可编程定时 /计数器 8253
本章内容
§ 9.1 概 述
§ 9.2 可编程计数 /定时器接口芯片 8253
§ 9.1 概 述定时,定时打铃 \石英钟 \红绿灯 \动态存储器的刷新定时 \系统的日历时钟计数,生产线 \出租车计费 \点钞机定时信号软件定时不可编程硬件定时可编程硬件定时延迟子程序,包含一定的指令,设计者要求对这些指令的执行时间进行严密的计算或者精确的测试,以便确立延迟时间是否符合要求,时间长时用循环程序。
优点:不需添加硬件设备,只需编制有关延时程序缺点;增加 CPU的开销,时间越长,开销越大,
浪费 CPU资源。
1 软件定时单稳态延时电路或计数电路来实现延时或定时 器件容易老化,导致定时不准( RC决定脉冲宽度)
2.不可编程的硬件延时在实际中很少单独采用 1,2,而采用 1,2
结合的方法,并且将它们作成一个通用的器件,
这就是 3。
3.可编程硬件定时主要思路:计数器 /定时器开始工作,此时 CPU
不必过问它的工作,而可以去作别的工作。计数器 /定时器计数或定时达到确定值时,可以自动产生一个输出。
优点:计数或定时时,不占用 CPU,并且利用计数 /定时器产生中断信号,还可以建立多作业环境,提高了 CPU 的效率。
可编程计数器 /定时器具有两种功能:
一是作为计数器,设置好计数初值后,计数器被启动,便开始减 1计数,当减为 0时,输出一个信号;
二是作为定时器,设置好计数初值后,启动减 1计数,按定时常数不断的输出为时钟周期整数倍的定时间隔。
两者区别:计数时,减到 0之后,输出一个信号结束定时时,不断的产生信号两者都基于减 1
计数
§ 9.2 可编程计数 /定时器接口芯片 8253
1,8253的主要功能
① 3个独立的 16位计数通道;
② 每个计数器都可以单独使用,采用二进制或 BCD;
③ 计数器的计数速率可达 2MHz,最高达 2.6MHz;
④ 每个通道有 6种工作方式;
⑤ 输入 \出与 TTL兼容。
2,8253的内部结构
① 数据总线缓冲器
8位三态缓冲器,CPU通过数据总线缓冲器向 8253写入数据和命令或从数据总线缓冲器向
8253读取数据或状态信息。
三个基本功能:
a.向 8253写入确定工作方式的命令
b.向 8253计数器寄存器装入计数值
c.读出 8253的计数值
② 读写控制逻辑
8253内部操作的控制部分,接受来自系统总线的信息,产生控制整个芯片的控制信号。
a,A1A0—端口选择信号,由 CPU输入,选择 3个通道和控制端口。
b.RD和 WR——输入低电平有效。
RD —CPU读取 A1A0所选定通道内计数器的当前值
WR —CPU向 8253控制字寄存器或向计数器置计数初值
c.CS — 片选信号,低电平有效,通常由端口地址的高位地址译码形成。
③,通道 0~通道 1
三个独立通道,每个通道内有 16位减 1计数器,
每来一个计数脉冲计数器减 1,在 OUTi端输出一个计数结束信号,每个通道内有一个计数锁存器,
可以锁住当前计数值,供 CPU查询。
计数脉冲
①计数器 计数脉冲由 CLK引脚输入,计数周期可不固定,计数脉冲来自外部。
②定时器 计数脉冲要求来自系统的主时钟,
周期固定,CLK最高计数频率为 2.6MHz。
定时系数 = 要求定时时间时钟脉冲的周期
④,控制字寄存器用来存放 CPU写入 8253的方式选择控制字
3.8253的编程命令
①,8253的控制命令在 8253的初始化编程中,由 CPU向 8253的控制寄存器输出一个控制字,用来选择计数器,
设定工作方式和计数格式。
②,8253的设置初值命令控制字写入 8253后,设置初值命令,所谓设置初值就是设置计数的初始值,其初始值可以是 8位的,也可以是 16位,则要用两条输出指令完成计数初值决定,先送低字节,后送高字节。
8253初始化后进入工作状态,锁存命令是配合
CPU读计数器当前值而设置的,在读计数值时,
必须先用锁存命令,将当前计数值在输出锁存器中锁定,方可由 CPU读取,否则计数器的数值有可能正在改变过程中,可能读取一个不确定的结果。锁存命令一旦写入 8253,减法计数器计到某一个值,该值被锁定,输出锁存器跟随减法计数器,所以锁存器锁定的值就是计数器在同一时刻的值。
③,8253的锁存命令注意:当 CPU将锁定值用输入指令在读走时,锁存器自动失锁,又跟随减法计数器工作,在锁存和读出计数值的过程中,不影响计数进行。
6种方式,基本原则:
第一,控制字写 8253,控制逻辑复位,OUT
进入初始态。
第二,装入计数初值后,要经过一个时钟周期,计数器工作,时钟下降沿使计数器减 1计数,初值最大值是 0,二进制计数,0相当用于 216,BCD计数,0相当于 104
4.8253的工作方式第三,一般情况下,CLK上升沿,采样门控信号。
门控信号触发方式电平触发方式(上升沿检测)
边沿触发方式(边沿触发器检测门控信号的上升沿,计数器控制逻辑电路在每个时钟脉冲的上升沿采样边沿触发器,检测是否被外部门控脉冲触发过)
①,工作方式 0 — 计数结束中断
②,工作方式 1 — 可编程单脉冲发生器
③,工作方式 2 — 速率发生器
④,工作方式 3 — 方波发生器
⑤,工作方式 4 — 软件触发方式
⑥,工作方式 5 — 硬件触发方式
5.8253初始化举例例 1 设 8253通道 0工作于方式 0,用二进制计数,其初始值为 4,其初始化程序如下:
MOV AL,10H; 控制字( 0001000B)
OUT 43H,AL; 写入控制寄存器
MOV AL,4; 计数初值,只送低 8位
OUT 40H,AL; 初值送通道 0
设 8253端口地址为 40H~43H
例 2 设 8253通道 1,工作于方式 1,用 BCD码计数,
其初始值为 4000H,其初始化程序如下:
MOV AL,63H; 控制字( 01100011B)
OUT 43H,AL; 写入控制寄存器
MOV AL,40H; 计数初值,只送高 8位
OUT 41H,AL; 初值送通道 1
例 3 设 8253通道 2,工作于方式 2,用二进制计数,其初始值为 0304H,其初始化程序如下:
MOV AL,0B4H; 控制字( 10110100B)
OUT 43H,AL; 写入控制寄存器
MOV AL,04H;
OUT 42H,AL; 初值低 8位送通道 2
MOV AL,03H;
OUT 42H,04H; 初值高 8位送通道 2
某 8086系统中包含一个 8253芯片,要求完成如下功能:
( 1)利用通道 0完成对外部事件计数功能,计满
100次向 CPU发出中断请求。
( 2)利用通道 1产生频率为 1KHz的方波。
( 3)利用通道 2作标准时钟 。
6.8253应用举例
STT,MOV DX,FFFFH
MOV AL,10H ;定义通道 0工作在方式 0
OUT DX,AL
MOV DX,FFF9H
MOV AL,64H
OUT DX,AL; 给通道 0送计数值,只选低 8位
MOV DX,FFFFH
MOV AL,76H
OUT DX,AL;定义通道 1工作在方式 3
MOV DX,FFFBH
MOV AX,09C4H
OUT DX,AL
MOV AL,AH
OUT DX,AL;给通道 1送计数初值先送低 8位,后送高 8位
MOV DX,FFFFH
MOV AL,B1H
OUT DX,AL;定义通道 2工作在方式 0
MOV DX,FFFFH
MOV AX,1000H
OUT DX,AL
MOV AL,AH
OUT DX,AL;给通道 2送计数初值
MOV DX,FFFCH
MOV AL,13H
OUT DX,AL; ICW1设置;对 8259A初始化,
MOV DX,FFFEH
MOV AL,50H
OUT DX,AL; ICW2设置,通道 0和通道 2
的中断类型码分别为 50H和 51H
MOV AL,03
OUT DX,AL ; ICW4设置
MOV AL,0FAH
OUT DX,AL ; OCW1设置
STI
HH,HLT
JMP HH; CPU等中断从键盘输入一个 0~9的数,将该数乘以 10,
要求先输出该数,再输出该数乘 10后的结果。
关于上机
NAME EX1
PAGE 50,70
DAT SEGMENT DATA 'DAT'
BUFF DB 4 DUP(?)
DAT ENDS
STAC SEGMENT PARA STACK 'STA'
STA1 DB 100 DUP(?)
STAC ENDS
CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE,DS:DAT
ASSUME ES:STAC,ES:DAT
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX;返回 DOS操作系统
MOV AX,DAT
MOV DS,AX
LEA SI,BUFF
CALL P1
CALL P2
CALL P3;主函数; 输入子函数
P1 PROC
RE,MOV AH,1
INT 21H
CMP AL,30H
JC RE
CMP AL,3AH
JNC RE;判断输入是否 0~9?
AND AL,OFH
MOV [SI],AL;屏蔽高四位
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
RET
P1 ENDP;回车换行
MOV AL,[SI]
SHL AL,1
MOV BL,AL
MOV CL,2
SHL AL,CL
ADD AL,BL;乘 10子函数; 乘 10子函数
P2 PROC
MOV AH,0
MOV BL,10
DIV BL
ADD AH,30H
ADD AL,30H
MOV [SI],AL
MOV
[SI+1],AH
RET
P2 ENDP;乘积转换为 ASCII码
P3 PROC
MOV DL,[SI]
MOV AH,2
INT 21H
MOV DL,[SI+1]
MOV AH,2
INT 21H
RET
P3 ENDP; 显示子函数;显示十位;显示个位
RET
CODE ENDS
END START;代码段结束