实验六 8254定时/计数器实验


实验六 8254定时/计数器实验

1. 实验内容

基础部分

编写程序,使 8254 的计数器 1 分别工作在方式 0、1、2、3 下,在示波器上观察各工作方式下 OUT1 的输出波形。

扩展部分

  1. 使用单脉冲开关手动生成 8254 的输入时钟,观察方式 0的输出波形;

  2. 编写程序,在示波器上显示周期为 1s 的方波

  3. 利用 8254 方式2或方式3 精确定时,控制 LED 灯 D7~D0 的点亮:

    • 初始时,D7~D0全部熄灭;

    • 1秒钟之后点亮D0,再经过1秒D1D0点亮,…,8秒钟之后D7~D0全部点亮。

2. 实验原理

8254 工作方式介绍

  1. 方式 0:计数到 0 结束输出正跃变信号方式。
  2. 方式 1:硬件可重触发单稳方式。
  3. 方式 2:频率发生器方式。
  4. 方式 3:方波发生器。
  5. 方式 4:软件触发选通方式。
  6. 方式 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. 基础实验

  1. 方式0 下,计数器初值 4800H,CLK1 接 18.432KHZ 时钟源,OUT1 接 IN0,示波器上在 1s 后产生一个正跃变信号,并在此后保持高电平。

  2. 方式1 下,计数器初值 4800H,CLK1 接 18.432KHZ 时钟源,GATE1接KK1,OUT1 接 IN0,示波器上为高电平,按下 KK1 后变为低电平开始计时,1s 后产生一个正跃变信号,并在此后保持高电平。

  3. 方式2 下,OUT1 接 IN0,示波器上保持高电平,偶尔会出现一个负脉冲(这是由于示波器的采样率不够,无法将每个脉冲捕捉到)。

  4. 方式3下,计数器初值 4800H,CLK1 接 18.432KHZ 时钟源,OUT1 接 IN0,示波器上显示周期为 1s 的方波。

2. 扩展实验

  1. 在方式0下,将 CLK1 接 KK1,OUT1 接 IN0,计数初值设为 $n$,则按 KK1 $n+1$次后,示波器上产生一个正跃变信号,并在此后保持高电平。

  2. 在方式3下,计数器初值设为 4800H,CLK1接 18.432KHZ 时钟源,OUT1 接 IN0,示波器上显示周期为 1s 的方波。

  3. 在方式2或方式3下,计数器初值设为 4800H,CLK1接 18.432KHZ 时钟源,OUT1接MIR6,每秒产生一个中断。


文章作者: Mathison2020
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Mathison2020 !
  目录