实验六 8254定时/计数器实验
1. 实验内容
基础部分
编写程序,使 8254 的计数器 1 分别工作在方式 0、1、2、3 下,在示波器上观察各工作方式下 OUT1 的输出波形。
扩展部分
使用单脉冲开关手动生成 8254 的输入时钟,观察方式 0的输出波形;
编写程序,在示波器上显示周期为 1s 的方波;
利用 8254 方式2或方式3 精确定时,控制 LED 灯 D7~D0 的点亮:
初始时,D7~D0全部熄灭;
1秒钟之后点亮D0,再经过1秒D1D0点亮,…,8秒钟之后D7~D0全部点亮。
2. 实验原理
8254 工作方式介绍
- 方式 0:计数到 0 结束输出正跃变信号方式。
- 方式 1:硬件可重触发单稳方式。
- 方式 2:频率发生器方式。
- 方式 3:方波发生器。
- 方式 4:软件触发选通方式。
- 方式 5:硬件触发选通方式
3. 连线
CLK1和GATE1具体接法见实验分析
4. 实验代码
基础部分:
P8254_0 EQU 0600H
P8254_1 EQU 0602H
P8254_2 EQU 0604H
P8254MODE EQU 0606H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX, P8254MODE
;计数器1,先低再高,二进制
;MOV AL, 01110000B ;方式0
;MOV AL, 01110010B ;方式1
;MOV AL, 01110100B ;方式2
MOV AL, 01110110B ;方式3
OUT DX, AL
MOV DX, P8254_1
MOV AL, 00H ;计数器初值4800H
OUT DX, AL
MOV AL, 48H ;18.432KHZ时钟源,计时1s后输出正跃变信号
OUT DX, AL
JMP $
CODE ENDS
END START
扩展部分:
1
P8254_0 EQU 0600H
P8254_1 EQU 0602H
P8254_2 EQU 0604H
P8254MODE EQU 0606H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX, P8254MODE
MOV AL, 70H ;方式0
OUT DX, AL
MOV DX, P8254_1
MOV AX, 00H
OUT DX, AL
MOV AX, 05H ;按6次后跳变为高电平
OUT DX, AL
JMP $
CODE ENDS
END START
2
P8254_0 EQU 0600H
P8254_1 EQU 0602H
P8254_2 EQU 0604H
P8254MODE EQU 0606H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX, P8254MODE
MOV AL, 76H ;方式3:方波发生器
OUT DX, AL
MOV DX, P8254_1
MOV AX, 00H ;计数器初值4800H
OUT DX, AL
MOV AX, 48H
OUT DX, AL
JMP $
CODE ENDS
END START
3
P8254_0 EQU 0600H
P8254_1 EQU 0602H
P8254_2 EQU 0604H
P8254MODE EQU 0606H
P8255A EQU 0640H
P8255B EQU 0642H
P8255C EQU 0644H
P8255MODE EQU 0646H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX, P8254MODE
MOV AL, 76H ;方式3
OUT DX, AL
MOV DX, P8254_1
MOV AL, 00H
OUT DX, AL
MOV AL, 48H
OUT DX, AL
MOV DX, P8255MODE
MOV AL, 80H
OUT DX, AL
LEA AX, MIR6
MOV SI, 38H
MOV [ES:SI], AX
MOV AX, CS
MOV SI, 3AH
MOV [ES:SI], AX
CLI
MOV AL, 11H
OUT 20H, AL
MOV AL, 08H
OUT 21H, AL
MOV AL, 04H
OUT 21H, AL
MOV AL, 07H
OUT 21H, AL
MOV AL, 2FH
OUT 21H, AL
STI
INIT:
MOV AL, 00H
MOV DX, P8255B
MAIN:
OUT DX, AL
JMP MAIN
MIR6:
CMP AL, 0FFH ;全部点亮后循环
JZ RESET
ROL AL, 1
INC AL
JMP EXIT
RESET: ;重置,熄灭所有灯
MOV AL, 00H
EXIT:
IRET
CODE ENDS
END START
实验分析
1. 基础实验
方式0 下,计数器初值 4800H,CLK1 接 18.432KHZ 时钟源,OUT1 接 IN0,示波器上在 1s 后产生一个正跃变信号,并在此后保持高电平。
方式1 下,计数器初值 4800H,CLK1 接 18.432KHZ 时钟源,GATE1接KK1,OUT1 接 IN0,示波器上为高电平,按下 KK1 后变为低电平开始计时,1s 后产生一个正跃变信号,并在此后保持高电平。
方式2 下,OUT1 接 IN0,示波器上保持高电平,偶尔会出现一个负脉冲(这是由于示波器的采样率不够,无法将每个脉冲捕捉到)。
方式3下,计数器初值 4800H,CLK1 接 18.432KHZ 时钟源,OUT1 接 IN0,示波器上显示周期为 1s 的方波。
2. 扩展实验
在方式0下,将 CLK1 接 KK1,OUT1 接 IN0,计数初值设为 $n$,则按 KK1 $n+1$次后,示波器上产生一个正跃变信号,并在此后保持高电平。
在方式3下,计数器初值设为 4800H,CLK1接 18.432KHZ 时钟源,OUT1 接 IN0,示波器上显示周期为 1s 的方波。
在方式2或方式3下,计数器初值设为 4800H,CLK1接 18.432KHZ 时钟源,OUT1接MIR6,每秒产生一个中断。