微机原理与接口技术——8255A的使用方法


本次我们介绍一下8255A芯片的使用方法
在对8255A进行编程操作时候,我们只需要了解三个步骤:
(1)控制端口写控制字;
(2)8255A端口地址计算;
(3)对应端口读/写数据。
8255A控制字:
在这里插入图片描述
对8255A写控制字可以理解为配置各个端口的工作方式,以及输入输出模式。D7标志位主要是为了区分端口C的控制字。
举例:

1
2
3
       MOV AL,10001001B
       MOV DX,CRTL_PORT  ;CRTL_PORT为控制的端口地址
       OUT DX,AL

此程序的目的是配置C端口为输入模式,其他端口为输出模式,且工作与方式0。
举个例题:
在这里插入图片描述
这个题我们最开始想到的组合是8种,在控制字编程中,C端口的高位和低位是分开配置的,所以这道题的答案是16种。
端口置位/复位控制字:
这个其实就是对C端口的某些位进行置位或者清零操作
在这里插入图片描述对C端口进行置位/清零操作也是往控制端口写入数据,D7=0。

举例:


下面介绍一下8255A端口地址计算:

在这里插入图片描述
根据本图得连接方式可知,CS端由74154芯片的IO1端控制,A13~A14控制74154芯片的使能。A1,A2控制端口选择。
在这里插入图片描述
由此可以端口状态表:
在这里插入图片描述
A16~A19为参与地址控制,置0。由此可知:
当A2=0,A1=0,选中A端口,A端口地址为0200H
当A2=0,A1=1,选中B端口,B端口地址为0202H
当A2=1,A1=0,选中C端口,C端口地址为0204H
当A2=1,A1=1,选中控制端口,控制端口地址为0206H
例题:
在这里插入图片描述
该题的目的是C端口开关传送开关状态,随后在数码管显示。
先计算端口地址:
由于74LS138 Y4 端口控制片选所以 C B A 状态为1 0 0,A7~A15通过与门控制使能端,所以只能是高电平,同理A5需要为低电平。状态图为:
在这里插入图片描述
经计算得出:A端口地址为:FF84H
B端口地址为:FF85H
C端口地址为:FF86H
控制端口地址为:FF87H
代码如下:

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
A_PORT    EQU  0FF84H  
B_PORT    EQU  0FF85H  
C_PORT    EQU   0FF86H
CRTL_PORT EQU  0FF87H
DATA SEGMENT
    LEDTAB  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
       MOV DS,AX     ;段基地址初始化
       
       MOV AL,10001001B
       MOV DX,CRTL_PORT
       OUT DX,AL           ;8255A写入控制字    
KEY_PRESS:
       MOV DX,C_PORT
       IN AL,DX         ;C端口状态存入AL寄存器中
       MOV CL,AL         ;将AL内容送入CL寄存器中,目的一会取高四位状态送入B端
       
       AND AL,0FH   ;与操作,高四位清零,取低四位

       MOV BX,offset LEDTAB  
       XLAT          
       MOV DX,A_PORT    
       OUT DX,AL       ;A端口输出低四位的值
       
       ROR CL,4       ;逻辑循环有移动,高四位变成低四位,
       MOV AL,CL
       AND AL,0FH     ;与操作,高四位清零,取低四位,此时取的是高位
       MOV BX,offset LEDTAB  
       XLAT
       MOV DX,B_PORT    
        OUT DX,AL        ;B端口输出高四位的值
       JMP KEY_PRESS     ;死循环,一直扫描C端按键状态
       
CODE ENDS
END START