18 4月, 2016

微机系统与接口实验(六)—8254定时/计数器实验

1. 实验目的

  • 了解定时计数器8254的初始化及用法。
  • 了解定时计数器8254各种工作方式的特点。

2. 实验内容

  • 题目:编写程序,使8254的计数器1分别工作在方式0、1、3下,在示波器上观察各工作方式下OUT1的输出波形。
  • 实验扩展1:利用8254产生周期为1s的方波。
  • 实验扩展2:使计数器工作在方式2,在示波器上观察OUT1的输出波形。要求负脉冲清晰可见。

3. 实验说明

  • 实验中CLK1和GATE1的连接需要自行确定。我的选择是将OUT0连接CLK1,这样计数器1的计数脉冲可以由8254计数器0工作在方式3下产生,并且计数脉冲的周期和频率可以人为控制。GATE1则直接连接开关,可以由开关的闭合控制GATE1的高低电平。
  • 本实验对8254在各种工作方式下的波形变化的理解要求较深,建议做实验之前弄懂《微型计算机原理与接口技术》P191-217的内容。
  • 以下所有程序的连线都如上所说。

4. 8254计数器1工作在方式0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
A8254 EQU 0600H
B8254 EQU 0602H 
C8254 EQU 0604H 
CON8254 EQU 0606H
;8254计数器012以及控制端口的地址,由IOY决定
SSTACK SEGMENT STACK 
    DW 32 DUP(?) 
SSTACK ENDS 
CODE SEGMENT 
    ASSUME CS:CODE
START: 
    MOV DX, CON8254
    MOV AL, 36H             ;8254计数器0工作在方式3,产生方波,相当于CLK
    OUT DX, AL
    MOV DX, A8254
    MOV AL, 0E8H
    OUT DX, AL
    MOV AL, 03H             ;分别写入低8位和高8位计数器初值,合起来是3E8H=1000
    OUT DX, AL
 
    MOV DX, CON8254
    MOV AL, 70H             ;8254计数器0工作在方式0,计数时输出低电平,到0时输出高电平 
    OUT DX, AL 
    MOV DX, B8254 
    MOV AL, 00H 
    OUT DX, AL 
    MOV AL, 0AH             ;写入计数初值0A00H
    OUT DX, AL 
AA1: 
    JMP AA1 
;将GATE1置为低电平,运行程序。
;将GATE1置为高电平,在示波器中可以观察到OUT1输出低电平,待过一段时间后(计数器减至0)输出高电平。
CODE ENDS 
    END START

5. 8254计数器1工作在方式1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
A8254 EQU 0600H
B8254 EQU 0602H 
C8254 EQU 0604H 
CON8254 EQU 0606H
SSTACK SEGMENT STACK 
    DW 32 DUP(?) 
SSTACK ENDS 
CODE SEGMENT 
    ASSUME CS:CODE
START: 
    MOV DX, CON8254
    MOV AL, 36H
    OUT DX, AL
    MOV DX, A8254
    MOV AL, 0E8H
    OUT DX, AL
    MOV AL, 03H
    OUT DX, AL
    ;8254计数器0工作在方式3,产生方波,相当于CLK
    MOV DX, CON8254
    MOV AL, 72H             ;8254计数器0工作在方式1,计数时输出低电平,到0时输出高电平 
    OUT DX, AL 
    MOV DX, B8254 
    MOV AL, 00H 
    OUT DX, AL 
    MOV AL, 0AH             ;写入计数初值0A00H
    OUT DX, AL 
AA1: 
    JMP AA1 
;将GATE1置为低电平,运行程序,在示波器中可以看到OUT1输出高电平。
;把开关闭合然后快速断开,使GATE1产生一次脉冲,在示波器中可以观察到OUT1输出低电平
;待过一段时间后(计数器减至0)输出高电平。
;重复上述过程,可以看到每次GATE1产生脉冲,8254都会开始计数(输出低电平),计数器减至0时恢复高电平。
CODE ENDS 
    END START

6. 8254计数器1工作在方式3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
A8254 EQU 0600H
B8254 EQU 0602H 
C8254 EQU 0604H 
CON8254 EQU 0606H
SSTACK SEGMENT STACK 
    DW 32 DUP(?) 
SSTACK ENDS 
CODE SEGMENT 
    ASSUME CS:CODE
START: 
    MOV DX, CON8254
    MOV AL, 36H
    OUT DX, AL
    MOV DX, A8254
    MOV AL, 0E8H
    OUT DX, AL
    MOV AL, 03H
    OUT DX, AL
    ;8254计数器0工作在方式3,产生方波,相当于CLK
    MOV DX, CON8254
    MOV AL, 76H             ;8254计数器0工作在方式3,产生方波。 
    OUT DX, AL 
    MOV DX, B8254 
    MOV AL, 00H 
    OUT DX, AL 
    MOV AL, 0AH             ;写入计数初值0A00H
    OUT DX, AL 
AA1: 
    JMP AA1 
;将GATE1置为高电平,运行程序,在示波器中可以看到OUT1规律输出方波。
CODE ENDS 
    END START

7. 产生周期为1s的方波

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
A8254 EQU 0600H
B8254 EQU 0602H 
C8254 EQU 0604H 
CON8254 EQU 0606H
SSTACK SEGMENT STACK 
    DW 32 DUP(?) 
SSTACK ENDS 
CODE SEGMENT 
    ASSUME CS:CODE
START: 
    MOV DX, CON8254
    MOV AL, 36H
    OUT DX, AL
    MOV DX, A8254
    MOV AL, 0E8H
    OUT DX, AL
    MOV AL, 03H
    OUT DX, AL
    ;8254计数器0工作在方式3,产生方波,相当于CLK
    MOV DX, CON8254
    MOV AL, 76H             ;8254计数器0工作在方式3,产生方波。 
    OUT DX, AL 
    MOV DX, B8254 
    MOV AL, 0E8H
    OUT DX, AL 
    MOV AL, 03H             ;写入计数初值0E8H
    OUT DX, AL 
AA1: 
    JMP AA1 
;将GATE1置为高电平,运行程序,在示波器中可以看到OUT1规律输出方波。
;CLK0输入为1MHz的计数脉冲,周期为1μs,产生1s周期的方波需要1s/1μs=1000000个计数
;由于单个计数器的上限为2的16次方为65536远小于所需计数值
;因此将1000000拆分成1000*1000,计数器0的计数初值为1000,产生1ms的计数脉冲输入到CLK1
;计数器1的计数初值为1000,最终计数器1产生1s的方波。
CODE ENDS 
    END START

8. 8254计数器1工作在方式2且负脉冲清晰可见

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
A8254 EQU 0600H
B8254 EQU 0602H 
C8254 EQU 0604H 
CON8254 EQU 0606H
SSTACK SEGMENT STACK 
    DW 32 DUP(?) 
SSTACK ENDS 
CODE SEGMENT 
    ASSUME CS:CODE
START: 
    MOV DX, CON8254
    MOV AL, 36H
    OUT DX, AL
    MOV DX, A8254
    MOV AL, 0FFH
    OUT DX, AL
    MOV AL, 0FFH
    OUT DX, AL
    ;8254计数器在方式2下的负脉冲宽度仅为一个周期,所以加大OUT0产生的计数脉冲(CLK1)的周期。
    MOV DX, CON8254
    MOV AL, 74H             ;8254计数器0工作在方式3,产生方波。 
    OUT DX, AL 
    MOV DX, B8254 
    MOV AL, 11H
    OUT DX, AL 
    MOV AL, 00H             ;写入计数初值11H,因为计数脉冲周期变长,次数适当减少计数器1的计数初值。
    OUT DX, AL 
AA1: 
    JMP AA1 
;将GATE1置为高电平,运行程序,在示波器中可以看到OUT1输出一段高电平后会输出一个宽度为一个周期的负脉冲。
CODE ENDS 
    END START

You may also like...

发表评论

电子邮件地址不会被公开。

This site uses Akismet to reduce spam. Learn how your comment data is processed.