可编程接口技术 定时器/计数器接口(重难点)
关于定时:
- 内部定时:计算机本身运行的时间基准,如时钟发生器。
- 外部定时:CPU与外设之间或外设与外设之间的时序配合。
- 定时方法:
- 软件定时。无需硬件,占用CPU,不准确。
- 不可编程的硬件定时。不占用CPU,不灵活。
- 可编程的硬件定时。软、硬结合。
一,8253 的结构和功能
引脚图:
1,计数器
-
三个计数器完全相同,各自独立
-
每个计数器有两个输入信号CLK 和 GATE ,一个输出信号OUT。
-
计数器内部逻辑图:
由图可知每个计数器包含:
- 控制寄存器(8位)
- 计数初值寄存器CR(16位)
- 计数单元CE(16位)
- 输出寄存器OL (16位)
2,控制字寄存器组
- 保存CPU送来的控制字。
- 根据控制字的最高两位来指明当前的控制字属于哪个计数器。
3,数据总线缓冲器
双向三态的 8 位缓冲器,可与数据总线(D0一D7)直接相连。
4,读/写控制逻辑
其中,A1、A0 :8253片内端口寻址线。
图标速览:
二,8253 的工作方式与应用
8253有六种工作方式:(由控制字寄存器决定)
- 方式0——计数结束中断方式
- 方式1——外触发单稳脉冲方式
- 方式2——频率发生器方式
- 方式3——方波发生器方式
- 方式4——软件触发选通方式
- 方式5——硬件触发选通方式
1,8253 的控制字格式
-
D5D4 位的理解
- ① 计数初值若为12H,只用写计数初值的低8位,则应设置D5D4=01,当把该控制字送给某计数器时,该计数初值寄存器 CR 的高8位置为全0,写入的计数初值 12H 送给低8位,则计数初值为0012H。
- ② 计数初值若为3400H,只用写计数初值的高8位,则应设置D5D4=10,当把该控制字送给某计数器时,该计数初值寄存器 CR 的低8位置为全0,写入的计数初值34H送给高8位,则计数初值为3400H。
- ③ 计数初值若为5678H,则应分别写入计数初值的高8位和低8位,则应设置D5D4=11,当把该控制字送给某计数器时,计数初值寄存器CR的高8位和低8位都准备接收数据,写入计数初值时,第一次写入的78H送给CR的低8位,第二次写入的56H送给CR的高8位,则计数初值为5678H。
-
D0 位的理解:
- 计数初值若为12H ,D0 设为0,实际计数为多少?(12H)
- 计数初值若为12H ,D0 设为1,实际计数为多少?(12)
- 计数初值若为1200 ,D0 设为0,实际计数为多少?(1200)
- 计数初值若为1200 ,D0 设为1,实际计数为多少?(无效,这里在补充一点BCD码的知识辅助理解:“BCD码(Binary-Coded Decimal),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。)
2,8253 的初始化编程
-
1,写入计数器的控制字,规定其工作方式。
-
2,写入计数初值。
由于CE计数器采用减1计数,故当初值为0000H时,是最大的计数初值。
3个计数器的初始化编程可以按照任意顺序。但对某一个计数器来说,则必须按照先写控制字、再写计数初值的顺序进行,不得颠倒。
例题辅助理解:
例:设0#计数器,工作于方式3,计数初值为2000H,采用BCD计数方式;1#计数器,工作于方式2,计数初值为1234,采用二进制计数方式。设8253的端口地址为80H~83H。试编写其初始化程序。
//分析:先按格式写出各计数器工作方式控制字再进行编程
MOV AL,00100111B ;对0#计数器送工作方式字
OUT 83H,AL
MOV AL,20H ;送计数初值
OUT 80H,AL
MOV AL,01110100B ;对1#计数器送工作方式字
OUT 83H,AL
MOV AX,1234 ;送计数初值低8位
OUT 81H,AL ;1234=04D2H
MOV AL,AH ;送计数初值高8位
OUT 81H,AL