Skip to content

[微机实验/TD-PITE] 8254 定时/计数器实验+选做实验

Published: at 16:31

ToC

实验内容

观察 8254 工作在方式 0、方式 1、方式 2 和方式 3 的波形。

实验接线

实验说明中使用的是计数器 1,但我的环境下计数器 1 之前不知道出了什么问题,无法正常使用。更换为计数器 0 则工作正常,因此以下实验均以计数器 0 实现。

现在发现好像是初值赋值的变量出问题了,但我懒得改了(

接线如下图:

CLK0 与时钟源的 18.432kHz 相连,GATE 与开关及 LED 现实单元的 K0 相连。

代码

1
C018254 EQU 0600H
2
C028254 EQU 0602H
3
C038254 EQU 0604H
4
CON8254 EQU 0606H
5
6
CODE SEGMENT
7
ASSUME CS:CODE
8
9
START PROC
10
MOV DX, CON8254
11
;; 01: COUNTER 1
12
;; 11: READ HIGHER 8 BYTES
13
;; THEN LOWER 8 BYTES
14
;; 000:WORK TYPE 0
15
;; 0: BINARY NUMBER
16
MOV AL, 00110000B
17
;;MOV AL, 00110010B
18
;;MOV AL, 00110100B
19
;;MOV AL, 00110110B
20
OUT DX, AL
21
22
MOV DX, C018254
23
MOV AL, 00H ;; LOWER 8 BYTES
24
OUT DX, AL
25
26
MOV AL, 48H ;; HIGHER 8 BYTES
27
OUT DX, AL
28
29
LO:
30
JMP LO
31
32
MOV AX, 4C00H
33
INT 21H
34
START ENDP
35
36
CODE ENDS
37
END START

这里值得注意的是我们将计数器初值设置成了 0x4800,这个值的十进制表示就是 18432,与时钟源的频率相同,即计数一秒。

波形

方式 0

GATE 输入设置为高电平,等待一秒后输出变为高电平。

方式 1

计数器在 GATE 边沿启动。书上说是上升沿,但其实下降沿也会触发。

方式 2

方式 2 我不清楚输出是否正确,仅作参考。

方式 3

方式 3 是方波输出,如下所示。

选做实验:手动控制输入时钟

连线

修改布线,将 CLK0KK1+ 相连,如下图所示:

代码

1
C018254 EQU 0600H
2
C028254 EQU 0602H
3
C038254 EQU 0604H
4
CON8254 EQU 0606H
5
6
CODE SEGMENT
7
ASSUME CS:CODE
8
9
START PROC
10
MOV DX, CON8254
11
MOV AL, 00110000B
12
OUT DX, AL
13
14
MOV DX, C018254
15
MOV AL, 08H ;; LOWER 8 BYTES
16
OUT DX, AL
17
18
MOV AL, 00H ;; HIGHER 8 BYTES
19
OUT DX, AL
20
21
LO:
22
JMP LO
23
24
MOV AX, 4C00H
25
INT 21H
26
START ENDP
27
28
CODE ENDS
29
END START

输出

连按 KK1 即可,待计数值归零时就会变为高电平。

选做实验:周期为 1 的方波

这个实验我们在基础实验的时候就已经做完了,这里就跳过了。

选做实验:控制 LED

连线

正常连接 8255 即可。OUT0 连接 MIR6,通过中断控制 LED 移动。

代码

1
C018254 EQU 0600H
2
C028254 EQU 0602H
3
C038254 EQU 0604H
4
CON8254 EQU 0606H
5
6
CODE SEGMENT
7
ASSUME CS:CODE
8
9
START PROC
10
MOV BX, 0;
11
12
;; INIT 8255
13
MOV DX, 0646H
14
MOV AL, 90H ;; 10010000B, INPUT FROM A & OUTPUT TO B
15
OUT DX, AL
16
17
;; MIR6
18
MOV AX, OFFSET MIR6 ;; PUT CS:IP TO INTERRUPT VECTOR ADDRESS
19
;; 6: 38H - 3BH
20
;; IP -> 38H
21
;; CS -> 3AH
22
MOV SI, 38H
23
MOV [SI], AX
24
MOV AX, CS
25
MOV SI, 3AH
26
MOV [SI], AX
27
28
;; --------------------------------------------------
29
;; INIT 8259
30
CLI
31
MOV AL, 11H
32
OUT 20H, AL
33
MOV AL, 08H
34
OUT 21H, AL
35
MOV AL, 04H
36
OUT 21H, AL
37
MOV AL, 07H
38
OUT 21H, AL
39
MOV AL, 2FH
40
OUT 21H, AL
41
STI
42
;; --------------------------------------------------
43
44
MOV DX, CON8254
45
;;MOV AL, 00110100B
46
MOV AL, 00110110B
47
OUT DX, AL
48
49
MOV DX, C018254
50
MOV AL, 00H ;; LOWER 8 BYTES
51
OUT DX, AL
52
53
MOV AL, 48H ;; HIGHER 8 BYTES
54
OUT DX, AL
55
56
MOV BX, 0
57
58
LO:
59
JMP LO
60
61
MOV AX, 4C00H
62
INT 21H
63
START ENDP
64
65
MIR6:
66
CMP BL, 0FFH
67
JE WRITE
68
69
SHL BL, 1
70
INC BL
71
WRITE:
72
MOV DX, 0642H
73
MOV AL, BL
74
OUT DX, AL
75
IRET
76
77
CODE ENDS
78
END START

效果