微机原理实验

8255芯片+8254芯片实现硬延时跑马灯

仅供参考

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
;此案例中8255的四个端口地址依次为 280H 281H 282H 283H
; 8254的依次为 298H 299H 29AH 29BH
;8255接Y0 8254接Y3
;此程序实现目标,通过开关D0来启动或终止跑马灯,每个灯亮延时2s
;这里是用8255的A口来输入8254处理过的脉冲信号,B口输出,C口输入开关状态
CODE SEGMENT
ASSUME CS:CODE

START:
MOV DX,283H
MOV AL,10011001B
OUT DX,AL ;向8255写入控制字

-- 初始化8254 使其达到一个2s的延时效果---这里使用了一个级联的方式,使用了1号通道和2号通道级联;
MOV AL,01110101B ;写入8254 1号通道的控制字
MOV DX,29BH
OUT DX,AL
MOV AL,00H
MOV DX,299H
OUT DX,AL
MOV AL,10H
OUT DX,AL

MOV AL,10110111B ;写入8254 2号通道的控制字
MOV DX,29BH
OUT DX,AL
MOV AL,00H
MOV DX,29AH
OUT DX,AL
MOV AL,40H
OUT DX,AL ;初始化结束

MOV BL,04H ;设定初值,暂存于BL中
;读入开关状态,是否是D0接入
T1:
MOV DX,282H
IN AL,DX
TEST AL,01H ;00000001B
JZ T1
;读8254输出电平的状态,若为低电平则继续循环,等待高电平到来
T2:
MOV DX,280H
IN AL,DX
TEST AL,01H
JZ T2
;前面都准备就绪,开始让第三个灯亮
MOV DX,281H
MOV AL,BL
OUT DX,AL
T4:
;测试此时是否为高电平,
MOV DX,280H
IN AL,DX
TEST AL,01H
JNZ T4
;当此刻为高电平,则完成了延时过程,实现了延时2s
;循环左移一位
ROL BL,1
JMP T1

CODE ENDS
END START

课程实验总结,仅供参考。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!