8254定时/计数器应用实验
1 实验目的
1. 掌握8254的工作方式及应用编程。
2. 掌握8254典型应用电路的接法。
2 实验设备
PC机一台,TD-PITE实验装置一套。
3 实验内容
1. 计数应用实验。编写程序,应用8254的计数功能,使用单次脉冲模拟计数,使每当按动‘KK1+’5次后,产生一次计数中断,并在屏幕上显示一个字符‘M’。
2. 定时应用实验。编写程序,应用8254的定时功能,产生一个1s的方波。
4 实验原理
8254是Intel公司生产的可编程间隔定时器。是8253的改进型,比8253具有更优良的性能。8254具有以下基本功能:
(1)有3个独立的16位计数器。
(2)每个计数器可按二进制或十进制(BCD)计数。
(3)每个计数器可编程工作于6种不同工作方式。
(4)8254每个计数器允许的最高计数频率为10MHz(8253为2MHz)。
(5)8254有读回命令(8253没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。
(6)计数脉冲可以是有规律的时钟信号,也可以是随机信号。计数初值公式为:
n=fCLKi÷fOUTi、其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。
图4.27是8254的内部结构框图和引脚图,它是由与CPU的接口、内部控制电路和三个计数器组成。8254的工作方式如下述:
(1)方式0:计数到0结束输出正跃变信号方式。
(2)方式1:硬件可重触发单稳方式。
(3)方式2:频率发生器方式。
(4)方式3:方波发生器。
(5)方式4:软件触发选通方式。
(6)方式5:硬件触发选通方式。
图4.27 8254的内部接口和引脚
8254的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。这两个控制字共用一个地址,由标识位来区分。控制字格式如表4.3—4.5所示。
表4.3 8254的方式控制字格式
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
计数器选择 | 读/写格式选择 | 工作方式选择 | 计数码制选择 | ||||
00-计数器0 01-计数器1 10-计数器2 11-读出控制 字标志 | 00-锁存计数值 01-读/写低8位 10-读/写高8位 11-先读/写低8位 再读/写高8位 | 000-方式0 001-方式1 010-方式2 011-方式3 100-方式4 101-方式5 | 0-二进制数 1-十进制数 |
表4.4 8254读出控制字格式
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
1 | 1 | 0-锁存计数值 | 0-锁存状态信息 | 计数器选择(同方式控制字) | 0 |
表4.5 8254状态字格式
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
OUT引脚现行状态 1-高电平 0-低电平 | 计数初值是否装入 1-无效计数 0-计数有效 | 计数器方式(同方式控制字) |
8254实验单元电路图如下图所示:
图4.28 8254实验电路原理图
5 实验步骤
1. 计数应用实验
编写程序,将8254的计数器0设置为方式3,计数值为十进制数4,用单次脉冲KK1+作为CLK0时钟,OUT0连接MIR7,每当KK1+按动5次后产生中断请求,在屏幕上显示字符“M”。
实验步骤:
(1)实验接线如图4.29所示。
(2)编写实验程序,经编译、链接无误后装入系统。
(3)运行程序,按动KK1+产生单次脉冲,观察实验现象。
(4)改变计数值,验证8254的计数功能。
图4.29 8254计数应用实验接线图
实验程序清单(A82541.ASM)
A8254 EQU 06C0H ;8254计数器0端口地址
B8254 EQU 06C2H ;8254计数器1端口地址
C8254 EQU 06C4H ;8254计数器2端口地址
CON8254 EQU 06C6H ;8254 控制寄存器端口地址
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:SSTACK
START: PUSH DS
MOV AX, 0000H
MOV DS, AX
MOV AX, OFFSET IRQ7 ;取中断入口地址
MOV SI, 003CH ;中断矢量地址
MOV [SI], AX ;填IRQ7的偏移矢量
MOV AX, CS ;段地址
MOV SI, 003EH
MOV [SI], AX ;填IRQ7的段地址矢量
CLI ;中断屏蔽clear interrupt
POP DS
;初始化主片8259
MOV AL, 11H ;0001 0001 级联,边沿触发,要ICW4
OUT 20H, AL ;ICW1
MOV AL, 08H ;0000 1000 中断类型号从8开始
OUT 21H, AL ;ICW2
MOV AL, 04H ;0000 0100
OUT 21H, AL ;ICW3
MOV AL, 01H ;0000 0001 非缓冲方式,8086/8088配置
OUT 21H, AL ;ICW4
MOV AL, 6FH ;OCW1 0110 1111 IR7,IR4引脚的中断开放
OUT 21H, AL
;8254
MOV DX, CON8254
MOV AL, 10H ;0001 0000计数器0,方式0
OUT DX, AL
MOV DX, A8254
MOV AL, 04H
OUT DX, AL
STI ;开中断
AA1: JMP AA1 ;无限循环
IRQ7: MOV DX, A8254
MOV AL, 04H ;0000 0100
OUT DX, AL
MOV AH, 02H ;M 4DH
MOV DL, 4DH
INT 21H
MOV AH, 02H
MOV DL, 20H
INT 21H
MOV AL, 20H
OUT 20H, AL ;中断结束命令
IRET
CODE ENDS
END START
2. 定时应用实验
编写程序,将8254的计数器0和计数器1都设置为方式3,用信号源1MHz作为CLK0时钟,OUT0为波形输出1ms方波,再通过CLK1输入,OUT1输出1s方波。
实验步骤:
(1)接线图如图4.30所示。
(2)根据实验内容,编写实验程序,经编译、链接无误后装入系统。
(3)单击按钮,运行实验程序,8254的OUT1会输出1s的方波。
(4)用示波器观察波形的方法:单击虚拟仪器菜单中的按钮或直接单击工具栏的按钮,在新弹出的示波器界面上单击按钮运行示波器,就可以观测出OUT1输出的波形。
实验程序清单(A82542.ASM)
A8254 EQU 06C0H ;8254计数器0端口地址
B8254 EQU 06C2H ;8254计数器1端口地址
C8254 EQU 06C4H ;8254计数器2端口地址
CON8254 EQU 06C6H ;8254 控制寄存器端口地址
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX, CON8254 ;8254
MOV AL, 36H ;0011 0110计数器0,方式3
OUT DX, AL
MOV DX, A8254
MOV AL, 0E8H ;03E8H --> 1000
OUT DX, AL
MOV AL, 03H
OUT DX, AL
MOV DX, CON8254 ;8254
MOV AL, 76H ;0111 0110计数器1,方式3
OUT DX, AL
MOV DX, B8254
MOV AL, 0E8H ;03E8H --> 1000
OUT DX, AL
MOV AL, 03H
OUT DX, AL
AA1: JMP AA1
CODE ENDS
END START
图4.30 8254定时应用实验接线图
附表 输入/输出接口编址
| 信号线 | 编址空间 |
主片8259 |
| 20H、21H |
从片8259 |
| A0H、A1H |
扩展I/O接口 | IOY0 | 0600H~063FH |
IOY1 | 0640H~067FH | |
IOY2 | 0680H~06BFH | |
IOY3 | 06C0H~06FFH |
附表 INT 10H 使用说明
入口:AH=01H,AL=数据 功能:写AL中的数据到屏上 |
入口:AH=06H,DS:BX=字串首址,且字串尾用00H填充 功能:显示一字串,直到遇到00H为止 |
附表 INT 21H使用说明
入口:AH=00H或AH=4CH 功能:程序终止 |
入口:AH=01H 功能:读键盘输入到AL中并回显 |
入口:AH=02H,DL=数据 功能:写DL中的数据到显示屏 |
入口:AH=08H 功能:读键盘输入到AL中无回显 |
入口:AH=09H,DS:DX=字符串首地址,字符串以 '$' 结束 功能:显示字符串,直到遇到 '$' 为止 |
入口:AH=0AH,DS:DX=缓冲区首地址,(DS:DX)=缓冲区最大字符数, (DS:DX+1)=实际输入字符数,(DS:DX+2)=输入字符串起始地址 功能:读键盘输入的字符串到DS:DX指定缓冲区中并以回车结束 |